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