1e5b2100bSSteven G. Johnson /* 2e5b2100bSSteven G. Johnson This file deals with the BLAS/LAPACK naming convention on 3e5b2100bSSteven G. Johnson non-Microsoft systems, which may append an underscore, use 4e5b2100bSSteven G. Johnson upper or lower case, and/or use a configurable symbol suffix. 5e5b2100bSSteven G. Johnson */ 6e5b2100bSSteven G. Johnson #if !defined(_BLASLAPACK_MANGLE_H) 7e5b2100bSSteven G. Johnson #define _BLASLAPACK_MANGLE_H 8e5b2100bSSteven G. Johnson 9e5b2100bSSteven G. Johnson /****************************************************************************/ 10e5b2100bSSteven G. Johnson /* macros to mangle BLAS/LAPACK names as needed for linking */ 11e5b2100bSSteven G. Johnson 12e5b2100bSSteven G. Johnson /* token pasting, with an extra level of indirection so that we 13e5b2100bSSteven G. Johnson can paste the contents of other preprocessor #definitions */ 14e5b2100bSSteven G. Johnson #define PETSC_PASTE2_(a,b) a ## b 15e5b2100bSSteven G. Johnson #define PETSC_PASTE2(a,b) PETSC_PASTE2_(a,b) 16e5b2100bSSteven G. Johnson #define PETSC_PASTE3_(a,b,c) a ## b ## c 17e5b2100bSSteven G. Johnson #define PETSC_PASTE3(a,b,c) PETSC_PASTE3_(a,b,c) 18e5b2100bSSteven G. Johnson 19e5b2100bSSteven G. Johnson #if !defined(PETSC_BLASLAPACK_SUFFIX) 20e5b2100bSSteven G. Johnson # if defined(PETSC_BLASLAPACK_UNDERSCORE) 21e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_SUFFIX_ _ 22e5b2100bSSteven G. Johnson # else 23e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_SUFFIX_ 24e5b2100bSSteven G. Johnson # endif 25e5b2100bSSteven G. Johnson #else 26e5b2100bSSteven G. Johnson # if defined(PETSC_BLASLAPACK_UNDERSCORE) 27e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_SUFFIX_ PETSC_PASTE2(PETSC_BLASLAPACK_SUFFIX,_) 28e5b2100bSSteven G. Johnson # else 29e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_SUFFIX_ PETSC_BLASLAPACK_SUFFIX 30e5b2100bSSteven G. Johnson # endif 31e5b2100bSSteven G. Johnson #endif 32e5b2100bSSteven G. Johnson 33*eef667f9SJose E. Roman /* complex/real and single/double/quad/half precision prefixes: */ 34e5b2100bSSteven G. Johnson #if !defined(PETSC_USE_COMPLEX) 35e5b2100bSSteven G. Johnson # if defined(PETSC_BLASLAPACK_CAPS) 36e5b2100bSSteven G. Johnson # if defined(PETSC_USE_REAL_SINGLE) 37e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ S 38f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL S 39e5b2100bSSteven G. Johnson # elif defined(PETSC_USE_REAL_DOUBLE) 40e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ D 41f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL D 42b161f5d8SJose E. Roman # elif defined(PETSC_USE_REAL___FLOAT128) 43e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ Q 44f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL Q 45b161f5d8SJose E. Roman # else 46b161f5d8SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_ H 47b161f5d8SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_REAL H 48e5b2100bSSteven G. Johnson # endif 49e5b2100bSSteven G. Johnson # else 50e5b2100bSSteven G. Johnson # if defined(PETSC_USE_REAL_SINGLE) 51e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ s 52f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL s 53e5b2100bSSteven G. Johnson # elif defined(PETSC_USE_REAL_DOUBLE) 54e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ d 55f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL d 56570b7f6dSBarry Smith # elif defined(PETSC_USE_REAL___FLOAT128) 57e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ q 58f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL q 59570b7f6dSBarry Smith # else 60570b7f6dSBarry Smith # define PETSC_BLASLAPACK_PREFIX_ h 61b161f5d8SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_REAL h 62e5b2100bSSteven G. Johnson # endif 63e5b2100bSSteven G. Johnson # endif 64e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ PETSC_BLASLAPACK_PREFIX_ 65e5b2100bSSteven G. Johnson #else 66e5b2100bSSteven G. Johnson # if defined(PETSC_BLASLAPACK_CAPS) 67e5b2100bSSteven G. Johnson # if defined(PETSC_USE_REAL_SINGLE) 68e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ C 6970c87898SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_REAL S 70e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ SC 71e5b2100bSSteven G. Johnson # elif defined(PETSC_USE_REAL_DOUBLE) 72e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ Z 73f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL D 74e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ DZ 75570b7f6dSBarry Smith # elif defined(PETSC_USE_REAL___FLOAT128) 76e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ W 77f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL Q 78e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ QW 79570b7f6dSBarry Smith # else 80*eef667f9SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_ K 81f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL H 82*eef667f9SJose E. Roman # define PETSC_BLASLAPACK_RPREFIX_ HK 83e5b2100bSSteven G. Johnson # endif 84e5b2100bSSteven G. Johnson # else 85e5b2100bSSteven G. Johnson # if defined(PETSC_USE_REAL_SINGLE) 86e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ c 87f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL s 88e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ sc 89e5b2100bSSteven G. Johnson # elif defined(PETSC_USE_REAL_DOUBLE) 90e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ z 91f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL d 92e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ dz 93570b7f6dSBarry Smith # elif defined(PETSC_USE_REAL___FLOAT128) 94e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_PREFIX_ w 95f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL q 96e5b2100bSSteven G. Johnson # define PETSC_BLASLAPACK_RPREFIX_ qw 97570b7f6dSBarry Smith # else 98*eef667f9SJose E. Roman # define PETSC_BLASLAPACK_PREFIX_ k 99f1058c0fSBarry Smith # define PETSC_BLASLAPACK_PREFIX_REAL h 100*eef667f9SJose E. Roman # define PETSC_BLASLAPACK_RPREFIX_ hk 101e5b2100bSSteven G. Johnson # endif 102e5b2100bSSteven G. Johnson # endif 103e5b2100bSSteven G. Johnson #endif 104e5b2100bSSteven G. Johnson 105e5b2100bSSteven G. Johnson /* define macros PETSCBLAS to mangle BLAS/LAPACK subroutine names, and 106e5b2100bSSteven G. Johnson PETSCBLASR for functions returning real values */ 107e5b2100bSSteven G. Johnson #if defined(PETSC_BLASLAPACK_CAPS) 108e5b2100bSSteven G. Johnson # define PETSCBLAS(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_PREFIX_, X, PETSC_BLASLAPACK_SUFFIX_) 109f1058c0fSBarry Smith # define PETSCBLASREAL(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_PREFIX_REAL, X, PETSC_BLASLAPACK_SUFFIX_) 110e5b2100bSSteven G. Johnson # define PETSCBLASR(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_RPREFIX_, X, PETSC_BLASLAPACK_SUFFIX_) 111e5b2100bSSteven G. Johnson #else 112e5b2100bSSteven G. Johnson # define PETSCBLAS(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_PREFIX_, x, PETSC_BLASLAPACK_SUFFIX_) 113f1058c0fSBarry Smith # define PETSCBLASREAL(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_PREFIX_REAL, x, PETSC_BLASLAPACK_SUFFIX_) 114e5b2100bSSteven G. Johnson # define PETSCBLASR(x,X) PETSC_PASTE3(PETSC_BLASLAPACK_RPREFIX_, x, PETSC_BLASLAPACK_SUFFIX_) 115e5b2100bSSteven G. Johnson #endif 116e5b2100bSSteven G. Johnson 117e5b2100bSSteven G. Johnson /****************************************************************************/ 118e5b2100bSSteven G. Johnson /* definitions of BLAS and LAPACK symbols */ 119e5b2100bSSteven G. Johnson 120e5b2100bSSteven G. Johnson /* Subroutine names that are the same for real/complex data: */ 121e5b2100bSSteven G. Johnson /* no character-string arguments: */ 122e5b2100bSSteven G. Johnson #define LAPACKgeqrf_ PETSCBLAS(geqrf,GEQRF) 123e5b2100bSSteven G. Johnson #define LAPACKgetrf_ PETSCBLAS(getrf,GETRF) 124e5b2100bSSteven G. Johnson #define LAPACKgetri_ PETSCBLAS(getri,GETRI) 125e5b2100bSSteven G. Johnson #define BLASnrm2_ PETSCBLASR(nrm2,NRM2) 126e5b2100bSSteven G. Johnson #define BLASscal_ PETSCBLAS(scal,SCAL) 127e5b2100bSSteven G. Johnson #define BLAScopy_ PETSCBLAS(copy,COPY) 128e5b2100bSSteven G. Johnson #define BLASswap_ PETSCBLAS(swap,SWAP) 129e5b2100bSSteven G. Johnson #define BLASaxpy_ PETSCBLAS(axpy,AXPY) 130e5b2100bSSteven G. Johnson #define BLASasum_ PETSCBLASR(asum,ASUM) 131e5b2100bSSteven G. Johnson #define LAPACKpttrf_ PETSCBLAS(pttrf,PTTRF) /* factorization of a spd tridiagonal matrix */ 132e5b2100bSSteven G. Johnson #define LAPACKpttrs_ PETSCBLAS(pttrs,PTTRS) /* solve a spd tridiagonal matrix system */ 133e5b2100bSSteven G. Johnson #define LAPACKstein_ PETSCBLAS(stein,STEIN) /* eigenvectors of real symm tridiagonal matrix */ 134e5b2100bSSteven G. Johnson #define LAPACKgesv_ PETSCBLAS(gesv,GESV) 135e5b2100bSSteven G. Johnson #define LAPACKgelss_ PETSCBLAS(gelss,GELSS) 136e5b2100bSSteven G. Johnson #define LAPACKgerfs_ PETSCBLAS(gerfs,GERFS) 137e5b2100bSSteven G. Johnson #define LAPACKtgsen_ PETSCBLAS(tgsen,TGSEN) 138e5b2100bSSteven G. Johnson /* character-string arguments: */ 139e5b2100bSSteven G. Johnson #define LAPACKpotrf_ PETSCBLAS(potrf,POTRF) 140e5b2100bSSteven G. Johnson #define LAPACKpotri_ PETSCBLAS(potri,POTRI) 141e5b2100bSSteven G. Johnson #define LAPACKpotrs_ PETSCBLAS(potrs,POTRS) 142e5b2100bSSteven G. Johnson #define LAPACKsytrf_ PETSCBLAS(sytrf,SYTRF) 143e5b2100bSSteven G. Johnson #define LAPACKsytrs_ PETSCBLAS(sytrs,SYTRS) 144e5b2100bSSteven G. Johnson #define LAPACKsytri_ PETSCBLAS(sytri,SYTRI) 145e5b2100bSSteven G. Johnson #define BLASgemv_ PETSCBLAS(gemv,GEMV) 146e5b2100bSSteven G. Johnson #define LAPACKgetrs_ PETSCBLAS(getrs,GETRS) 147e5b2100bSSteven G. Johnson #define BLAStrmv_ PETSCBLAS(trmv,TRMV) 148e5b2100bSSteven G. Johnson #define BLASgemm_ PETSCBLAS(gemm,GEMM) 149e5b2100bSSteven G. Johnson #define BLASsymm_ PETSCBLAS(symm,SYMM) 1503f9d1987SStefano Zampini #define BLASsyrk_ PETSCBLAS(syrk,SYRK) 1513f9d1987SStefano Zampini #define BLASsyr2k_ PETSCBLAS(syr2k,SYR2K) 152e5b2100bSSteven G. Johnson #define BLAStrsm_ PETSCBLAS(trsm,TRSM) 153e5b2100bSSteven G. Johnson #define LAPACKgesvd_ PETSCBLAS(gesvd,GESVD) 154e5b2100bSSteven G. Johnson #define LAPACKgeev_ PETSCBLAS(geev,GEEV) 1559d150b73SToby Isaac #define LAPACKgels_ PETSCBLAS(gels,GELS) 156e5b2100bSSteven G. Johnson #define LAPACKsteqr_ PETSCBLAS(steqr,STEQR) /* eigenvalues and eigenvectors of symm tridiagonal */ 157f1058c0fSBarry Smith #define LAPACKREALsteqr_ PETSCBLASREAL(steqr,STEQR) 158e5b2100bSSteven G. Johnson #define LAPACKhseqr_ PETSCBLAS(hseqr,HSEQR) 159e5b2100bSSteven G. Johnson #define LAPACKgges_ PETSCBLAS(gges,GGES) 160e5b2100bSSteven G. Johnson #define LAPACKtrsen_ PETSCBLAS(trsen,TRSEN) 161e5b2100bSSteven G. Johnson #define LAPACKormqr_ PETSCBLAS(ormqr,ORMQR) 162e5b2100bSSteven G. Johnson #define LAPACKhgeqz_ PETSCBLAS(hgeqz,HGEQZ) 163e5b2100bSSteven G. Johnson #define LAPACKtrtrs_ PETSCBLAS(trtrs,TRTRS) 164e5b2100bSSteven G. Johnson 165e5b2100bSSteven G. Johnson /* Subroutine names that differ for real/complex data: */ 166e5b2100bSSteven G. Johnson #if !defined(PETSC_USE_COMPLEX) 167e5b2100bSSteven G. Johnson # define LAPACKungqr_ PETSCBLAS(orgqr,ORGQR) 168e5b2100bSSteven G. Johnson # define BLASdot_ PETSCBLAS(dot,DOT) 169e5b2100bSSteven G. Johnson # define BLASdotu_ PETSCBLAS(dot,DOT) 170e5b2100bSSteven G. Johnson 171e5b2100bSSteven G. Johnson # define LAPACKsyev_ PETSCBLAS(syev,SYEV) /* eigenvalues and eigenvectors of a symm matrix */ 172e5b2100bSSteven G. Johnson # define LAPACKsyevx_ PETSCBLAS(syevx,SYEVX) /* selected eigenvalues and eigenvectors of a symm matrix */ 173e5b2100bSSteven G. Johnson # define LAPACKsygv_ PETSCBLAS(sygv,SYGV) 174e5b2100bSSteven G. Johnson # define LAPACKsygvx_ PETSCBLAS(sygvx,SYGVX) 175e5b2100bSSteven G. Johnson 176e5b2100bSSteven G. Johnson /* stebz does not exist for complex data */ 177e5b2100bSSteven G. Johnson # define LAPACKstebz_ PETSCBLAS(stebz,STEBZ) /* eigenvalues of symm tridiagonal matrix */ 178e5b2100bSSteven G. Johnson #else 17965da4498SStefano Zampini # define LAPACKhetrf_ PETSCBLAS(hetrf,HETRF) 18065da4498SStefano Zampini # define LAPACKhetrs_ PETSCBLAS(hetrs,HETRS) 18165da4498SStefano Zampini # define LAPACKhetri_ PETSCBLAS(hetri,HETRI) 182e5b2100bSSteven G. Johnson # define LAPACKungqr_ PETSCBLAS(ungqr,UNGQR) 183e5b2100bSSteven G. Johnson /* note: dot and dotu are handled separately for complex data */ 184e5b2100bSSteven G. Johnson 185e5b2100bSSteven G. Johnson # define LAPACKsyev_ PETSCBLAS(heev,HEEV) /* eigenvalues and eigenvectors of a symm matrix */ 186e5b2100bSSteven G. Johnson # define LAPACKsyevx_ PETSCBLAS(heevx,HEEVX) /* selected eigenvalues and eigenvectors of a symm matrix */ 187e5b2100bSSteven G. Johnson # define LAPACKsygv_ PETSCBLAS(hegv,HEGV) 188e5b2100bSSteven G. Johnson # define LAPACKsygvx_ PETSCBLAS(hegvx,HEGVX) 189e5b2100bSSteven G. Johnson #endif 190e5b2100bSSteven G. Johnson 191e5b2100bSSteven G. Johnson #endif 192