1 #include "f77func.h" 2 #ifdef blaswrap 3 #define zgemm_ f2c_zgemm 4 #define zcopy_ f2c_zcopy 5 #endif 6 7 #ifndef ___INTEGER_definition___ 8 typedef int INTEGER; /* for fortran integer */ 9 #define ___INTEGER_definition___ 10 #endif 11 12 #ifndef ___logical_definition___ 13 typedef long int logical; 14 #define ___logical_definition___ 15 #endif 16 17 #ifndef ___dcomplex_definition___ 18 typedef struct { double r,i; } dcomplex; 19 #define ___dcomplex_definition___ 20 #endif 21 22 int zgesvd_(char *jobu, char *jobvt, INTEGER *m, INTEGER *n, 23 dcomplex *a, INTEGER *lda, 24 double *s, dcomplex *u, 25 INTEGER *ldu, dcomplex *vt, 26 INTEGER *ldvt, dcomplex *work, 27 INTEGER *lwork, double *rwork, INTEGER *info); 28 29 int dgesv_(INTEGER *n, INTEGER *nrhs, double *a, INTEGER *lda, INTEGER *ipiv, double *b, 30 INTEGER *ldb, INTEGER *info); 31 32 void dsyev_(char *JOBZ, char *UPLO,INTEGER *N,double *A,INTEGER *LDA,double *W, 33 double *WORK,INTEGER *LWORK, INTEGER *INFO); 34 void dsbev_(char *JOBZ, char *UPLO, INTEGER *N, INTEGER *KD, double *AB, INTEGER *LDAB, 35 double *W, double *Z, 36 INTEGER * LDZ,double *WORK, INTEGER *INFO ); 37 void dgesvd_(char *JOBU, char *JOBVT, INTEGER *M, INTEGER *N, double *A, INTEGER *LDA, double *S, double *U, 38 INTEGER *LDU, double *VT, INTEGER *LDVT, double *WORK, INTEGER *LWORK, INTEGER *INFO ); 39 40 void dsygv_(INTEGER *itype, char *jobz, char *uplo, INTEGER *n, 41 double *a, INTEGER *lda, double *b, INTEGER *ldb, 42 double *w, double *work, INTEGER *lwork, INTEGER *info); 43 44 void dsyevx_(char *JOBZ, char *RANGE, char *UPLO, INTEGER *N, double *A, INTEGER *LDA, 45 double *VL, double *VU, 46 INTEGER *IL, INTEGER *IU, double *ABSTOL, INTEGER *M, double *W, double *Z, 47 INTEGER *LDZ, double *WORK, 48 INTEGER *LWORK, INTEGER *IWORK, INTEGER *IFAIL, INTEGER *INFO); 49 void dsyevd_(char *JOBZ, char *UPLO, INTEGER *N, double *A, INTEGER *LDA, double *W, double *WORK, 50 INTEGER *LWORK, INTEGER *IWORK, 51 INTEGER *LIWORK, INTEGER *INFO); 52 void dsyevr_(char *JOBZ, char *RANGE, char *UPLO, INTEGER *N, double *A, INTEGER *LDA, double *VL, double *VU, 53 INTEGER *IL, INTEGER *IU, 54 double *ABSTOL, INTEGER *M, double *W, double *Z,INTEGER *LDZ, INTEGER *ISUPPZ, double *WORK, 55 INTEGER *LWORK, INTEGER *IWORK, INTEGER *LIWORK, INTEGER *INFO); 56 57 int dstevx_(char *JOBZ, char *RANGE, INTEGER *N, double *D, double *E, double *VL, double *VU, INTEGER *IL, INTEGER *IU, double *ABSTOL, 58 INTEGER *M, double *W, double *Z, INTEGER *LDZ, double *WORK, INTEGER *IWORK, INTEGER *IFAIL, INTEGER *INFO); 59 60 void dgetrf_(INTEGER *M, INTEGER *N,double *A, INTEGER *LDA, INTEGER *IPIV, INTEGER *INFO); 61 void dgetri_( INTEGER *N, double *A, INTEGER *LDA, INTEGER *IPIV, double *WORK, INTEGER *LWORK, INTEGER *INFO); 62 63 int dsysv_(char *UPLO, INTEGER *N, INTEGER *NRHS, double *A, INTEGER *LDA, INTEGER *IPIV, double *B, INTEGER *LDB, double *WORK, 64 INTEGER *LWORK, INTEGER *INFO); 65 66 int dstedc_(char *COMPZ , INTEGER *N , double *D , double *E , double *Z , 67 INTEGER *LDZ , double *WORK , INTEGER *LWORK , INTEGER *IWORK , INTEGER *LIWORK , 68 INTEGER *INFO); 69 70 int dstegr_(char *JOBZ , char *RANGE , INTEGER *N , double *D , double *E , 71 double *VL , double *VU , INTEGER *IL , INTEGER *IU , double *ABSTOL , 72 INTEGER *M , double *W , double *Z , INTEGER *LDZ , INTEGER *ISUPPZ , 73 double *WORK , INTEGER *LWORK , INTEGER *IWORK , INTEGER *LIWORK , INTEGER *INFO 74 ); 75 76 int dsteqr_(char *compz, INTEGER *n, double *d__, 77 double *e, double *z__, INTEGER *ldz, double *work, INTEGER *info); 78 79 80 void zheev_(char *JOBZ, char *UPLO, INTEGER *N, dcomplex *A, INTEGER *LDA, double *W, dcomplex *WORK, INTEGER *LWORK, 81 double *RWORK, INTEGER *INFO); 82 void zheevx_(char *JOBZ, char *RANGE, char *UPLO, INTEGER *N, dcomplex *A, INTEGER *LDA, double *VL, double *VU, INTEGER *IL, INTEGER *IU, 83 double *ABSTOL, INTEGER *M, double *W, dcomplex *Z, INTEGER *LDZ, dcomplex *WORK, INTEGER *LWORK, double *RWORK, 84 INTEGER *IWORK, INTEGER *IFAIL, INTEGER *INFO); 85 86 87 void zheev_(char *JOBZ, char *UPLO, int *N, dcomplex *A, int *LDA, double *W, dcomplex *WORK, int *LWORK, double *RWORK, 88 int *INFO); 89 void zheevx_(char *JOBZ, char *RANGE, char *UPLO, int *N, dcomplex *A, int *LDA, double *VL, double *VU, int *IL, int *IU, 90 double *ABSTOL, int *M, double *W, dcomplex *Z, int *LDZ, dcomplex *WORK, int *LWORK, double *RWORK, 91 int *IWORK, int *IFAIL, int *INFO); 92 93 int dgemm_(char *transa, char *transb, int *m, int *n, int *k, 94 double *alpha, double *a, int *lda, 95 double *b, int *ldb, double *beta, double *c__, 96 int *ldc); 97 98 void zgemm_(char* TRANSA, char* TRANSB, int * M, int * N,int *K, dcomplex *alpha, 99 dcomplex *A, int *LDA, dcomplex *B, int*LDB, dcomplex *beta, dcomplex *C, int *LDC); 100 void zgetrf_(int *m, int *n, dcomplex *a,int *lda,int *ipvt, int *info ); 101 void zgetri_(int *n,dcomplex *a,int *lda, int *ipvt, dcomplex *work, int *lwork, int *info); 102 int zcopy_(int *n, dcomplex *zx, int *incx, dcomplex *zy, int *incy); 103 104 void zgtsv_(INTEGER *n, INTEGER *nrhs, dcomplex *dl, 105 dcomplex *d__, dcomplex *du, dcomplex *b, INTEGER *ldb, 106 INTEGER *info); 107 108 /* added by mari 08.12.2014 */ 109 void zgesv_(INTEGER *n, INTEGER *nrhs, dcomplex *a, INTEGER *lda, 110 INTEGER *ipiv, dcomplex *b, INTEGER *ldb, INTEGER *info); 111 112 void dpotrf_(char *uplo, INTEGER *n, double *a, INTEGER *lda, INTEGER *info); 113 void dpotri_(char *uplo, INTEGER *n, double *a, INTEGER *lda, INTEGER *info); 114 void dggevx_(char *balanc, char *jobvl, char *jobvr, char *sense, 115 INTEGER *n, double *a, INTEGER *lda, double *b, 116 INTEGER *ldb, double *alphar, double *alphai, double *beta, 117 double *vl, INTEGER *ldvl, double *vr, INTEGER *ldvr, 118 INTEGER *ilo, INTEGER *ihi, double *lscale, double *rscale, 119 double *abnrm, double *bbnrm, double *rconde, double *rcondv, 120 double *work, INTEGER *lwork, INTEGER *iwork, logical *bwork, 121 INTEGER *info); 122 123 void dsytrd_(char *uplo, INTEGER *n, double *a, INTEGER *lda, double *d__, double *e, 124 double *tau, double *work, INTEGER *lwork, INTEGER *info); 125 126 127 typedef enum {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER; 128 typedef enum {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113} CBLAS_TRANSPOSE; 129 130 /* MKL integer types for LP64 and ILP64 */ 131 #if (!defined(__INTEL_COMPILER)) & defined(_MSC_VER) 132 #define MKL_INT64 __int64 133 #define MKL_UINT64 unsigned __int64 134 #else 135 #define MKL_INT64 long long int 136 #define MKL_UINT64 unsigned long long int 137 #endif 138 139 #ifdef MKL_ILP64 140 141 /* MKL ILP64 integer types */ 142 #ifndef MKL_INT 143 #define MKL_INT MKL_INT64 144 #endif 145 #ifndef MKL_UINT 146 #define MKL_UINT MKL_UINT64 147 #endif 148 #define MKL_LONG MKL_INT64 149 150 #else 151 152 /* MKL LP64 integer types */ 153 #ifndef MKL_INT 154 #define MKL_INT int 155 #endif 156 #ifndef MKL_UINT 157 #define MKL_UINT unsigned int 158 #endif 159 #define MKL_LONG long int 160 161 #endif 162 163 void cblas_dgemm(const CBLAS_ORDER Order, const CBLAS_TRANSPOSE TransA, 164 const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N, 165 const MKL_INT K, const double alpha, const double *A, 166 const MKL_INT lda, const double *B, const MKL_INT ldb, 167 const double beta, double *C, const MKL_INT ldc); 168 169 170 void DGEMM(const char *transa, const char *transb, const MKL_INT *m, const MKL_INT *n, const MKL_INT *k, 171 const double *alpha, const double *a, const MKL_INT *lda, const double *b, const MKL_INT *ldb, 172 const double *beta, double *c, const MKL_INT *ldc); 173 174 void dgemm(const char *transa, const char *transb, const MKL_INT *m, const MKL_INT *n, const MKL_INT *k, 175 const double *alpha, const double *a, const MKL_INT *lda, const double *b, const MKL_INT *ldb, 176 const double *beta, double *c, const MKL_INT *ldc); 177