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,
192void cheev_(
const char* jobz,
const char* uplo,
const int* n,
193 std::complex<float>* a,
const int* lda,
195 std::complex<float>* work,
const int* lwork,
199void zheev_(
const char* jobz,
const char* uplo,
const int* n,
200 std::complex<double>* a,
const int* lda,
202 std::complex<double>* work,
const int* lwork,
208void dgeev_(
const char* jobvl,
const char* jobvr,
const int* n,
209 double* a,
const int* lda,
210 double* wr,
double* wi,
211 double* vl,
const int* ldvl,
212 double* vr,
const int* ldvr,
213 double* work,
const int* lwork,
216void zgeev_(
const char* jobvl,
const char* jobvr,
const int* n,
217 std::complex<double>* a,
const int* lda,
218 std::complex<double>* w,
219 std::complex<double>* vl,
const int* ldvl,
220 std::complex<double>* vr,
const int* ldvr,
221 std::complex<double>* work,
const int* lwork,
227void dgetrf_(
const int* m,
const int* n,
double* a,
const int* lda,
228 int* ipiv,
int* info);
230void dgetri_(
const int* n,
double* a,
const int* lda,
232 double* work,
const int* lwork,
237void dsytrf_(
const char* uplo,
const int* n,
double* a,
const int* lda,
238 int* ipiv,
double* work,
const int* lwork,
int* info);
240void dsytri_(
const char* uplo,
const int* n,
double* a,
const int* lda,
241 const int* ipiv,
double* work,
int* info);
245void spotrf_(
const char* uplo,
const int* n,
float* a,
const int* lda,
int* info);
246void dpotrf_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
247void cpotrf_(
const char* uplo,
const int* n, std::complex<float>* a,
const int* lda,
int* info);
248void zpotrf_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
250void spotri_(
const char* uplo,
const int* n,
float* a,
const int* lda,
int* info);
251void dpotri_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
252void cpotri_(
const char* uplo,
const int* n, std::complex<float>* a,
const int* lda,
int* info);
253void zpotri_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
257void zgetrf_(
const int* m,
const int* n, std::complex<double>* a,
const int* lda,
258 int* ipiv,
int* info);
260void zgetri_(
const int* n, std::complex<double>* a,
const int* lda,
262 std::complex<double>* work,
const int* lwork,
268void dsterf_(
const int* n,
double* d,
double* e,
int* info);
270void dstein_(
const int* n,
const double* d,
const double* e,
271 const int* m,
const double* w,
272 const int* iblock,
const int* isplit,
273 double* z,
const int* ldz,
274 double* work,
int* iwork,
int* ifail,
277void zstein_(
const int* n,
const double* d,
const double* e,
278 const int* m,
const double* w,
279 const int* iblock,
const int* isplit,
280 std::complex<double>* z,
const int* ldz,
281 double* work,
int* iwork,
int* ifail,
286void dpotf2_(
const char* uplo,
const int* n,
double* a,
const int* lda,
int* info);
287void zpotf2_(
const char* uplo,
const int* n, std::complex<double>* a,
const int* lda,
int* info);
291void dgtsv_(
const int* n,
const int* nrhs,
292 double* dl,
double* d,
double* du,
293 double* b,
const int* ldb,
298void dsysv_(
const char* uplo,
const int* n,
const int* nrhs,
299 double* a,
const int* lda,
301 double* b,
const int* ldb,
302 double* work,
const int* lwork,
307#define zhegvx_ zhegvx_i
313 std::complex<double>* a,
315 std::complex<double>* b,
321 const double* abstol,
324 std::complex<double>* z,
326 std::complex<double>* work,
343 std::complex<double>* aux =
new std::complex<double>[lda*n];
344 for (
int i = 0; i < n; ++i)
346 for (
int j = 0; j < lda; ++j)
348 aux[i*lda+j] = a(j,i);
355 std::complex<float>* transpose(
const std::complex<float>* a,
const int n,
const int lda,
const int nbase_x)
357 std::complex<float>* aux =
new std::complex<float>[lda*n];
358 for (
int i = 0; i < n; ++i)
360 for (
int j = 0; j < lda; ++j)
362 aux[j * n + i] = a[i * nbase_x + j];
369 std::complex<double>* transpose(
const std::complex<double>* a,
const int n,
const int lda,
const int nbase_x)
371 std::complex<double>* aux =
new std::complex<double>[lda*n];
372 for (
int i = 0; i < n; ++i)
374 for (
int j = 0; j < lda; ++j)
376 aux[j * n + i] = a[i * nbase_x + j];
386 for (
int i = 0; i < n; ++i)
388 for (
int j = 0; j < lda; ++j)
390 a(j, i) = aux[i*lda+j];
397 void transpose(
const std::complex<float>* aux, std::complex<float>* 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 void transpose(
const std::complex<double>* aux, std::complex<double>* a,
const int n,
const int lda,
const int nbase_x)
412 for (
int i = 0; i < n; ++i)
414 for (
int j = 0; j < lda; ++j)
416 a[j * nbase_x + i] = aux[i * lda + j];
423 char change_uplo(
const char &uplo)
427 case 'U':
return 'L';
428 case 'L':
return 'U';
429 default:
throw std::invalid_argument(
"uplo must be 'U' or 'L'");
435 char change_trans_NC(
const char &trans)
439 case 'N':
return 'C';
440 case 'C':
return 'N';
441 default:
throw std::invalid_argument(
"trans must be 'N' or 'C'");
447 void zheev(
const char jobz,
453 std::complex< double >* work,
458 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
460 zheev_(&jobz, &uplo, &n, aux, &lda, w, work, &lwork, rwork, info);
462 LapackConnector::transpose(aux, a, n, lda);
470 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
471 zgetrf_( &m, &n, aux, &lda, ipiv, info);
472 LapackConnector::transpose(aux, a, n, lda);
479 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
480 zgetri_( &n, aux, &lda, ipiv, work, &lwork, info);
481 LapackConnector::transpose(aux, a, n, lda);
488 void potrf(
const char &uplo,
const int &n,
float*
const A,
const int &lda,
int &info )
490 const char uplo_changed = change_uplo(uplo);
491 spotrf_( &uplo_changed, &n, A, &lda, &info );
494 void potrf(
const char &uplo,
const int &n,
double*
const A,
const int &lda,
int &info )
496 const char uplo_changed = change_uplo(uplo);
497 dpotrf_( &uplo_changed, &n, A, &lda, &info );
500 void potrf(
const char &uplo,
const int &n, std::complex<float>*
const A,
const int &lda,
int &info )
502 const char uplo_changed = change_uplo(uplo);
503 cpotrf_( &uplo_changed, &n, A, &lda, &info );
506 void potrf(
const char &uplo,
const int &n, std::complex<double>*
const A,
const int &lda,
int &info )
508 const char uplo_changed = change_uplo(uplo);
509 zpotrf_( &uplo_changed, &n, A, &lda, &info );
515 void potri(
const char &uplo,
const int &n,
float*
const A,
const int &lda,
int &info )
517 const char uplo_changed = change_uplo(uplo);
518 spotri_( &uplo_changed, &n, A, &lda, &info);
521 void potri(
const char &uplo,
const int &n,
double*
const A,
const int &lda,
int &info )
523 const char uplo_changed = change_uplo(uplo);
524 dpotri_( &uplo_changed, &n, A, &lda, &info);
527 void potri(
const char &uplo,
const int &n, std::complex<float>*
const A,
const int &lda,
int &info )
529 const char uplo_changed = change_uplo(uplo);
530 cpotri_( &uplo_changed, &n, A, &lda, &info);
533 void potri(
const char &uplo,
const int &n, std::complex<double>*
const A,
const int &lda,
int &info )
535 const char uplo_changed = change_uplo(uplo);
536 zpotri_( &uplo_changed, &n, A, &lda, &info);
541 void potrf(
const char &uplo,
const int &n,
ModuleBase::matrix &A,
const int &lda,
int &info )
543 potrf( uplo, n, A.c, lda, info );
548 potrf( uplo, n, A.c, lda, info );
553 void potri(
const char &uplo,
const int &n,
ModuleBase::matrix &A,
const int &lda,
int &info )
555 potri( uplo, n, A.c, lda, info);
560 potri( uplo, n, A.c, lda, info);
567 void herk(
const char uplo,
const char trans,
const int n,
const int k,
568 const double alpha,
const std::complex<double> *A,
const int lda,
569 const double beta, std::complex<double> *C,
const int ldc)
571 const char uplo_changed = change_uplo(uplo);
572 const char trans_changed = change_trans_NC(trans);
573 zherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc);
576 void herk(
const char uplo,
const char trans,
const int n,
const int k,
577 const float alpha,
const std::complex<float>* A,
const int lda,
578 const float beta, std::complex<float>* C,
const int ldc)
580 const char uplo_changed = change_uplo(uplo);
581 const char trans_changed = change_trans_NC(trans);
582 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 ssyev_(const char *jobz, const char *uplo, const int *n, float *a, const int *lda, float *w, float *work, const int *lwork, 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:338