1a1e12872SBarry Smith /* 2c0581c19SLois Curfman McInnes This file provides some name space protection from LAPACK and BLAS and 3c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used. 4c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines. 55392566eSBarry Smith 6217f3c9bSSatish Balay Another problem is character strings are represented differently on 75392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the 8633a50d3SSatish Balay Cray T3D/T3E. 95392566eSBarry Smith 10a1e12872SBarry Smith */ 11c3e41550SBarry Smith #if !defined(_BLASLAPACK_H) 12c3e41550SBarry Smith #define _BLASLAPACK_H 1319b02663SBarry Smith #include "petsc.h" 14e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 15bb638ab5SSatish Balay 168e0e00b1SSatish Balay #if defined(PETSC_BLASLAPACK_MKL64_ONLY) 178e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 188e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GEEV 198e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRF 208e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRF 218e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRS 228e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRS 23e7906763SSatish Balay #elif defined(PETSC_BLASLAPACK_MKL_ONLY) 24bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 25bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GEEV 26ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY) 27bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 28ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY) 29e3353558SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 30ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF 31ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS 32ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF 33ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS 34bb638ab5SSatish Balay #endif 35bb638ab5SSatish Balay 368f4c8dbaSBarry Smith /* 37633a50d3SSatish Balay This include file on the Cray T3D/T3E defines the interface between 38217f3c9bSSatish Balay Fortran and C representations of character strings. 398f4c8dbaSBarry Smith */ 40f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 4193c39befSBarry Smith #include <fortran.h> 425392566eSBarry Smith #endif 435392566eSBarry Smith 44aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX) 454eeb42bcSBarry Smith 464eeb42bcSBarry Smith /* 474eeb42bcSBarry Smith These are real case with no character string arguments 484eeb42bcSBarry Smith */ 498f4c8dbaSBarry Smith 50f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE) 518f4c8dbaSBarry Smith /* 528f4c8dbaSBarry Smith For these machines we must call the single precision Fortran version 538f4c8dbaSBarry Smith */ 548f4c8dbaSBarry Smith #define DGEQRF SGEQRF 558f4c8dbaSBarry Smith #define DGETRF SGETRF 568f4c8dbaSBarry Smith #define DDOT SDOT 578f4c8dbaSBarry Smith #define DNRM2 SNRM2 588f4c8dbaSBarry Smith #define DSCAL SSCAL 598f4c8dbaSBarry Smith #define DCOPY SCOPY 608f4c8dbaSBarry Smith #define DSWAP SSWAP 618f4c8dbaSBarry Smith #define DAXPY SAXPY 628f4c8dbaSBarry Smith #define DASUM SASUM 638f4c8dbaSBarry Smith #define DSORMQR SORMQR 648f4c8dbaSBarry Smith #define DTRTRS STRTRS 658f4c8dbaSBarry Smith #define DPOTRF SPOTRF 668f4c8dbaSBarry Smith #define DPOTRS SPOTRS 678f4c8dbaSBarry Smith #define DGEMV SGEMV 688f4c8dbaSBarry Smith #define DGETRS SGETRS 698f4c8dbaSBarry Smith #define DGETRS SGETRS 708f4c8dbaSBarry Smith #define DGEMM SGEMM 718f4c8dbaSBarry Smith #define DGESVD SGESVD 72d4fbbf0eSBarry Smith #define DGEEV SGEEV 738f4c8dbaSBarry Smith #define DTRMV STRMV 748f4c8dbaSBarry Smith #define DTRSL STRSL 758f4c8dbaSBarry Smith #endif 768f4c8dbaSBarry Smith 7701ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE) 7801ad1a64SSatish Balay 7901ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 80*71044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf_ 81*71044d3cSBarry Smith #define LAPACKgetrf_ sgetrf_ 82*71044d3cSBarry Smith #define LAPACKgetf2_ sgetf2_ 83*71044d3cSBarry Smith #define BLASdot_ sdot_ 84*71044d3cSBarry Smith #define BLASnrm2_ snrm2_ 85*71044d3cSBarry Smith #define BLASscal_ sscal_ 86*71044d3cSBarry Smith #define BLAScopy_ scopy_ 87*71044d3cSBarry Smith #define BLASswap_ sswap_ 88*71044d3cSBarry Smith #define BLASaxpy_ saxpy_ 89*71044d3cSBarry Smith #define BLASasum_ sasum_ 9001ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS) 91*71044d3cSBarry Smith #define LAPACKgeqrf_ SGEQRF 92*71044d3cSBarry Smith #define LAPACKgetrf_ SGETRF 93*71044d3cSBarry Smith #define LAPACKgetf2_ SGETF2 94*71044d3cSBarry Smith #define BLASdot_ SDOT 95*71044d3cSBarry Smith #define BLASnrm2_ SNRM2 96*71044d3cSBarry Smith #define BLASscal_ SSCAL 97*71044d3cSBarry Smith #define BLAScopy_ SCOPY 98*71044d3cSBarry Smith #define BLASswap_ SSWAP 99*71044d3cSBarry Smith #define BLASaxpy_ SAXPY 100*71044d3cSBarry Smith #define BLASasum_ SASUM 10101ad1a64SSatish Balay #else 102*71044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf 103*71044d3cSBarry Smith #define LAPACKgetrf_ sgetrf 104*71044d3cSBarry Smith #define LAPACKgetf2_ sgetf2 105*71044d3cSBarry Smith #define BLASdot_ sdot 106*71044d3cSBarry Smith #define BLASnrm2_ snrm2 107*71044d3cSBarry Smith #define BLASscal_ sscal 108*71044d3cSBarry Smith #define BLAScopy_ scopy 109*71044d3cSBarry Smith #define BLASswap_ sswap 110*71044d3cSBarry Smith #define BLASaxpy_ saxpy 111*71044d3cSBarry Smith #define BLASasum_ sasum 11201ad1a64SSatish Balay #endif 11301ad1a64SSatish Balay 11401ad1a64SSatish Balay #else 11501ad1a64SSatish Balay 116ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 117*71044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf_ 118*71044d3cSBarry Smith #define LAPACKgetrf_ dgetrf_ 119*71044d3cSBarry Smith #define LAPACKgetf2_ dgetf2_ 120*71044d3cSBarry Smith #define BLASdot_ ddot_ 121*71044d3cSBarry Smith #define BLASnrm2_ dnrm2_ 122*71044d3cSBarry Smith #define BLASscal_ dscal_ 123*71044d3cSBarry Smith #define BLAScopy_ dcopy_ 124*71044d3cSBarry Smith #define BLASswap_ dswap_ 125*71044d3cSBarry Smith #define BLASaxpy_ daxpy_ 126*71044d3cSBarry Smith #define BLASasum_ dasum_ 127aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 128*71044d3cSBarry Smith #define LAPACKgeqrf_ DGEQRF 129*71044d3cSBarry Smith #define LAPACKgetrf_ DGETRF 130*71044d3cSBarry Smith #define LAPACKgetf2_ DGETF2 131*71044d3cSBarry Smith #define BLASdot_ DDOT 132*71044d3cSBarry Smith #define BLASnrm2_ DNRM2 133*71044d3cSBarry Smith #define BLASscal_ DSCAL 134*71044d3cSBarry Smith #define BLAScopy_ DCOPY 135*71044d3cSBarry Smith #define BLASswap_ DSWAP 136*71044d3cSBarry Smith #define BLASaxpy_ DAXPY 137*71044d3cSBarry Smith #define BLASasum_ DASUM 13825fce39dSBarry Smith #else 139*71044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf 140*71044d3cSBarry Smith #define LAPACKgetrf_ dgetrf 141*71044d3cSBarry Smith #define LAPACKgetf2_ dgetf2 142*71044d3cSBarry Smith #define BLASdot_ ddot 143*71044d3cSBarry Smith #define BLASnrm2_ dnrm2 144*71044d3cSBarry Smith #define BLASscal_ dscal 145*71044d3cSBarry Smith #define BLAScopy_ dcopy 146*71044d3cSBarry Smith #define BLASswap_ dswap 147*71044d3cSBarry Smith #define BLASaxpy_ daxpy 148*71044d3cSBarry Smith #define BLASasum_ dasum 149a1e12872SBarry Smith #endif 150a1e12872SBarry Smith 15101ad1a64SSatish Balay #endif 15201ad1a64SSatish Balay 1534eeb42bcSBarry Smith /* 1544eeb42bcSBarry Smith Real with character string arguments. 1554eeb42bcSBarry Smith */ 156f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 1578f4c8dbaSBarry Smith /* 1588f4c8dbaSBarry Smith Note that this assumes that machines which use cptofcd() use 159aa482453SBarry Smith the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E. 1608f4c8dbaSBarry Smith */ 161*71044d3cSBarry Smith #define LAPACKormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m) DORMQR(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 162*71044d3cSBarry Smith #define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j) DTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 163*71044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e) DPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 164*71044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h) DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 165*71044d3cSBarry Smith #define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k) DGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k)) 166*71044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 167*71044d3cSBarry Smith #define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) DGEMM(_cptofcd((a),1), _cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 168*71044d3cSBarry Smith #define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGESVD(_cptofcd((a),1),_cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 169*71044d3cSBarry Smith #define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGEEV(_cptofcd((a),1),_cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 170*71044d3cSBarry Smith #define BLAStrmv_ DTRMV 171*71044d3cSBarry Smith #define LAPACKtrsl_ DTRSL 172*71044d3cSBarry Smith #define LAPACKgetrf_ DGETRF 173516d1546SSatish Balay 174516d1546SSatish Balay #elif defined(PETSC_USE_SINGLE) 175516d1546SSatish Balay 176516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 177*71044d3cSBarry Smith #define LAPACKormqr_ sormqr_ 178*71044d3cSBarry Smith #define LAPACKtrtrs_ strtrs_ 179*71044d3cSBarry Smith #define LAPACKpotrf_ spotrf_ 180*71044d3cSBarry Smith #define LAPACKpotrs_ spotrs_ 181*71044d3cSBarry Smith #define BLASgemv_ sgemv_ 182*71044d3cSBarry Smith #define LAPACKgetrs_ sgetrs_ 183*71044d3cSBarry Smith #define BLAStrmv_ strmv_ 184*71044d3cSBarry Smith #define LAPACKtrsl_ strsl_ 185*71044d3cSBarry Smith #define BLASgemm_ sgemm_ 186*71044d3cSBarry Smith #define LAPACKgesvd_ sgesvd_ 187*71044d3cSBarry Smith #define LAPACKgeev_ sgeev_ 188516d1546SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS) 189*71044d3cSBarry Smith #define LAPACKormqr_ SORMQR 190*71044d3cSBarry Smith #define LAPACKtrtrs_ STRTRS 191*71044d3cSBarry Smith #define LAPACKpotrf_ SPOTRF 192*71044d3cSBarry Smith #define LAPACKpotrs_ SPOTRS 193*71044d3cSBarry Smith #define BLASgemv_ SGEMV 194*71044d3cSBarry Smith #define LAPACKgetrs_ SGETRS 195*71044d3cSBarry Smith #define BLAStrmv_ STRMV 196*71044d3cSBarry Smith #define LAPACKtrsl_ STRSL 197*71044d3cSBarry Smith #define LAPACKgesvd_ SGESVD 198*71044d3cSBarry Smith #define LAPACKgeev_ SGEEV 199*71044d3cSBarry Smith #define BLASgemm_ SGEMM 200516d1546SSatish Balay #else 201*71044d3cSBarry Smith #define LAPACKormqr_ sormqr 202*71044d3cSBarry Smith #define LAPACKtrtrs_ strtrs 203*71044d3cSBarry Smith #define LAPACKpotrf_ spotrf 204*71044d3cSBarry Smith #define LAPACKpotrs_ spotrs 205*71044d3cSBarry Smith #define BLASgemv_ sgemv 206*71044d3cSBarry Smith #define LAPACKgetrs_ sgetrs 207*71044d3cSBarry Smith #define BLAStrmv_ strmv 208*71044d3cSBarry Smith #define LAPACKtrsl_ strsl 209*71044d3cSBarry Smith #define BLASgemm_ sgemm 210*71044d3cSBarry Smith #define LAPACKgesvd_ sgesvd 211*71044d3cSBarry Smith #define LAPACKgeev_ sgeev 212516d1546SSatish Balay #endif 213516d1546SSatish Balay 214516d1546SSatish Balay #else /* PETSC_USE_SINGLE */ 215516d1546SSatish Balay 216516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 217*71044d3cSBarry Smith #define LAPACKormqr_ dormqr_ 218*71044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs_ 219*71044d3cSBarry Smith #define LAPACKpotrf_ dpotrf_ 220*71044d3cSBarry Smith #define LAPACKpotrs_ dpotrs_ 221*71044d3cSBarry Smith #define BLASgemv_ dgemv_ 222*71044d3cSBarry Smith #define LAPACKgetrs_ dgetrs_ 223*71044d3cSBarry Smith #define BLAStrmv_ dtrmv_ 224*71044d3cSBarry Smith #define LAPACKtrsl_ dtrsl_ 225*71044d3cSBarry Smith #define BLASgemm_ dgemm_ 226*71044d3cSBarry Smith #define LAPACKgesvd_ dgesvd_ 227*71044d3cSBarry Smith #define LAPACKgeev_ dgeev_ 228aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 229*71044d3cSBarry Smith #define LAPACKormqr_ DORMQR 230*71044d3cSBarry Smith #define LAPACKtrtrs_ DTRTRS 231*71044d3cSBarry Smith #define LAPACKpotrf_ DPOTRF 232*71044d3cSBarry Smith #define LAPACKpotrs_ DPOTRS 233*71044d3cSBarry Smith #define BLASgemv_ DGEMV 234*71044d3cSBarry Smith #define LAPACKgetrs_ DGETRS 235*71044d3cSBarry Smith #define BLAStrmv_ DTRMV 236*71044d3cSBarry Smith #define LAPACKtrsl_ DTRSL 237*71044d3cSBarry Smith #define LAPACKgesvd_ DGESVD 238*71044d3cSBarry Smith #define LAPACKgeev_ DGEEV 239*71044d3cSBarry Smith #define BLASgemm_ DGEMM 24025fce39dSBarry Smith #else 241*71044d3cSBarry Smith #define LAPACKormqr_ dormqr 242*71044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs 243*71044d3cSBarry Smith #define LAPACKpotrf_ dpotrf 244*71044d3cSBarry Smith #define LAPACKpotrs_ dpotrs 245*71044d3cSBarry Smith #define BLASgemv_ dgemv 246*71044d3cSBarry Smith #define LAPACKgetrs_ dgetrs 247*71044d3cSBarry Smith #define BLAStrmv_ dtrmv 248*71044d3cSBarry Smith #define LAPACKtrsl_ dtrsl 249*71044d3cSBarry Smith #define BLASgemm_ dgemm 250*71044d3cSBarry Smith #define LAPACKgesvd_ dgesvd 251*71044d3cSBarry Smith #define LAPACKgeev_ dgeev 252a1e12872SBarry Smith #endif 253a1e12872SBarry Smith 254516d1546SSatish Balay #endif /* PETSC_USES_CPTOFCD */ 255516d1546SSatish Balay 256a1e12872SBarry Smith #else 2574eeb42bcSBarry Smith /* 2584eeb42bcSBarry Smith Complex with no character string arguments 2594eeb42bcSBarry Smith */ 260f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE) 2618f4c8dbaSBarry Smith #define ZGEQRF CGEQRF 2628f4c8dbaSBarry Smith #define ZDOTC CDOTC 2638f4c8dbaSBarry Smith #define DZNRM2 SCNRM2 2648f4c8dbaSBarry Smith #define ZSCAL CSCAL 2658f4c8dbaSBarry Smith #define ZCOPY CCOPY 2668f4c8dbaSBarry Smith #define ZSWAP CSWAP 2678f4c8dbaSBarry Smith #define ZAXPY CAXPY 2688f4c8dbaSBarry Smith #define DZASUM SCASUM 2698f4c8dbaSBarry Smith #define ZGETRF CGETRF 2708f4c8dbaSBarry Smith #define ZTRTRS CTRTRS 2718f4c8dbaSBarry Smith #define ZPOTRF CPOTRF 2728f4c8dbaSBarry Smith #define ZPOTRS CPOTRS 2738f4c8dbaSBarry Smith #define ZGEMV CGEMV 2748f4c8dbaSBarry Smith #define ZGETRS CGETRS 2758f4c8dbaSBarry Smith #define ZGEMM SGEMM 2768f4c8dbaSBarry Smith #define ZTRMV CTRMV 277160814fdSSatish Balay #define ZTRSL CTRSL 278633a50d3SSatish Balay #define ZGEEV CGEEV 2798f4c8dbaSBarry Smith #endif 2808f4c8dbaSBarry Smith 281ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 282*71044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf_ 283*71044d3cSBarry Smith #define LAPACKgetrf_ zgetrf_ 284*71044d3cSBarry Smith #define LAPACKgetf2_ zgetf2_ 285*71044d3cSBarry Smith #define BLASdot_ zdotc_ 286*71044d3cSBarry Smith #define BLASnrm2_ dznrm2_ 287*71044d3cSBarry Smith #define BLASscal_ zscal_ 288*71044d3cSBarry Smith #define BLAScopy_ zcopy_ 289*71044d3cSBarry Smith #define BLASswap_ zswap_ 290*71044d3cSBarry Smith #define BLASaxpy_ zaxpy_ 291*71044d3cSBarry Smith #define BLASasum_ dzasum_ 292aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 293*71044d3cSBarry Smith #define LAPACKgeqrf_ ZGEQRF 294*71044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF 295*71044d3cSBarry Smith #define BLASdot_ ZDOTC 296*71044d3cSBarry Smith #define BLASnrm2_ DZNRM2 297*71044d3cSBarry Smith #define BLASscal_ ZSCAL 298*71044d3cSBarry Smith #define BLAScopy_ ZCOPY 299*71044d3cSBarry Smith #define BLASswap_ ZSWAP 300*71044d3cSBarry Smith #define BLASaxpy_ ZAXPY 301*71044d3cSBarry Smith #define BLASasum_ DZASUM 30225fce39dSBarry Smith #else 303*71044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf 304*71044d3cSBarry Smith #define LAPACKgetrf_ zgetrf 305*71044d3cSBarry Smith #define LAPACKgetf2_ zgetf2 306*71044d3cSBarry Smith #define BLASdot_ zdotc 307*71044d3cSBarry Smith #define BLASnrm2_ dznrm2 308*71044d3cSBarry Smith #define BLASscal_ zscal 309*71044d3cSBarry Smith #define BLAScopy_ zcopy 310*71044d3cSBarry Smith #define BLASswap_ zswap 311*71044d3cSBarry Smith #define BLASaxpy_ zaxpy 312*71044d3cSBarry Smith #define BLASasum_ dzasum 313a1e12872SBarry Smith #endif 314a1e12872SBarry Smith 315f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 316*71044d3cSBarry Smith #define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j) ZTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j)) 317*71044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e) ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 318*71044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h) ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 319*71044d3cSBarry Smith #define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k) ZGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k)) 320*71044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 321*71044d3cSBarry Smith #define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m) ZGEMM(_cptofcd((a),1),_cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m)) 322*71044d3cSBarry Smith #define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p) ZGESVD(_cptofcd((a),1),_cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(p)) 323*71044d3cSBarry Smith #define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) ZGEEV(_cptofcd((a),1),_cptofcd((a),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n)) 324*71044d3cSBarry Smith #define BLAStrmv_ ZTRMV 325*71044d3cSBarry Smith #define LAPACKtrsl_ ZTRSL 326ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 327*71044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs_ 328*71044d3cSBarry Smith #define LAPACKpotrf_ zpotrf_ 329*71044d3cSBarry Smith #define LAPACKpotrs_ zpotrs_ 330*71044d3cSBarry Smith #define BLASgemv_ zgemv_ 331*71044d3cSBarry Smith #define LAPACKgetrs_ zgetrs_ 332*71044d3cSBarry Smith #define BLAStrmv_ ztrmv_ 333*71044d3cSBarry Smith #define LAPACKtrsl_ ztrsl_ 334*71044d3cSBarry Smith #define BLASgemm_ zgemm_ 335*71044d3cSBarry Smith #define LAPACKgesvd_ zgesvd_ 336*71044d3cSBarry Smith #define LAPACKgeev_ zgeev_ 337aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 338*71044d3cSBarry Smith #define LAPACKtrtrs_ ZTRTRS 339*71044d3cSBarry Smith #define LAPACKpotrf_ ZPOTRF 340*71044d3cSBarry Smith #define LAPACKpotrs_ ZPOTRS 341*71044d3cSBarry Smith #define BLASgemv_ ZGEMV 342*71044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF 343*71044d3cSBarry Smith #define LAPACKgetf2_ ZGETF2 344*71044d3cSBarry Smith #define LAPACKgetrs_ ZGETRS 345*71044d3cSBarry Smith #define BLAStrmv_ ZTRMV 346*71044d3cSBarry Smith #define LAPACKtrsl_ ZTRSL 347*71044d3cSBarry Smith #define BLASgemm_ ZGEMM 348*71044d3cSBarry Smith #define LAPACKgesvd_ ZGESVD 349*71044d3cSBarry Smith #define LAPACKgeev_ ZGEEV 35025fce39dSBarry Smith #else 351*71044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs 352*71044d3cSBarry Smith #define LAPACKpotrf_ zpotrf 353*71044d3cSBarry Smith #define LAPACKpotrs_ zpotrs 354*71044d3cSBarry Smith #define BLASgemv_ zgemv 355*71044d3cSBarry Smith #define LAPACKgetrs_ zgetrs 356*71044d3cSBarry Smith #define BLAStrmv_ ztrmv 357*71044d3cSBarry Smith #define LAPACKtrsl_ ztrsl 358*71044d3cSBarry Smith #define BLASgemm_ zgemm 359*71044d3cSBarry Smith #define LAPACKgesvd_ zgesvd 360*71044d3cSBarry Smith #define LAPACKgeev_ zgeev 361a1e12872SBarry Smith #endif 362a1e12872SBarry Smith 363a1e12872SBarry Smith #endif 364a1e12872SBarry Smith 365fb2e594dSBarry Smith EXTERN_C_BEGIN 366a1e12872SBarry Smith 3678f4c8dbaSBarry Smith /* 368*71044d3cSBarry Smith BLASdot cannot be used with COMPLEX because it cannot 3698f4c8dbaSBarry Smith handle returing a double complex to C++. 370126c565eSBarry Smith */ 371*71044d3cSBarry Smith EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 372*71044d3cSBarry Smith EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 373*71044d3cSBarry Smith EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 374*71044d3cSBarry Smith EXTERN void BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 375*71044d3cSBarry Smith EXTERN void BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 376*71044d3cSBarry Smith EXTERN void BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 377*71044d3cSBarry Smith EXTERN void BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 378*71044d3cSBarry Smith EXTERN void LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 379*71044d3cSBarry Smith EXTERN void LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 380*71044d3cSBarry Smith EXTERN void LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3815392566eSBarry Smith 382f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 383112a2221SBarry Smith 384aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX) 3854ce68768SBarry Smith EXTERN void ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3864ce68768SBarry Smith EXTERN void ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3874ce68768SBarry Smith EXTERN void ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3884ce68768SBarry Smith EXTERN void ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 3894ce68768SBarry Smith EXTERN void ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3904ce68768SBarry Smith EXTERN void ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3914ce68768SBarry Smith EXTERN void ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 3924ce68768SBarry Smith EXTERN void ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 3934ce68768SBarry Smith EXTERN void ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 3945392566eSBarry Smith #else 3954ce68768SBarry Smith EXTERN void DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3964ce68768SBarry Smith EXTERN void DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3974ce68768SBarry Smith EXTERN void DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 3984ce68768SBarry Smith EXTERN void DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 3994ce68768SBarry Smith EXTERN void DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4004ce68768SBarry Smith EXTERN void DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4014ce68768SBarry Smith EXTERN void DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 4024ce68768SBarry Smith EXTERN void DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4034ce68768SBarry Smith EXTERN void DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 404112a2221SBarry Smith #endif 405112a2221SBarry Smith 406112a2221SBarry Smith #else 407*71044d3cSBarry Smith EXTERN void LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 408*71044d3cSBarry Smith EXTERN void LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 409*71044d3cSBarry Smith EXTERN void LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 410*71044d3cSBarry Smith EXTERN void BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 411*71044d3cSBarry Smith EXTERN void LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 412*71044d3cSBarry Smith EXTERN void LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 413*71044d3cSBarry Smith EXTERN void BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 414e38aa075SLois Curfman McInnes 415e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */ 416aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX) 417*71044d3cSBarry Smith EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 418*71044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 419aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL) 420*71044d3cSBarry Smith EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 421*71044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 422aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX) 423*71044d3cSBarry Smith EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 424*71044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 425d4fbbf0eSBarry Smith #else 426*71044d3cSBarry Smith EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 427*71044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 428d4fbbf0eSBarry Smith #endif 4295392566eSBarry Smith #endif 430a1e12872SBarry Smith 431fb2e594dSBarry Smith EXTERN_C_END 432e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 433a1e12872SBarry Smith #endif 434