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 19*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGV 20*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGVX 218e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRF 228e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRF 238e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRS 248e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRS 25e7906763SSatish Balay #elif defined(PETSC_BLASLAPACK_MKL_ONLY) 26bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 27bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GEEV 28*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGV 29*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGVX 30ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY) 31bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 32ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY) 33e3353558SSatish Balay #define PETSC_MISSING_LAPACK_GESVD 34ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF 35ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS 36ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF 37ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS 38bb638ab5SSatish Balay #endif 39bb638ab5SSatish Balay 408f4c8dbaSBarry Smith /* 41633a50d3SSatish Balay This include file on the Cray T3D/T3E defines the interface between 42217f3c9bSSatish Balay Fortran and C representations of character strings. 438f4c8dbaSBarry Smith */ 44f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 4593c39befSBarry Smith #include <fortran.h> 465392566eSBarry Smith #endif 475392566eSBarry Smith 48aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX) 494eeb42bcSBarry Smith 504eeb42bcSBarry Smith /* 514eeb42bcSBarry Smith These are real case with no character string arguments 524eeb42bcSBarry Smith */ 538f4c8dbaSBarry Smith 54f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE) 558f4c8dbaSBarry Smith /* 568f4c8dbaSBarry Smith For these machines we must call the single precision Fortran version 578f4c8dbaSBarry Smith */ 588f4c8dbaSBarry Smith #define DGEQRF SGEQRF 598f4c8dbaSBarry Smith #define DGETRF SGETRF 608f4c8dbaSBarry Smith #define DDOT SDOT 618f4c8dbaSBarry Smith #define DNRM2 SNRM2 628f4c8dbaSBarry Smith #define DSCAL SSCAL 638f4c8dbaSBarry Smith #define DCOPY SCOPY 648f4c8dbaSBarry Smith #define DSWAP SSWAP 658f4c8dbaSBarry Smith #define DAXPY SAXPY 668f4c8dbaSBarry Smith #define DASUM SASUM 678f4c8dbaSBarry Smith #define DSORMQR SORMQR 688f4c8dbaSBarry Smith #define DTRTRS STRTRS 698f4c8dbaSBarry Smith #define DPOTRF SPOTRF 708f4c8dbaSBarry Smith #define DPOTRS SPOTRS 718f4c8dbaSBarry Smith #define DGEMV SGEMV 728f4c8dbaSBarry Smith #define DGETRS SGETRS 738f4c8dbaSBarry Smith #define DGETRS SGETRS 748f4c8dbaSBarry Smith #define DGEMM SGEMM 758f4c8dbaSBarry Smith #define DGESVD SGESVD 76d4fbbf0eSBarry Smith #define DGEEV SGEEV 77*041ef51dSHong Zhang #define DSYGV SSYGV 78*041ef51dSHong Zhang #define DSYGVX SSYGVX 798f4c8dbaSBarry Smith #define DTRMV STRMV 808f4c8dbaSBarry Smith #define DTRSL STRSL 818f4c8dbaSBarry Smith #endif 828f4c8dbaSBarry Smith 8301ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE) 8401ad1a64SSatish Balay 8501ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 8671044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf_ 8771044d3cSBarry Smith #define LAPACKgetrf_ sgetrf_ 8871044d3cSBarry Smith #define LAPACKgetf2_ sgetf2_ 8971044d3cSBarry Smith #define BLASdot_ sdot_ 9071044d3cSBarry Smith #define BLASnrm2_ snrm2_ 9171044d3cSBarry Smith #define BLASscal_ sscal_ 9271044d3cSBarry Smith #define BLAScopy_ scopy_ 9371044d3cSBarry Smith #define BLASswap_ sswap_ 9471044d3cSBarry Smith #define BLASaxpy_ saxpy_ 9571044d3cSBarry Smith #define BLASasum_ sasum_ 9601ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS) 9771044d3cSBarry Smith #define LAPACKgeqrf_ SGEQRF 9871044d3cSBarry Smith #define LAPACKgetrf_ SGETRF 9971044d3cSBarry Smith #define LAPACKgetf2_ SGETF2 10071044d3cSBarry Smith #define BLASdot_ SDOT 10171044d3cSBarry Smith #define BLASnrm2_ SNRM2 10271044d3cSBarry Smith #define BLASscal_ SSCAL 10371044d3cSBarry Smith #define BLAScopy_ SCOPY 10471044d3cSBarry Smith #define BLASswap_ SSWAP 10571044d3cSBarry Smith #define BLASaxpy_ SAXPY 10671044d3cSBarry Smith #define BLASasum_ SASUM 10701ad1a64SSatish Balay #else 10871044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf 10971044d3cSBarry Smith #define LAPACKgetrf_ sgetrf 11071044d3cSBarry Smith #define LAPACKgetf2_ sgetf2 11171044d3cSBarry Smith #define BLASdot_ sdot 11271044d3cSBarry Smith #define BLASnrm2_ snrm2 11371044d3cSBarry Smith #define BLASscal_ sscal 11471044d3cSBarry Smith #define BLAScopy_ scopy 11571044d3cSBarry Smith #define BLASswap_ sswap 11671044d3cSBarry Smith #define BLASaxpy_ saxpy 11771044d3cSBarry Smith #define BLASasum_ sasum 11801ad1a64SSatish Balay #endif 11901ad1a64SSatish Balay 12001ad1a64SSatish Balay #else 12101ad1a64SSatish Balay 122ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 12371044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf_ 12471044d3cSBarry Smith #define LAPACKgetrf_ dgetrf_ 12571044d3cSBarry Smith #define LAPACKgetf2_ dgetf2_ 12671044d3cSBarry Smith #define BLASdot_ ddot_ 12771044d3cSBarry Smith #define BLASnrm2_ dnrm2_ 12871044d3cSBarry Smith #define BLASscal_ dscal_ 12971044d3cSBarry Smith #define BLAScopy_ dcopy_ 13071044d3cSBarry Smith #define BLASswap_ dswap_ 13171044d3cSBarry Smith #define BLASaxpy_ daxpy_ 13271044d3cSBarry Smith #define BLASasum_ dasum_ 133aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 13471044d3cSBarry Smith #define LAPACKgeqrf_ DGEQRF 13571044d3cSBarry Smith #define LAPACKgetrf_ DGETRF 13671044d3cSBarry Smith #define LAPACKgetf2_ DGETF2 13771044d3cSBarry Smith #define BLASdot_ DDOT 13871044d3cSBarry Smith #define BLASnrm2_ DNRM2 13971044d3cSBarry Smith #define BLASscal_ DSCAL 14071044d3cSBarry Smith #define BLAScopy_ DCOPY 14171044d3cSBarry Smith #define BLASswap_ DSWAP 14271044d3cSBarry Smith #define BLASaxpy_ DAXPY 14371044d3cSBarry Smith #define BLASasum_ DASUM 14425fce39dSBarry Smith #else 14571044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf 14671044d3cSBarry Smith #define LAPACKgetrf_ dgetrf 14771044d3cSBarry Smith #define LAPACKgetf2_ dgetf2 14871044d3cSBarry Smith #define BLASdot_ ddot 14971044d3cSBarry Smith #define BLASnrm2_ dnrm2 15071044d3cSBarry Smith #define BLASscal_ dscal 15171044d3cSBarry Smith #define BLAScopy_ dcopy 15271044d3cSBarry Smith #define BLASswap_ dswap 15371044d3cSBarry Smith #define BLASaxpy_ daxpy 15471044d3cSBarry Smith #define BLASasum_ dasum 155a1e12872SBarry Smith #endif 156a1e12872SBarry Smith 15701ad1a64SSatish Balay #endif 15801ad1a64SSatish Balay 1594eeb42bcSBarry Smith /* 1604eeb42bcSBarry Smith Real with character string arguments. 1614eeb42bcSBarry Smith */ 162f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 1638f4c8dbaSBarry Smith /* 1648f4c8dbaSBarry Smith Note that this assumes that machines which use cptofcd() use 165aa482453SBarry Smith the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E. 1668f4c8dbaSBarry Smith */ 16771044d3cSBarry 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)) 16871044d3cSBarry 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)) 16971044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e) DPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 17071044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h) DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 17171044d3cSBarry 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)) 17271044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 17371044d3cSBarry 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)) 17471044d3cSBarry 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)) 17571044d3cSBarry 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)) 176*041ef51dSHong Zhang #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l) DSYGV((a),_cptofcd((a),1),_cptofcd((a),1),(d),(e),(f),(g),(h),(i),(j),(k),(l)) 177*041ef51dSHong Zhang #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) DSYGVX((a),_cptofcd((a),1),_cptofcd((a),1),_cptofcd((a),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w)) 17871044d3cSBarry Smith #define BLAStrmv_ DTRMV 17971044d3cSBarry Smith #define LAPACKtrsl_ DTRSL 18071044d3cSBarry Smith #define LAPACKgetrf_ DGETRF 181516d1546SSatish Balay 182516d1546SSatish Balay #elif defined(PETSC_USE_SINGLE) 183516d1546SSatish Balay 184516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 18571044d3cSBarry Smith #define LAPACKormqr_ sormqr_ 18671044d3cSBarry Smith #define LAPACKtrtrs_ strtrs_ 18771044d3cSBarry Smith #define LAPACKpotrf_ spotrf_ 18871044d3cSBarry Smith #define LAPACKpotrs_ spotrs_ 18971044d3cSBarry Smith #define BLASgemv_ sgemv_ 19071044d3cSBarry Smith #define LAPACKgetrs_ sgetrs_ 19171044d3cSBarry Smith #define BLAStrmv_ strmv_ 19271044d3cSBarry Smith #define LAPACKtrsl_ strsl_ 19371044d3cSBarry Smith #define BLASgemm_ sgemm_ 19471044d3cSBarry Smith #define LAPACKgesvd_ sgesvd_ 19571044d3cSBarry Smith #define LAPACKgeev_ sgeev_ 196*041ef51dSHong Zhang #define LAPACKsygv_ ssygv_ 197*041ef51dSHong Zhang #define LAPACKsygvx_ ssygvx_ 198*041ef51dSHong Zhang 199516d1546SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS) 20071044d3cSBarry Smith #define LAPACKormqr_ SORMQR 20171044d3cSBarry Smith #define LAPACKtrtrs_ STRTRS 20271044d3cSBarry Smith #define LAPACKpotrf_ SPOTRF 20371044d3cSBarry Smith #define LAPACKpotrs_ SPOTRS 20471044d3cSBarry Smith #define BLASgemv_ SGEMV 20571044d3cSBarry Smith #define LAPACKgetrs_ SGETRS 20671044d3cSBarry Smith #define BLAStrmv_ STRMV 20771044d3cSBarry Smith #define LAPACKtrsl_ STRSL 20871044d3cSBarry Smith #define LAPACKgesvd_ SGESVD 20971044d3cSBarry Smith #define LAPACKgeev_ SGEEV 210*041ef51dSHong Zhang #define LAPACKsygv_ SSYGV 211*041ef51dSHong Zhang #define LAPACKsygvx_ SSYGVX 21271044d3cSBarry Smith #define BLASgemm_ SGEMM 213516d1546SSatish Balay #else 21471044d3cSBarry Smith #define LAPACKormqr_ sormqr 21571044d3cSBarry Smith #define LAPACKtrtrs_ strtrs 21671044d3cSBarry Smith #define LAPACKpotrf_ spotrf 21771044d3cSBarry Smith #define LAPACKpotrs_ spotrs 21871044d3cSBarry Smith #define BLASgemv_ sgemv 21971044d3cSBarry Smith #define LAPACKgetrs_ sgetrs 22071044d3cSBarry Smith #define BLAStrmv_ strmv 22171044d3cSBarry Smith #define LAPACKtrsl_ strsl 22271044d3cSBarry Smith #define BLASgemm_ sgemm 22371044d3cSBarry Smith #define LAPACKgesvd_ sgesvd 22471044d3cSBarry Smith #define LAPACKgeev_ sgeev 225*041ef51dSHong Zhang #define LAPACKsygv_ ssygv_ 226*041ef51dSHong Zhang #define LAPACKsygvx_ ssygvx_ 227516d1546SSatish Balay #endif 228516d1546SSatish Balay 229516d1546SSatish Balay #else /* PETSC_USE_SINGLE */ 230516d1546SSatish Balay 231516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 23271044d3cSBarry Smith #define LAPACKormqr_ dormqr_ 23371044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs_ 23471044d3cSBarry Smith #define LAPACKpotrf_ dpotrf_ 23571044d3cSBarry Smith #define LAPACKpotrs_ dpotrs_ 23671044d3cSBarry Smith #define BLASgemv_ dgemv_ 23771044d3cSBarry Smith #define LAPACKgetrs_ dgetrs_ 23871044d3cSBarry Smith #define BLAStrmv_ dtrmv_ 23971044d3cSBarry Smith #define LAPACKtrsl_ dtrsl_ 24071044d3cSBarry Smith #define BLASgemm_ dgemm_ 24171044d3cSBarry Smith #define LAPACKgesvd_ dgesvd_ 24271044d3cSBarry Smith #define LAPACKgeev_ dgeev_ 243*041ef51dSHong Zhang #define LAPACKsygv_ dsygv_ 244*041ef51dSHong Zhang #define LAPACKsygvx_ dsygvx_ 245*041ef51dSHong Zhang 246aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 24771044d3cSBarry Smith #define LAPACKormqr_ DORMQR 24871044d3cSBarry Smith #define LAPACKtrtrs_ DTRTRS 24971044d3cSBarry Smith #define LAPACKpotrf_ DPOTRF 25071044d3cSBarry Smith #define LAPACKpotrs_ DPOTRS 25171044d3cSBarry Smith #define BLASgemv_ DGEMV 25271044d3cSBarry Smith #define LAPACKgetrs_ DGETRS 25371044d3cSBarry Smith #define BLAStrmv_ DTRMV 25471044d3cSBarry Smith #define LAPACKtrsl_ DTRSL 25571044d3cSBarry Smith #define LAPACKgesvd_ DGESVD 25671044d3cSBarry Smith #define LAPACKgeev_ DGEEV 257*041ef51dSHong Zhang #define LAPACKsygv_ DSYGV 258*041ef51dSHong Zhang #define LAPACKsygvx_ DSYGVX 25971044d3cSBarry Smith #define BLASgemm_ DGEMM 26025fce39dSBarry Smith #else 26171044d3cSBarry Smith #define LAPACKormqr_ dormqr 26271044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs 26371044d3cSBarry Smith #define LAPACKpotrf_ dpotrf 26471044d3cSBarry Smith #define LAPACKpotrs_ dpotrs 26571044d3cSBarry Smith #define BLASgemv_ dgemv 26671044d3cSBarry Smith #define LAPACKgetrs_ dgetrs 26771044d3cSBarry Smith #define BLAStrmv_ dtrmv 26871044d3cSBarry Smith #define LAPACKtrsl_ dtrsl 26971044d3cSBarry Smith #define BLASgemm_ dgemm 27071044d3cSBarry Smith #define LAPACKgesvd_ dgesvd 27171044d3cSBarry Smith #define LAPACKgeev_ dgeev 272*041ef51dSHong Zhang #define LAPACKsygv_ dsygv 273*041ef51dSHong Zhang #define LAPACKsygvx_ dsygvx 274a1e12872SBarry Smith #endif 275a1e12872SBarry Smith 276516d1546SSatish Balay #endif /* PETSC_USES_CPTOFCD */ 277516d1546SSatish Balay 278a1e12872SBarry Smith #else 2794eeb42bcSBarry Smith /* 2804eeb42bcSBarry Smith Complex with no character string arguments 2814eeb42bcSBarry Smith */ 282f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE) 2838f4c8dbaSBarry Smith #define ZGEQRF CGEQRF 2848f4c8dbaSBarry Smith #define ZDOTC CDOTC 2858f4c8dbaSBarry Smith #define DZNRM2 SCNRM2 2868f4c8dbaSBarry Smith #define ZSCAL CSCAL 2878f4c8dbaSBarry Smith #define ZCOPY CCOPY 2888f4c8dbaSBarry Smith #define ZSWAP CSWAP 2898f4c8dbaSBarry Smith #define ZAXPY CAXPY 2908f4c8dbaSBarry Smith #define DZASUM SCASUM 2918f4c8dbaSBarry Smith #define ZGETRF CGETRF 2928f4c8dbaSBarry Smith #define ZTRTRS CTRTRS 2938f4c8dbaSBarry Smith #define ZPOTRF CPOTRF 2948f4c8dbaSBarry Smith #define ZPOTRS CPOTRS 2958f4c8dbaSBarry Smith #define ZGEMV CGEMV 2968f4c8dbaSBarry Smith #define ZGETRS CGETRS 2978f4c8dbaSBarry Smith #define ZGEMM SGEMM 2988f4c8dbaSBarry Smith #define ZTRMV CTRMV 299160814fdSSatish Balay #define ZTRSL CTRSL 300633a50d3SSatish Balay #define ZGEEV CGEEV 301*041ef51dSHong Zhang #define ZSYGV CSYGV 302*041ef51dSHong Zhang #define ZSYGVX CSYGVX 3038f4c8dbaSBarry Smith #endif 3048f4c8dbaSBarry Smith 305ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 30671044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf_ 30771044d3cSBarry Smith #define LAPACKgetrf_ zgetrf_ 30871044d3cSBarry Smith #define LAPACKgetf2_ zgetf2_ 30971044d3cSBarry Smith #define BLASdot_ zdotc_ 31071044d3cSBarry Smith #define BLASnrm2_ dznrm2_ 31171044d3cSBarry Smith #define BLASscal_ zscal_ 31271044d3cSBarry Smith #define BLAScopy_ zcopy_ 31371044d3cSBarry Smith #define BLASswap_ zswap_ 31471044d3cSBarry Smith #define BLASaxpy_ zaxpy_ 31571044d3cSBarry Smith #define BLASasum_ dzasum_ 316aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 31771044d3cSBarry Smith #define LAPACKgeqrf_ ZGEQRF 31871044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF 31971044d3cSBarry Smith #define BLASdot_ ZDOTC 32071044d3cSBarry Smith #define BLASnrm2_ DZNRM2 32171044d3cSBarry Smith #define BLASscal_ ZSCAL 32271044d3cSBarry Smith #define BLAScopy_ ZCOPY 32371044d3cSBarry Smith #define BLASswap_ ZSWAP 32471044d3cSBarry Smith #define BLASaxpy_ ZAXPY 32571044d3cSBarry Smith #define BLASasum_ DZASUM 32625fce39dSBarry Smith #else 32771044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf 32871044d3cSBarry Smith #define LAPACKgetrf_ zgetrf 32971044d3cSBarry Smith #define LAPACKgetf2_ zgetf2 33071044d3cSBarry Smith #define BLASdot_ zdotc 33171044d3cSBarry Smith #define BLASnrm2_ dznrm2 33271044d3cSBarry Smith #define BLASscal_ zscal 33371044d3cSBarry Smith #define BLAScopy_ zcopy 33471044d3cSBarry Smith #define BLASswap_ zswap 33571044d3cSBarry Smith #define BLASaxpy_ zaxpy 33671044d3cSBarry Smith #define BLASasum_ dzasum 337a1e12872SBarry Smith #endif 338a1e12872SBarry Smith 339f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 34071044d3cSBarry 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)) 34171044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e) ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e)) 34271044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h) ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h)) 34371044d3cSBarry 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)) 34471044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i) ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i)) 34571044d3cSBarry 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)) 34671044d3cSBarry 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)) 34771044d3cSBarry 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)) 348*041ef51dSHong Zhang #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l) ZSYGV((a),_cptofcd((a),1),_cptofcd((a),1),(d),(e),(f),(g),(h),(i),(j),(k),(l)) 349*041ef51dSHong Zhang #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) ZSYGVX((a),_cptofcd((a),1),_cptofcd((a),1),_cptofcd((a),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w)) 350*041ef51dSHong Zhang 35171044d3cSBarry Smith #define BLAStrmv_ ZTRMV 35271044d3cSBarry Smith #define LAPACKtrsl_ ZTRSL 353ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C) 35471044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs_ 35571044d3cSBarry Smith #define LAPACKpotrf_ zpotrf_ 35671044d3cSBarry Smith #define LAPACKpotrs_ zpotrs_ 35771044d3cSBarry Smith #define BLASgemv_ zgemv_ 35871044d3cSBarry Smith #define LAPACKgetrs_ zgetrs_ 35971044d3cSBarry Smith #define BLAStrmv_ ztrmv_ 36071044d3cSBarry Smith #define LAPACKtrsl_ ztrsl_ 36171044d3cSBarry Smith #define BLASgemm_ zgemm_ 36271044d3cSBarry Smith #define LAPACKgesvd_ zgesvd_ 36371044d3cSBarry Smith #define LAPACKgeev_ zgeev_ 364*041ef51dSHong Zhang #define LAPACKsygv_ zsygv_ 365*041ef51dSHong Zhang #define LAPACKsygvx_ zsygvx_ 366*041ef51dSHong Zhang 367aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS) 36871044d3cSBarry Smith #define LAPACKtrtrs_ ZTRTRS 36971044d3cSBarry Smith #define LAPACKpotrf_ ZPOTRF 37071044d3cSBarry Smith #define LAPACKpotrs_ ZPOTRS 37171044d3cSBarry Smith #define BLASgemv_ ZGEMV 37271044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF 37371044d3cSBarry Smith #define LAPACKgetf2_ ZGETF2 37471044d3cSBarry Smith #define LAPACKgetrs_ ZGETRS 37571044d3cSBarry Smith #define BLAStrmv_ ZTRMV 37671044d3cSBarry Smith #define LAPACKtrsl_ ZTRSL 37771044d3cSBarry Smith #define BLASgemm_ ZGEMM 37871044d3cSBarry Smith #define LAPACKgesvd_ ZGESVD 37971044d3cSBarry Smith #define LAPACKgeev_ ZGEEV 380*041ef51dSHong Zhang #define LAPACKsygv_ ZSYGV 381*041ef51dSHong Zhang #define LAPACKsygvx_ ZSYGVX 382*041ef51dSHong Zhang 38325fce39dSBarry Smith #else 38471044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs 38571044d3cSBarry Smith #define LAPACKpotrf_ zpotrf 38671044d3cSBarry Smith #define LAPACKpotrs_ zpotrs 38771044d3cSBarry Smith #define BLASgemv_ zgemv 38871044d3cSBarry Smith #define LAPACKgetrs_ zgetrs 38971044d3cSBarry Smith #define BLAStrmv_ ztrmv 39071044d3cSBarry Smith #define LAPACKtrsl_ ztrsl 39171044d3cSBarry Smith #define BLASgemm_ zgemm 39271044d3cSBarry Smith #define LAPACKgesvd_ zgesvd 39371044d3cSBarry Smith #define LAPACKgeev_ zgeev 394*041ef51dSHong Zhang #define LAPACKsygv_ zsygv 395*041ef51dSHong Zhang #define LAPACKsygvx_ zsygvx 396a1e12872SBarry Smith #endif 397a1e12872SBarry Smith 398a1e12872SBarry Smith #endif 399a1e12872SBarry Smith 400fb2e594dSBarry Smith EXTERN_C_BEGIN 401a1e12872SBarry Smith 4028f4c8dbaSBarry Smith /* 40371044d3cSBarry Smith BLASdot cannot be used with COMPLEX because it cannot 4048f4c8dbaSBarry Smith handle returing a double complex to C++. 405126c565eSBarry Smith */ 40671044d3cSBarry Smith EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 40771044d3cSBarry Smith EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 40871044d3cSBarry Smith EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*); 40971044d3cSBarry Smith EXTERN void BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 41071044d3cSBarry Smith EXTERN void BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 41171044d3cSBarry Smith EXTERN void BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 41271044d3cSBarry Smith EXTERN void BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*); 41371044d3cSBarry Smith EXTERN void LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 41471044d3cSBarry Smith EXTERN void LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 41571044d3cSBarry Smith EXTERN void LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4165392566eSBarry Smith 417f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD) 418112a2221SBarry Smith 419aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX) 4204ce68768SBarry Smith EXTERN void ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4214ce68768SBarry Smith EXTERN void ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4224ce68768SBarry Smith EXTERN void ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4234ce68768SBarry Smith EXTERN void ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 4244ce68768SBarry Smith EXTERN void ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4254ce68768SBarry Smith EXTERN void ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4264ce68768SBarry Smith EXTERN void ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 4274ce68768SBarry Smith EXTERN void ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 4284ce68768SBarry Smith EXTERN void ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 429*041ef51dSHong Zhang EXTERN void ZSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 430*041ef51dSHong Zhang EXTERN void ZSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 431*041ef51dSHong Zhang 4325392566eSBarry Smith #else 4334ce68768SBarry Smith EXTERN void DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4344ce68768SBarry Smith EXTERN void DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4354ce68768SBarry Smith EXTERN void DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4364ce68768SBarry Smith EXTERN void DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 4374ce68768SBarry Smith EXTERN void DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4384ce68768SBarry Smith EXTERN void DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4394ce68768SBarry Smith EXTERN void DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 4404ce68768SBarry Smith EXTERN void DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 4414ce68768SBarry Smith EXTERN void DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 442*041ef51dSHong Zhang EXTERN void DSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 443*041ef51dSHong Zhang EXTERN void DSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 444112a2221SBarry Smith #endif 445112a2221SBarry Smith 446112a2221SBarry Smith #else 44771044d3cSBarry Smith EXTERN void LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 44871044d3cSBarry Smith EXTERN void LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 44971044d3cSBarry Smith EXTERN void LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 45071044d3cSBarry Smith EXTERN void BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 45171044d3cSBarry Smith EXTERN void LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 45271044d3cSBarry Smith EXTERN void LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 45371044d3cSBarry Smith EXTERN void BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*); 454e38aa075SLois Curfman McInnes 455e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */ 456aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX) 45771044d3cSBarry Smith EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 45871044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 459aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL) 46071044d3cSBarry Smith EXTERN void LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 46171044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 462aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX) 46371044d3cSBarry Smith EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 46471044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 465*041ef51dSHong Zhang EXTERN void LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 466*041ef51dSHong Zhang EXTERN void LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 467d4fbbf0eSBarry Smith #else 46871044d3cSBarry Smith EXTERN void LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 469*041ef51dSHong Zhang EXTERN void LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*); 470*041ef51dSHong Zhang EXTERN void LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*); 47171044d3cSBarry Smith EXTERN void LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*); 472d4fbbf0eSBarry Smith #endif 4735392566eSBarry Smith #endif 474a1e12872SBarry Smith 475fb2e594dSBarry Smith EXTERN_C_END 476e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 477a1e12872SBarry Smith #endif 478