1a1e12872SBarry Smith /* 24fcfbe5fSBarry Smith This file dispatches between various header files for blas/lapack distributions to handle the name mangling. 34fcfbe5fSBarry Smith It also provides C prototypes for all the BLAS/LAPACK functions that PETSc uses 4f3da1532SBarry Smith 5f3da1532SBarry Smith This is not included automatically by petscsys.h because some external packages include their own prototypes for 6f3da1532SBarry Smith certain BLAS/LAPACK functions that conflict with the ones given here. Hence this should only be included when needed. 7f3da1532SBarry Smith 837c12098SBarry Smith The BLAS/LAPACK name mangling is almost (but not always) the same as the Fortran mangling; and exists even if there is 937c12098SBarry Smith not Fortran compiler. 1037c12098SBarry Smith 1137c12098SBarry Smith PETSC_BLASLAPACK_UNDERSCORE BLAS/LAPACK function have an underscore at the end of each function name 1237c12098SBarry Smith PETSC_BLASLAPACK_CAPS BLAS/LAPACK function names are all in capital letters 1337c12098SBarry Smith PETSC_BLASLAPACK_C BLAS/LAPACK function names have no mangling 1437c12098SBarry Smith 157de69702SBarry Smith PETSC_BLASLAPACK_SINGLEISDOUBLE - for Cray systems where the BLAS/LAPACK single precision (i.e. Fortran single precision is actually 64-bits) 1615229ffcSPierre Jolivet old Cray vector machines used to be this way, it is not clear if any exist now. 1737c12098SBarry Smith 187de69702SBarry Smith PetscBLASInt is almost always 32-bit integers but can be 64-bit integers for certain usages of MKL and OpenBLAS BLAS/LAPACK libraries 1937c12098SBarry Smith 20a1e12872SBarry Smith */ 21a4963045SJacob Faibussowitsch #pragma once 22bb638ab5SSatish Balay 233ba16761SJacob Faibussowitsch #include <petscsys.h> 246c737031SSatish Balay #if defined(__cplusplus) 256c737031SSatish Balay #define BLAS_EXTERN extern "C" 266c737031SSatish Balay #else 276c737031SSatish Balay #define BLAS_EXTERN extern 286c737031SSatish Balay #endif 296c737031SSatish Balay 30ef1023bdSBarry Smith /* SUBMANSEC = Sys */ 31ef1023bdSBarry Smith 32586f9135SBarry Smith /*MC 33af27ebaaSBarry Smith PetscCallBLAS - Calls a BLAS or LAPACK routine so that the stack trace returned from any signal received inside the function call 34af27ebaaSBarry Smith includes the name of the BLAS/LAPACK routine 35586f9135SBarry Smith 36586f9135SBarry Smith Synopsis: 37586f9135SBarry Smith #include <petscsys.h> 38792fecdfSBarry Smith void PetscCallBLAS(char *name,routine) 39586f9135SBarry Smith 407cdbe19fSJose E. Roman Not Collective 417cdbe19fSJose E. Roman 42586f9135SBarry Smith Input Parameters: 43586f9135SBarry Smith + name - string that gives the name of the function being called 44586f9135SBarry Smith - routine - actual call to the routine including its arguments 45586f9135SBarry Smith 46586f9135SBarry Smith Level: developer 47586f9135SBarry Smith 4895bd0b28SBarry Smith Developer Notes: 4995bd0b28SBarry Smith This does not check error codes returned from the BLAS/LAPACK routine or ever return from the current subroutine. It merely pushes onto the PETSc 5095bd0b28SBarry Smith stack the name of the BLAS/LAPACK routine before calling the routine and removes it after a successful call. 5195bd0b28SBarry Smith 5295bd0b28SBarry Smith LAPACK routines that return info codes should be followed by 5395bd0b28SBarry Smith .vb 5495bd0b28SBarry Smith PetscCheck(!info, PETSC_COMM_SELF, PETSC_ERR_LIB, ...) 5595bd0b28SBarry Smith .ve 5695bd0b28SBarry Smith 5795bd0b28SBarry Smith This macro exists so that when a BLAS/LAPACK routine results in a crash or corrupts memory, they get blamed instead of PETSc. 58586f9135SBarry Smith 59e77caa6dSBarry Smith .seealso: `PetscCall()`, `PetscStackPushNoCheck()`, `PetscStackPush()`, `PetscCallExternal()`, `PetscStackCallExternalVoid()` 60586f9135SBarry Smith M*/ 619371c9d4SSatish Balay #define PetscCallBLAS(name, routine) \ 629371c9d4SSatish Balay do { \ 63792fecdfSBarry Smith PetscStackPushExternal(name); \ 648b83055fSJed Brown routine; \ 658b83055fSJed Brown PetscStackPop; \ 668b83055fSJed Brown } while (0) 678b83055fSJed Brown 68d71ae5a4SJacob Faibussowitsch static inline void PetscMissingLapack(const char *fname, ...) 69d71ae5a4SJacob Faibussowitsch { 703ba16761SJacob Faibussowitsch SETERRABORT(PETSC_COMM_SELF, PETSC_ERR_SUP, "%s - Lapack routine is unavailable.", fname); 713c377650SSatish Balay } 723c377650SSatish Balay 73e5b2100bSSteven G. Johnson #include <petscblaslapack_mangle.h> 74a1e12872SBarry Smith 753547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgetrf_(const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 763547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKREALgetrf_(const PetscBLASInt *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 773547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgetri_(const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 783547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKREALgetri_(const PetscBLASInt *, PetscReal *, const PetscBLASInt *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscBLASInt *); 793c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_ORGQR) 803547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKorgqr_(const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 813c377650SSatish Balay #else 823c377650SSatish Balay #define LAPACKorgqr_(a, b, c, d, e, f, g, h, i) PetscMissingLapack("ORGQR", a, b, c, d, e, f, g, h, i) 833c377650SSatish Balay #endif 843547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgeqrf_(const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 8549b12944SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) && defined(PETSC_BLASLAPACK_SNRM2_RETURNS_DOUBLE) 866c737031SSatish Balay BLAS_EXTERN double BLASnrm2_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 8749b12944SBarry Smith #else 886c737031SSatish Balay BLAS_EXTERN PetscReal BLASnrm2_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 8949b12944SBarry Smith #endif 906c737031SSatish Balay BLAS_EXTERN void BLASscal_(const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 916c737031SSatish Balay BLAS_EXTERN void BLAScopy_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 926c737031SSatish Balay BLAS_EXTERN void BLASswap_(const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 936c737031SSatish Balay BLAS_EXTERN void BLASaxpy_(const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 9451da93a6SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) && defined(PETSC_BLASLAPACK_SNRM2_RETURNS_DOUBLE) 956c737031SSatish Balay BLAS_EXTERN double BLASasum_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 9651da93a6SBarry Smith #else 976c737031SSatish Balay BLAS_EXTERN PetscReal BLASasum_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 9851da93a6SBarry Smith #endif 993547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpttrf_(const PetscBLASInt *, PetscReal *, PetscScalar *, PetscBLASInt *); 1003c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_STEIN) 1013547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKstein_(const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 1023c377650SSatish Balay #else 1033c377650SSatish Balay #define LAPACKstein_(a, b, c, d, e, f, g, h, i, j, k, l, m) PetscMissingLapack("STEIN", a, b, c, d, e, f, g, h, i, j, k, l) 1043c377650SSatish Balay #endif 1056c737031SSatish Balay BLAS_EXTERN void LAPACKgesv_(const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 106c35b00c6SBarry Smith 107c901295dSPablo Brubeck BLAS_EXTERN void LAPACKtrtri_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1083547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpotrf_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1093547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpotri_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1103547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpotrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1113547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsytrf_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1123547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsytrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1133c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_SYTRI) 1143547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsytri_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, PetscBLASInt *); 1153c377650SSatish Balay #else 1163c377650SSatish Balay #define LAPACKsytri_(a, b, c, d, e, f, g) PetscMissingLapack("SYTRI", a, b, c, d, e, f, g) 1173c377650SSatish Balay #endif 118916c178eSAndreas Fink BLAS_EXTERN void BLASsyrk_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 119916c178eSAndreas Fink BLAS_EXTERN void BLASsyr2k_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 1206c737031SSatish Balay BLAS_EXTERN void BLASgemv_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 1213547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgetrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 122916c178eSAndreas Fink BLAS_EXTERN void BLAStrmv_(const char *, const char *, const char *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 123be1c5b79SHansol Suh BLAS_EXTERN void BLAStrsv_(const char *, const char *, const char *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 124916c178eSAndreas Fink BLAS_EXTERN void BLASgemm_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 125b9d4cb8dSJed Brown BLAS_EXTERN void BLASREALgemm_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscReal *, const PetscBLASInt *, const PetscReal *, PetscReal *, const PetscBLASInt *); 126916c178eSAndreas Fink BLAS_EXTERN void BLASsymm_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *); 1276c737031SSatish Balay BLAS_EXTERN void BLAStrsm_(const char *, const char *, const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *); 1283c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_ORMQR) 129*1e14f2f2SPierre Jolivet BLAS_EXTERN void LAPACKormqr_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1303c377650SSatish Balay #else 1313c377650SSatish Balay #define LAPACKormqr_(a, b, c, d, e, f, g, h, i, j, k, l, m) PetscMissingLapack("ORMQR", a, b, c, d, e, f, g, h, i, j, k, l, m) 1323c377650SSatish Balay #endif 1339369748bSToby Isaac #if !defined(PETSC_MISSING_LAPACK_STEGR) 1343547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKstegr_(const char *, const char *, const PetscBLASInt *, PetscReal *, PetscReal *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscBLASInt *, const PetscBLASInt *, PetscBLASInt *); 1359369748bSToby Isaac #else 1369369748bSToby Isaac #define LAPACKstegr_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) PetscMissingLapack("STEGR", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) 1379369748bSToby Isaac #endif 1383c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_STEQR) 1393547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsteqr_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 1403547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKREALsteqr_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 1413c377650SSatish Balay #else 1423c377650SSatish Balay #define LAPACKsteqr_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEQR", a, b, c, d, e, f, g, h) 1433c377650SSatish Balay #define LAPACKREALsteqr_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEQR", a, b, c, d, e, f, g, h) 1443c377650SSatish Balay #endif 145ee1793ccSZach Atkins #if !defined(PETSC_MISSING_LAPACK_STEV) 146ee1793ccSZach Atkins BLAS_EXTERN void LAPACKstev_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 147ee1793ccSZach Atkins BLAS_EXTERN void LAPACKREALstev_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 148ee1793ccSZach Atkins #else 149ee1793ccSZach Atkins #define LAPACKstev_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEV", a, b, c, d, e, f, g, h) 150ee1793ccSZach Atkins #define LAPACKREALstev_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEV", a, b, c, d, e, f, g, h) 151ee1793ccSZach Atkins #endif 1523c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HGEQZ) 1536c737031SSatish Balay BLAS_EXTERN void LAPACKhgeqz_(const char *, const char *, const char *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscBLASInt *); 1543c377650SSatish Balay #else 1553c377650SSatish Balay #define LAPACKhgeqz_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) PetscMissingLapack("HGEQZ", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) 1563c377650SSatish Balay #endif 1573c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRTRS) 1583547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtrtrs_(const char *, const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1593c377650SSatish Balay #else 1603c377650SSatish Balay #define LAPACKtrtrs_(a, b, c, d, e, f, g, h, i, j) PetscMissingLapack("TRTRS", a, b, c, d, e, f, g, h, i, j) 1613c377650SSatish Balay #endif 1626c737031SSatish Balay BLAS_EXTERN void LAPACKgels_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 163c35b00c6SBarry Smith 164f16551e9SSatish Balay /* handle complex dot() with special code */ 165f16551e9SSatish Balay #if defined(PETSC_USE_COMPLEX) 166d71ae5a4SJacob Faibussowitsch static inline PetscScalar BLASdot_(const PetscBLASInt *n, const PetscScalar *x, const PetscBLASInt *sx, const PetscScalar *y, const PetscBLASInt *sy) 167d71ae5a4SJacob Faibussowitsch { 168f16551e9SSatish Balay PetscScalar sum = 0.0; 1699669e4d8SBarry Smith PetscInt i, j, k; 170f16551e9SSatish Balay if (*sx == 1 && *sy == 1) { 171f16551e9SSatish Balay for (i = 0; i < *n; i++) sum += PetscConj(x[i]) * y[i]; 172f16551e9SSatish Balay } else { 173f16551e9SSatish Balay for (i = 0, j = 0, k = 0; i < *n; i++, j += *sx, k += *sy) sum += PetscConj(x[j]) * y[k]; 174f16551e9SSatish Balay } 175f16551e9SSatish Balay return sum; 176f16551e9SSatish Balay } 177d71ae5a4SJacob Faibussowitsch static inline PetscScalar BLASdotu_(const PetscBLASInt *n, const PetscScalar *x, const PetscBLASInt *sx, const PetscScalar *y, const PetscBLASInt *sy) 178d71ae5a4SJacob Faibussowitsch { 179f16551e9SSatish Balay PetscScalar sum = 0.0; 1809669e4d8SBarry Smith PetscInt i, j, k; 181f16551e9SSatish Balay if (*sx == 1 && *sy == 1) { 182f16551e9SSatish Balay for (i = 0; i < *n; i++) sum += x[i] * y[i]; 183f16551e9SSatish Balay } else { 184f16551e9SSatish Balay for (i = 0, j = 0, k = 0; i < *n; i++, j += *sx, k += *sy) sum += x[j] * y[k]; 185f16551e9SSatish Balay } 186f16551e9SSatish Balay return sum; 187f16551e9SSatish Balay } 188f16551e9SSatish Balay #else 18949b12944SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) && defined(PETSC_BLASLAPACK_SDOT_RETURNS_DOUBLE) 1906c737031SSatish Balay BLAS_EXTERN double BLASdot_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 1916c737031SSatish Balay BLAS_EXTERN double BLASdotu_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 19249b12944SBarry Smith #else 1936c737031SSatish Balay BLAS_EXTERN PetscScalar BLASdot_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 194f16551e9SSatish Balay #endif 19549b12944SBarry Smith #endif 196f16551e9SSatish Balay 19765da4498SStefano Zampini /* Some functions prototypes do not exist for reals */ 19865da4498SStefano Zampini #if defined(PETSC_USE_COMPLEX) 1993547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetrf_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2003547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2013547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetri_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, PetscBLASInt *); 2023547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKheev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 20365da4498SStefano Zampini #endif 204976cf19bSSatish Balay /* Some functions prototypes differ between real and complex */ 205976cf19bSSatish Balay #if defined(PETSC_USE_COMPLEX) 2063c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GELSS) 2076c737031SSatish Balay BLAS_EXTERN void LAPACKgelss_(const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, const PetscReal *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 2083c377650SSatish Balay #else 2093c377650SSatish Balay #define LAPACKgelss_(a, b, c, d, e, f, g, h, i, j, k, l, m, n) PetscMissingLapack("GELSS", a, b, c, d, e, f, g, h, i, j, k, l, m, n) 2103c377650SSatish Balay #endif 2113547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 2123547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyevx_(const char *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 2133547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsygv_(const PetscBLASInt *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 2143547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsygvx_(PetscBLASInt *, const char *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 2153547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpttrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2163c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GERFS) 2173547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgerfs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, PetscReal *, PetscBLASInt *); 2183c377650SSatish Balay #else 2193c377650SSatish Balay #define LAPACKgerfs_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) PetscMissingLapack("GERFS", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) 2203c377650SSatish Balay #endif 2213c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRSEN) 2223547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtrsen_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2233c377650SSatish Balay #else 2243c377650SSatish Balay #define LAPACKtrsen_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) PetscMissingLapack("TRSEN", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) 2253c377650SSatish Balay #endif 2263c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TGSEN) 2273547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtgsen_(const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, const PetscBLASInt *, PetscBLASInt *); 2283c377650SSatish Balay #else 2293c377650SSatish Balay #define LAPACKtgsen_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) PetscMissingLapack("TGSEN", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) 2303c377650SSatish Balay #endif 2313c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GGES) 232b181a85eSPierre Jolivet BLAS_EXTERN void LAPACKgges_(const char *, const char *, const char *, PetscBLASInt (*)(void), const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *); 2333c377650SSatish Balay #else 2343c377650SSatish Balay #define LAPACKgges_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) PetscMissingLapack("GGES", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) 2353c377650SSatish Balay #endif 2363c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HSEQR) 2373547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhseqr_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 238976cf19bSSatish Balay #else 2393c377650SSatish Balay #define LAPACKhseqr_(a, b, c, d, e, f, g, h, i, j, k, l, m) PetscMissingLapack("HSEQR", a, b, c, d, e, f, g, h, i, j, k, l, m) 2403c377650SSatish Balay #endif 2413c377650SSatish Balay #else /* !defined(PETSC_USE_COMPLEX) */ 2423c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GELSS) 2436c737031SSatish Balay BLAS_EXTERN void LAPACKgelss_(const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, const PetscReal *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2443c377650SSatish Balay #else 2453c377650SSatish Balay #define LAPACKgelss_(a, b, c, d, e, f, g, h, i, j, k, l, m) PetscMissingLapack("GELSS", a, b, c, d, e, f, g, h, i, j, k, l, m) 2463c377650SSatish Balay #endif 2473547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2483547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyevx_(const char *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 2493547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsygv_(const PetscBLASInt *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2503547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsygvx_(const PetscBLASInt *, const char *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 2513547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpttrs_(const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2523c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_STEBZ) 2533547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKstebz_(const char *, const char *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscReal *, const PetscReal *, PetscBLASInt *, PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *, PetscReal *, PetscBLASInt *, PetscBLASInt *); 2543c377650SSatish Balay #else 2553c377650SSatish Balay #define LAPACKstebz_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) PetscMissingLapack("STEBZ", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) 256976cf19bSSatish Balay #endif 2573c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GERFS) 2583547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgerfs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, PetscBLASInt *, PetscBLASInt *); 2593c377650SSatish Balay #else 2603c377650SSatish Balay #define LAPACKgerfs_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) PetscMissingLapack("GERFS", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) 2613c377650SSatish Balay #endif 2623c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRSEN) 2633547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtrsen_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscBLASInt *, const PetscBLASInt *, PetscBLASInt *); 2643c377650SSatish Balay #else 2653c377650SSatish Balay #define LAPACKtrsen_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) PetscMissingLapack("TRSEN", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) 2663c377650SSatish Balay #endif 2673c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TGSEN) 2683547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtgsen_(const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscReal *, const PetscBLASInt *, PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscBLASInt *, const PetscBLASInt *, PetscBLASInt *); 2693c377650SSatish Balay #else 2703c377650SSatish Balay #define LAPACKtgsen_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) PetscMissingLapack("TGSEN", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) 2713c377650SSatish Balay #endif 2723c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GGES) 2733547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgges_(const char *, const char *, const char *, PetscBLASInt (*)(void), const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscBLASInt *); 2743c377650SSatish Balay #else 2753c377650SSatish Balay #define LAPACKgges_(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) PetscMissingLapack("GGES", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) 2763c377650SSatish Balay #endif 2773c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HSEQR) 2783547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhseqr_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2793c377650SSatish Balay #else 2803c377650SSatish Balay #define LAPACKhseqr_(a, b, c, d, e, f, g, h, i, j, k, l, m, n) PetscMissingLapack("HSEQR", a, b, c, d, e, f, g, h, i, j, k, l, m, n) 2813c377650SSatish Balay #endif 2823c377650SSatish Balay #endif /* defined(PETSC_USE_COMPLEX) */ 283976cf19bSSatish Balay 2841148afceSStefano Zampini #if defined(PETSC_USE_COMPLEX) 2853547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgeev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 286e2b200f6SPierre Jolivet BLAS_EXTERN void LAPACKgesvd_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 287976cf19bSSatish Balay #else 2883547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKgeev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 289e2b200f6SPierre Jolivet BLAS_EXTERN void LAPACKgesvd_(const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 290c35b00c6SBarry Smith #endif 291