22#ifndef LAPACK_CONNECTOR_HPP
23#define LAPACK_CONNECTOR_HPP
30#include "../complexmatrix.h"
31#include "../global_function.h"
50void dsygvd_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
51 double* a,
const int* lda,
52 double* b,
const int* ldb,
54 double* work,
const int* lwork,
55 int* iwork,
const int* liwork,
58void chegvd_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
59 std::complex<float>* a,
const int* lda,
60 std::complex<float>* b,
const int* ldb,
62 std::complex<float>* work,
const int* lwork,
63 float* rwork,
const int* lrwork,
64 int* iwork,
const int* liwork,
67void zhegvd_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
68 std::complex<double>* a,
const int* lda,
69 std::complex<double>* b,
const int* ldb,
71 std::complex<double>* work,
const int* lwork,
72 double* rwork,
const int* lrwork,
73 int* iwork,
const int* liwork,
78void dsyevx_(
const char* jobz,
const char* range,
const char* uplo,
const int* n,
79 double* a,
const int* lda,
80 const double* vl,
const double* vu,
81 const int* il,
const int* iu,
83 int* m,
double* w,
double* z,
const int* ldz,
84 double* work,
const int* lwork,
85 int* iwork,
int* ifail,
88void cheevx_(
const char* jobz,
const char* range,
const char* uplo,
const int* n,
89 std::complex<float>* a,
const int* lda,
90 const float* vl,
const float* vu,
91 const int* il,
const int* iu,
93 int* m,
float* w, std::complex<float>* z,
const int* ldz,
94 std::complex<float>* work,
const int* lwork,
95 float* rwork,
int* iwork,
int* ifail,
98void zheevx_(
const char* jobz,
const char* range,
const char* uplo,
const int* n,
99 std::complex<double>* a,
const int* lda,
100 const double* vl,
const double* vu,
101 const int* il,
const int* iu,
102 const double* abstol,
103 int* m,
double* w, std::complex<double>* z,
const int* ldz,
104 std::complex<double>* work,
const int* lwork,
105 double* rwork,
int* iwork,
int* ifail,
110void dsygvx_(
const int* itype,
const char* jobz,
const char* range,
const char* uplo,
112 double* a,
const int* lda,
113 double* b,
const int* ldb,
114 const double* vl,
const double* vu,
115 const int* il,
const int* iu,
116 const double* abstol,
117 int* m,
double* w,
double* z,
const int* ldz,
118 double* work,
const int* lwork,
119 int* iwork,
int* ifail,
122void chegvx_(
const int* itype,
const char* jobz,
const char* range,
const char* uplo,
124 std::complex<float>* a,
const int* lda,
125 std::complex<float>* b,
const int* ldb,
126 const float* vl,
const float* vu,
127 const int* il,
const int* iu,
129 int* m,
float* w, std::complex<float>* z,
const int* ldz,
130 std::complex<float>* work,
const int* lwork,
131 float* rwork,
int* iwork,
int* ifail,
134void zhegvx_(
const int* itype,
const char* jobz,
const char* range,
const char* uplo,
136 std::complex<double>* a,
const int* lda,
137 std::complex<double>* b,
const int* ldb,
138 const double* vl,
const double* vu,
139 const int* il,
const int* iu,
140 const double* abstol,
141 int* m,
double* w, std::complex<double>* z,
const int* ldz,
142 std::complex<double>* work,
const int* lwork,
143 double* rwork,
int* iwork,
int* ifail,
148void dsygv_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
149 double* a,
const int* lda,
150 double* b,
const int* ldb,
152 double* work,
const int* lwork,
155void chegv_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
156 std::complex<float>* a,
const int* lda,
157 std::complex<float>* b,
const int* ldb,
159 std::complex<float>* work,
const int* lwork,
163void zhegv_(
const int* itype,
const char* jobz,
const char* uplo,
const int* n,
164 std::complex<double>* a,
const int* lda,
165 std::complex<double>* b,
const int* ldb,
167 std::complex<double>* work,
const int* lwork,
173void dsyev_(
const char* jobz,
const char* uplo,
const int* n,
174 double* a,
const int* lda,
176 double* work,
const int* lwork,
179void cheev_(
const char* jobz,
const char* uplo,
const int* n,
180 std::complex<float>* a,
const int* lda,
182 std::complex<float>* work,
const int* lwork,
186void zheev_(
const char* jobz,
const char* uplo,
const int* n,
187 std::complex<double>* a,
const int* lda,
189 std::complex<double>* work,
const int* lwork,
195void dgeev_(
const char* jobvl,
const char* jobvr,
const int* n,
196 double* a,
const int* lda,
197 double* wr,
double* wi,
198 double* vl,
const int* ldvl,
199 double* vr,
const int* ldvr,
200 double* work,
const int* lwork,
203void zgeev_(
const char* jobvl,
const char* jobvr,
const int* n,
204 std::complex<double>* a,
const int* lda,
205 std::complex<double>* w,
206 std::complex<double>* vl,
const int* ldvl,
207 std::complex<double>* vr,
const int* ldvr,
208 std::complex<double>* work,
const int* lwork,
214void dgetrf_(
const int* m,
const int* n,
double* a,
const int* lda,
215 int* ipiv,
int* info);
217void dgetri_(
const int* n,
double* a,
const int* lda,
219 double* work,
const int* lwork,
224void dsytrf_(
const char* uplo,
const int* n,
double* a,
const int* lda,
225 int* ipiv,
double* work,
const int* lwork,
int* info);
227void dsytri_(
const char* uplo,
const int* n,
double* a,
const int* lda,
228 const int* ipiv,
double* work,
int* info);
232void spotrf_(
const char* uplo,
const int* n,
float* a,
const int* lda,
int* info);
233void dpotrf_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
234void cpotrf_(
const char* uplo,
const int* n, std::complex<float>* a,
const int* lda,
int* info);
235void zpotrf_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
237void spotri_(
const char* uplo,
const int* n,
float* a,
const int* lda,
int* info);
238void dpotri_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
239void cpotri_(
const char* uplo,
const int* n, std::complex<float>* a,
const int* lda,
int* info);
240void zpotri_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
244void zgetrf_(
const int* m,
const int* n, std::complex<double>* a,
const int* lda,
245 int* ipiv,
int* info);
247void zgetri_(
const int* n, std::complex<double>* a,
const int* lda,
249 std::complex<double>* work,
const int* lwork,
255void dsterf_(
const int* n,
double* d,
double* e,
int* info);
257void dstein_(
const int* n,
const double* d,
const double* e,
258 const int* m,
const double* w,
259 const int* iblock,
const int* isplit,
260 double* z,
const int* ldz,
261 double* work,
int* iwork,
int* ifail,
264void zstein_(
const int* n,
const double* d,
const double* e,
265 const int* m,
const double* w,
266 const int* iblock,
const int* isplit,
267 std::complex<double>* z,
const int* ldz,
268 double* work,
int* iwork,
int* ifail,
273void dpotf2_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
274void zpotf2_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
278void dgtsv_(
const int* n,
const int* nrhs,
279 double* dl,
double* d,
double* du,
280 double* b,
const int* ldb,
285void dsysv_(
const char* uplo,
const int* n,
const int* nrhs,
286 double* a,
const int* lda,
288 double* b,
const int* ldb,
289 double* work,
const int* lwork,
294#define zhegvx_ zhegvx_i
300 std::complex<double>* a,
302 std::complex<double>* b,
308 const double* abstol,
311 std::complex<double>* z,
313 std::complex<double>* work,
330 std::complex<double>* aux =
new std::complex<double>[lda*n];
331 for (
int i = 0; i < n; ++i)
333 for (
int j = 0; j < lda; ++j)
335 aux[i*lda+j] = a(j,i);
342 std::complex<float>* transpose(
const std::complex<float>* a,
const int n,
const int lda,
const int nbase_x)
344 std::complex<float>* aux =
new std::complex<float>[lda*n];
345 for (
int i = 0; i < n; ++i)
347 for (
int j = 0; j < lda; ++j)
349 aux[j * n + i] = a[i * nbase_x + j];
356 std::complex<double>* transpose(
const std::complex<double>* a,
const int n,
const int lda,
const int nbase_x)
358 std::complex<double>* aux =
new std::complex<double>[lda*n];
359 for (
int i = 0; i < n; ++i)
361 for (
int j = 0; j < lda; ++j)
363 aux[j * n + i] = a[i * nbase_x + j];
373 for (
int i = 0; i < n; ++i)
375 for (
int j = 0; j < lda; ++j)
377 a(j, i) = aux[i*lda+j];
384 void transpose(
const std::complex<float>* aux, std::complex<float>* a,
const int n,
const int lda,
const int nbase_x)
386 for (
int i = 0; i < n; ++i)
388 for (
int j = 0; j < lda; ++j)
390 a[j * nbase_x + i] = aux[i * lda + j];
397 void transpose(
const std::complex<double>* aux, std::complex<double>* a,
const int n,
const int lda,
const int nbase_x)
399 for (
int i = 0; i < n; ++i)
401 for (
int j = 0; j < lda; ++j)
403 a[j * nbase_x + i] = aux[i * lda + j];
410 char change_uplo(
const char &uplo)
414 case 'U':
return 'L';
415 case 'L':
return 'U';
416 default:
throw std::invalid_argument(
"uplo must be 'U' or 'L'");
422 char change_trans_NC(
const char &trans)
426 case 'N':
return 'C';
427 case 'C':
return 'N';
428 default:
throw std::invalid_argument(
"trans must be 'N' or 'C'");
434 void zheev(
const char jobz,
440 std::complex< double >* work,
445 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
447 zheev_(&jobz, &uplo, &n, aux, &lda, w, work, &lwork, rwork, info);
449 LapackConnector::transpose(aux, a, n, lda);
457 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
458 zgetrf_( &m, &n, aux, &lda, ipiv, info);
459 LapackConnector::transpose(aux, a, n, lda);
466 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
467 zgetri_( &n, aux, &lda, ipiv, work, &lwork, info);
468 LapackConnector::transpose(aux, a, n, lda);
475 void potrf(
const char &uplo,
const int &n,
float*
const A,
const int &lda,
int &info )
477 const char uplo_changed = change_uplo(uplo);
478 spotrf_( &uplo_changed, &n, A, &lda, &info );
481 void potrf(
const char &uplo,
const int &n,
double*
const A,
const int &lda,
int &info )
483 const char uplo_changed = change_uplo(uplo);
484 dpotrf_( &uplo_changed, &n, A, &lda, &info );
487 void potrf(
const char &uplo,
const int &n, std::complex<float>*
const A,
const int &lda,
int &info )
489 const char uplo_changed = change_uplo(uplo);
490 cpotrf_( &uplo_changed, &n, A, &lda, &info );
493 void potrf(
const char &uplo,
const int &n, std::complex<double>*
const A,
const int &lda,
int &info )
495 const char uplo_changed = change_uplo(uplo);
496 zpotrf_( &uplo_changed, &n, A, &lda, &info );
502 void potri(
const char &uplo,
const int &n,
float*
const A,
const int &lda,
int &info )
504 const char uplo_changed = change_uplo(uplo);
505 spotri_( &uplo_changed, &n, A, &lda, &info);
508 void potri(
const char &uplo,
const int &n,
double*
const A,
const int &lda,
int &info )
510 const char uplo_changed = change_uplo(uplo);
511 dpotri_( &uplo_changed, &n, A, &lda, &info);
514 void potri(
const char &uplo,
const int &n, std::complex<float>*
const A,
const int &lda,
int &info )
516 const char uplo_changed = change_uplo(uplo);
517 cpotri_( &uplo_changed, &n, A, &lda, &info);
520 void potri(
const char &uplo,
const int &n, std::complex<double>*
const A,
const int &lda,
int &info )
522 const char uplo_changed = change_uplo(uplo);
523 zpotri_( &uplo_changed, &n, A, &lda, &info);
528 void potrf(
const char &uplo,
const int &n,
ModuleBase::matrix &A,
const int &lda,
int &info )
530 potrf( uplo, n, A.c, lda, info );
535 potrf( uplo, n, A.c, lda, info );
540 void potri(
const char &uplo,
const int &n,
ModuleBase::matrix &A,
const int &lda,
int &info )
542 potri( uplo, n, A.c, lda, info);
547 potri( uplo, n, A.c, lda, info);
554 void herk(
const char uplo,
const char trans,
const int n,
const int k,
555 const double alpha,
const std::complex<double> *A,
const int lda,
556 const double beta, std::complex<double> *C,
const int ldc)
558 const char uplo_changed = change_uplo(uplo);
559 const char trans_changed = change_trans_NC(trans);
560 zherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc);
563 void herk(
const char uplo,
const char trans,
const int n,
const int k,
564 const float alpha,
const std::complex<float>* A,
const int lda,
565 const float beta, std::complex<float>* C,
const int ldc)
567 const char uplo_changed = change_uplo(uplo);
568 const char trans_changed = change_trans_NC(trans);
569 cherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc);
void spotri_(const char *uplo, const int *n, float *A, const int *lda, int *info)
void zgetrf_(const int *m, const int *n, std::complex< double > *a, const int *lda, int *ipiv, int *info)
void cpotrf_(const char *uplo, const int *n, std::complex< float > *A, const int *lda, int *info)
void spotrf_(const char *uplo, const int *n, float *A, const int *lda, int *info)
void cpotri_(const char *uplo, const int *n, std::complex< float > *A, const int *lda, int *info)
void zpotri_(const char *uplo, const int *n, std::complex< double > *A, const int *lda, int *info)
void zpotrf_(const char *uplo, const int *n, std::complex< double > *A, const int *lda, int *info)
void dpotrf_(const char *uplo, const int *n, double *A, const int *lda, int *info)
void dpotri_(const char *uplo, const int *n, double *A, const int *lda, int *info)
void zgetri_(const int *n, std::complex< double > *A, const int *lda, const int *ipiv, std::complex< double > *work, const int *lwork, int *info)
void cherk_(const char *uplo, const char *trans, const int *n, const int *k, const float *alpha, const std::complex< float > *a, const int *lda, const float *beta, std::complex< float > *c, const int *ldc)
void zherk_(const char *uplo, const char *trans, const int *n, const int *k, const double *alpha, const std::complex< double > *a, const int *lda, const double *beta, std::complex< double > *c, const int *ldc)
Definition complexmatrix.h:14
void zhegvx_i(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, std::complex< double > *z, const int *ldz, std::complex< double > *work, const int *lwork, double *rwork, int *iwork, int *ifail, int *info)
Definition gather_math_lib_info.cpp:49
void chegvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, std::complex< float > *a, const int *lda, std::complex< float > *b, const int *ldb, const float *vl, const float *vu, const int *il, const int *iu, const float *abstol, int *m, float *w, std::complex< float > *z, const int *ldz, std::complex< float > *work, const int *lwork, float *rwork, int *iwork, int *ifail, int *info)
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info)
void dsyevx_(const char *jobz, const char *range, const char *uplo, const int *n, double *a, const int *lda, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, double *z, const int *ldz, double *work, const int *lwork, int *iwork, int *ifail, int *info)
void chegv_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< float > *a, const int *lda, std::complex< float > *b, const int *ldb, float *w, std::complex< float > *work, const int *lwork, float *rwork, int *info)
void cheevx_(const char *jobz, const char *range, const char *uplo, const int *n, std::complex< float > *a, const int *lda, const float *vl, const float *vu, const int *il, const int *iu, const float *abstol, int *m, float *w, std::complex< float > *z, const int *ldz, std::complex< float > *work, const int *lwork, float *rwork, int *iwork, int *ifail, int *info)
void spotrf_(const char *uplo, const int *n, float *a, const int *lda, int *info)
void dgtsv_(const int *n, const int *nrhs, double *dl, double *d, double *du, double *b, const int *ldb, int *info)
void dsygvd_(const int *itype, const char *jobz, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, double *w, double *work, const int *lwork, int *iwork, const int *liwork, int *info)
void dgetri_(const int *n, double *a, const int *lda, const int *ipiv, double *work, const int *lwork, int *info)
void zpotrf_(const char *uplo, const int *n, std::complex< double > *a, const int *lda, int *info)
void dsygv_(const int *itype, const char *jobz, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, double *w, double *work, const int *lwork, int *info)
void dpotrf_(const char *uplo, const int *n, double *a, const int *lda, int *info)
void zgetri_(const int *n, std::complex< double > *a, const int *lda, const int *ipiv, std::complex< double > *work, const int *lwork, int *info)
void dsterf_(const int *n, double *d, double *e, int *info)
void dsysv_(const char *uplo, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, double *work, const int *lwork, int *info)
void zgetrf_(const int *m, const int *n, std::complex< double > *a, const int *lda, int *ipiv, int *info)
void zhegvd_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, double *w, std::complex< double > *work, const int *lwork, double *rwork, const int *lrwork, int *iwork, const int *liwork, int *info)
void zhegv_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, double *w, std::complex< double > *work, const int *lwork, double *rwork, int *info)
void zheev_(const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, double *w, std::complex< double > *work, const int *lwork, double *rwork, int *info)
void dsytri_(const char *uplo, const int *n, double *a, const int *lda, const int *ipiv, double *work, int *info)
void cheev_(const char *jobz, const char *uplo, const int *n, std::complex< float > *a, const int *lda, float *w, std::complex< float > *work, const int *lwork, float *rwork, int *info)
void zheevx_(const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *a, const int *lda, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, std::complex< double > *z, const int *ldz, std::complex< double > *work, const int *lwork, double *rwork, int *iwork, int *ifail, int *info)
void zpotri_(const char *uplo, const int *n, std::complex< double > *a, const int *lda, int *info)
void zhegvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, std::complex< double > *z, const int *ldz, std::complex< double > *work, const int *lwork, double *rwork, int *iwork, int *ifail, int *info)
void dsygvx_(const int *itype, const char *jobz, const char *range, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, const double *vl, const double *vu, const int *il, const int *iu, const double *abstol, int *m, double *w, double *z, const int *ldz, double *work, const int *lwork, int *iwork, int *ifail, int *info)
void zgeev_(const char *jobvl, const char *jobvr, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *w, std::complex< double > *vl, const int *ldvl, std::complex< double > *vr, const int *ldvr, std::complex< double > *work, const int *lwork, double *rwork, int *info)
void zstein_(const int *n, const double *d, const double *e, const int *m, const double *w, const int *iblock, const int *isplit, std::complex< double > *z, const int *ldz, double *work, int *iwork, int *ifail, int *info)
void dsytrf_(const char *uplo, const int *n, double *a, const int *lda, int *ipiv, double *work, const int *lwork, int *info)
void dstein_(const int *n, const double *d, const double *e, const int *m, const double *w, const int *iblock, const int *isplit, double *z, const int *ldz, double *work, int *iwork, int *ifail, int *info)
void dpotf2_(const char *uplo, const int *n, double *a, const int *lda, int *info)
void zpotf2_(const char *uplo, const int *n, std::complex< double > *a, const int *lda, int *info)
void chegvd_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< float > *a, const int *lda, std::complex< float > *b, const int *ldb, float *w, std::complex< float > *work, const int *lwork, float *rwork, const int *lrwork, int *iwork, const int *liwork, int *info)
void dpotri_(const char *uplo, const int *n, double *a, const int *lda, int *info)
void dsyev_(const char *jobz, const char *uplo, const int *n, double *a, const int *lda, double *w, double *work, const int *lwork, int *info)
void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi, double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info)
void spotri_(const char *uplo, const int *n, float *a, const int *lda, int *info)
void cpotri_(const char *uplo, const int *n, std::complex< float > *a, const int *lda, int *info)
void cpotrf_(const char *uplo, const int *n, std::complex< float > *a, const int *lda, int *info)
Definition lapack_connector.h:325