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