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) 1637c12098SBarry Smith old Cray vector machines used to be this way, it is 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 33*af27ebaaSBarry Smith PetscCallBLAS - Calls a BLAS or LAPACK routine so that the stack trace returned from any signal received inside the function call 34*af27ebaaSBarry 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 *); 123916c178eSAndreas 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 *); 124b9d4cb8dSJed 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 *); 125916c178eSAndreas 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 *); 1266c737031SSatish 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 *); 1273c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_ORMQR) 128872393edSJose E. Roman BLAS_EXTERN void LAPACKormqr_(const char *, const char *, PetscBLASInt *, PetscBLASInt *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscScalar *, PetscBLASInt *, PetscScalar *, PetscBLASInt *, PetscBLASInt *); 1293c377650SSatish Balay #else 1303c377650SSatish 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) 1313c377650SSatish Balay #endif 1329369748bSToby Isaac #if !defined(PETSC_MISSING_LAPACK_STEGR) 1333547a1f1SPierre 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 *); 1349369748bSToby Isaac #else 1359369748bSToby 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) 1369369748bSToby Isaac #endif 1373c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_STEQR) 1383547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsteqr_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 1393547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKREALsteqr_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 1403c377650SSatish Balay #else 1413c377650SSatish Balay #define LAPACKsteqr_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEQR", a, b, c, d, e, f, g, h) 1423c377650SSatish Balay #define LAPACKREALsteqr_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEQR", a, b, c, d, e, f, g, h) 1433c377650SSatish Balay #endif 144ee1793ccSZach Atkins #if !defined(PETSC_MISSING_LAPACK_STEV) 145ee1793ccSZach Atkins BLAS_EXTERN void LAPACKstev_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 146ee1793ccSZach Atkins BLAS_EXTERN void LAPACKREALstev_(const char *, const PetscBLASInt *, PetscReal *, PetscReal *, PetscReal *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 147ee1793ccSZach Atkins #else 148ee1793ccSZach Atkins #define LAPACKstev_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEV", a, b, c, d, e, f, g, h) 149ee1793ccSZach Atkins #define LAPACKREALstev_(a, b, c, d, e, f, g, h) PetscMissingLapack("STEV", a, b, c, d, e, f, g, h) 150ee1793ccSZach Atkins #endif 1513c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HGEQZ) 1526c737031SSatish 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 *); 1533c377650SSatish Balay #else 1543c377650SSatish 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) 1553c377650SSatish Balay #endif 1563c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRTRS) 1573547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKtrtrs_(const char *, const char *, const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1583c377650SSatish Balay #else 1593c377650SSatish 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) 1603c377650SSatish Balay #endif 1616c737031SSatish Balay BLAS_EXTERN void LAPACKgels_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 162c35b00c6SBarry Smith 163f16551e9SSatish Balay /* handle complex dot() with special code */ 164f16551e9SSatish Balay #if defined(PETSC_USE_COMPLEX) 165d71ae5a4SJacob Faibussowitsch static inline PetscScalar BLASdot_(const PetscBLASInt *n, const PetscScalar *x, const PetscBLASInt *sx, const PetscScalar *y, const PetscBLASInt *sy) 166d71ae5a4SJacob Faibussowitsch { 167f16551e9SSatish Balay PetscScalar sum = 0.0; 1689669e4d8SBarry Smith PetscInt i, j, k; 169f16551e9SSatish Balay if (*sx == 1 && *sy == 1) { 170f16551e9SSatish Balay for (i = 0; i < *n; i++) sum += PetscConj(x[i]) * y[i]; 171f16551e9SSatish Balay } else { 172f16551e9SSatish Balay for (i = 0, j = 0, k = 0; i < *n; i++, j += *sx, k += *sy) sum += PetscConj(x[j]) * y[k]; 173f16551e9SSatish Balay } 174f16551e9SSatish Balay return sum; 175f16551e9SSatish Balay } 176d71ae5a4SJacob Faibussowitsch static inline PetscScalar BLASdotu_(const PetscBLASInt *n, const PetscScalar *x, const PetscBLASInt *sx, const PetscScalar *y, const PetscBLASInt *sy) 177d71ae5a4SJacob Faibussowitsch { 178f16551e9SSatish Balay PetscScalar sum = 0.0; 1799669e4d8SBarry Smith PetscInt i, j, k; 180f16551e9SSatish Balay if (*sx == 1 && *sy == 1) { 181f16551e9SSatish Balay for (i = 0; i < *n; i++) sum += x[i] * y[i]; 182f16551e9SSatish Balay } else { 183f16551e9SSatish Balay for (i = 0, j = 0, k = 0; i < *n; i++, j += *sx, k += *sy) sum += x[j] * y[k]; 184f16551e9SSatish Balay } 185f16551e9SSatish Balay return sum; 186f16551e9SSatish Balay } 187f16551e9SSatish Balay #else 18849b12944SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) && defined(PETSC_BLASLAPACK_SDOT_RETURNS_DOUBLE) 1896c737031SSatish Balay BLAS_EXTERN double BLASdot_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 1906c737031SSatish Balay BLAS_EXTERN double BLASdotu_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 19149b12944SBarry Smith #else 1926c737031SSatish Balay BLAS_EXTERN PetscScalar BLASdot_(const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *); 193f16551e9SSatish Balay #endif 19449b12944SBarry Smith #endif 195f16551e9SSatish Balay 19665da4498SStefano Zampini /* Some functions prototypes do not exist for reals */ 19765da4498SStefano Zampini #if defined(PETSC_USE_COMPLEX) 1983547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetrf_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 1993547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2003547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKhetri_(const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, const PetscBLASInt *, PetscScalar *, PetscBLASInt *); 2013547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKheev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 20265da4498SStefano Zampini #endif 203976cf19bSSatish Balay /* Some functions prototypes differ between real and complex */ 204976cf19bSSatish Balay #if defined(PETSC_USE_COMPLEX) 2053c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GELSS) 2066c737031SSatish 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 *); 2073c377650SSatish Balay #else 2083c377650SSatish 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) 2093c377650SSatish Balay #endif 2103547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscBLASInt *); 2113547a1f1SPierre 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 *); 2123547a1f1SPierre 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 *); 2133547a1f1SPierre 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 *); 2143547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpttrs_(const char *, const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2153c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GERFS) 2163547a1f1SPierre 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 *); 2173c377650SSatish Balay #else 2183c377650SSatish 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) 2193c377650SSatish Balay #endif 2203c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRSEN) 2213547a1f1SPierre 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 *); 2223c377650SSatish Balay #else 2233c377650SSatish 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) 2243c377650SSatish Balay #endif 2253c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TGSEN) 2263547a1f1SPierre 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 *); 2273c377650SSatish Balay #else 2283c377650SSatish 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) 2293c377650SSatish Balay #endif 2303c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GGES) 231b181a85eSPierre 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 *); 2323c377650SSatish Balay #else 2333c377650SSatish 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) 2343c377650SSatish Balay #endif 2353c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HSEQR) 2363547a1f1SPierre 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 *); 237976cf19bSSatish Balay #else 2383c377650SSatish 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) 2393c377650SSatish Balay #endif 2403c377650SSatish Balay #else /* !defined(PETSC_USE_COMPLEX) */ 2413c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GELSS) 2426c737031SSatish 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 *); 2433c377650SSatish Balay #else 2443c377650SSatish 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) 2453c377650SSatish Balay #endif 2463547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsyev_(const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscReal *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2473547a1f1SPierre 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 *); 2483547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKsygv_(const PetscBLASInt *, const char *, const char *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, const PetscBLASInt *, PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2493547a1f1SPierre 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 *); 2503547a1f1SPierre Jolivet BLAS_EXTERN void LAPACKpttrs_(const PetscBLASInt *, const PetscBLASInt *, const PetscReal *, const PetscScalar *, PetscScalar *, const PetscBLASInt *, PetscBLASInt *); 2513c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_STEBZ) 2523547a1f1SPierre 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 *); 2533c377650SSatish Balay #else 2543c377650SSatish 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) 255976cf19bSSatish Balay #endif 2563c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GERFS) 2573547a1f1SPierre 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 *); 2583c377650SSatish Balay #else 2593c377650SSatish 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) 2603c377650SSatish Balay #endif 2613c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TRSEN) 2623547a1f1SPierre 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 *); 2633c377650SSatish Balay #else 2643c377650SSatish 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) 2653c377650SSatish Balay #endif 2663c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_TGSEN) 2673547a1f1SPierre 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 *); 2683c377650SSatish Balay #else 2693c377650SSatish 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) 2703c377650SSatish Balay #endif 2713c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_GGES) 2723547a1f1SPierre 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 *); 2733c377650SSatish Balay #else 2743c377650SSatish 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) 2753c377650SSatish Balay #endif 2763c377650SSatish Balay #if !defined(PETSC_MISSING_LAPACK_HSEQR) 2773547a1f1SPierre 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 *); 2783c377650SSatish Balay #else 2793c377650SSatish 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) 2803c377650SSatish Balay #endif 2813c377650SSatish Balay #endif /* defined(PETSC_USE_COMPLEX) */ 282976cf19bSSatish Balay 2831148afceSStefano Zampini #if defined(PETSC_USE_COMPLEX) 2843547a1f1SPierre 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 *); 285e2b200f6SPierre 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 *); 286976cf19bSSatish Balay #else 2873547a1f1SPierre 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 *); 288e2b200f6SPierre 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 *); 289c35b00c6SBarry Smith #endif 290