ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
lapack_connector.h
Go to the documentation of this file.
1#ifndef LAPACKCONNECTOR_HPP
2#define LAPACKCONNECTOR_HPP
3
4#include <new>
5#include <stdexcept>
6#include <iostream>
7#include <cassert>
8#include "../matrix.h"
9#include "../complexmatrix.h"
10#include "../global_function.h"
11
12//Naming convention of lapack subroutines : ammxxx, where
13//"a" specifies the data type:
14// - d stands for double
15// - z stands for complex double
16//"mm" specifies the type of matrix, for example:
17// - he stands for hermitian
18// - sy stands for symmetric
19//"xxx" specifies the type of problem, for example:
20// - gv stands for generalized eigenvalue
21
22extern "C"
23{
24// solve the generalized eigenproblem Ax=eBx, where A is Hermitian and complex couble
25 // zhegv_ & zhegvd_ returns all eigenvalues while zhegvx_ returns selected ones
26 void dsygvd_(const int* itype, const char* jobz, const char* uplo, const int* n,
27 double* a, const int* lda,
28 const double* b, const int* ldb, double* w,
29 double* work, int* lwork,
30 int* iwork, int* liwork, int* info);
31
32 void chegvd_(const int* itype, const char* jobz, const char* uplo, const int* n,
33 std::complex<float>* a, const int* lda,
34 const std::complex<float>* b, const int* ldb, float* w,
35 std::complex<float>* work, int* lwork, float* rwork, int* lrwork,
36 int* iwork, int* liwork, int* info);
37
38 void zhegvd_(const int* itype, const char* jobz, const char* uplo, const int* n,
39 std::complex<double>* a, const int* lda,
40 const std::complex<double>* b, const int* ldb, double* w,
41 std::complex<double>* work, int* lwork, double* rwork, int* lrwork,
42 int* iwork, int* liwork, int* info);
43
44 void dsyevx_(const char* jobz, const char* range, const char* uplo, const int* n,
45 double* a, const int* lda,
46 const double* vl, const double* vu, const int* il, const int* iu, const double* abstol,
47 const int* m, double* w, double* z, const int* ldz,
48 double* work, const int* lwork, double* rwork, int* iwork, int* ifail, int* info);
49
50 void cheevx_(const char* jobz, const char* range, const char* uplo, const int* n,
51 std::complex<float> *a, const int* lda,
52 const float* vl, const float* vu, const int* il, const int* iu, const float* abstol,
53 const int* m, float* w, std::complex<float> *z, const int *ldz,
54 std::complex<float> *work, const int* lwork, float* rwork, int* iwork, int* ifail, int* info);
55
56 void zheevx_(const char* jobz, const char* range, const char* uplo, const int* n,
57 std::complex<double> *a, const int* lda,
58 const double* vl, const double* vu, const int* il, const int* iu, const double* abstol,
59 const int* m, double* w, std::complex<double> *z, const int *ldz,
60 std::complex<double> *work, const int* lwork, double* rwork, int* iwork, int* ifail, int* info);
61
62
63 void dsygvx_(const int* itype, const char* jobz, const char* range, const char* uplo,
64 const int* n, double* A, const int* lda, double* B, const int* ldb,
65 const double* vl, const double* vu, const int* il, const int* iu,
66 const double* abstol, const int* m, double* w, double* Z, const int* ldz,
67 double* work, const int* lwork, int* iwork, int* ifail, int* info);
68
69 void chegvx_(const int* itype,const char* jobz,const char* range,const char* uplo,
70 const int* n,std::complex<float> *a,const int* lda,std::complex<float> *b,
71 const int* ldb,const float* vl,const float* vu,const int* il,
72 const int* iu,const float* abstol,const int* m,float* w,
73 std::complex<float> *z,const int *ldz,std::complex<float> *work,const int* lwork,
74 float* rwork,int* iwork,int* ifail,int* info);
75
76 void zhegvx_(const int* itype,const char* jobz,const char* range,const char* uplo,
77 const int* n,std::complex<double> *a,const int* lda,std::complex<double> *b,
78 const int* ldb,const double* vl,const double* vu,const int* il,
79 const int* iu,const double* abstol,const int* m,double* w,
80 std::complex<double> *z,const int *ldz,std::complex<double> *work,const int* lwork,
81 double* rwork,int* iwork,int* ifail,int* info);
82
83 void zhegv_(const int* itype,const char* jobz,const char* uplo,const int* n,
84 std::complex<double>* a,const int* lda,std::complex<double>* b,const int* ldb,
85 double* w,std::complex<double>* work,int* lwork,double* rwork,int* info);
86 void chegv_(const int* itype,const char* jobz,const char* uplo,const int* n,
87 std::complex<float>* a,const int* lda,std::complex<float>* b,const int* ldb,
88 float* w,std::complex<float>* work,int* lwork,float* rwork,int* info);
89 void dsygv_(const int* itype, const char* jobz,const char* uplo, const int* n,
90 double* a,const int* lda,double* b,const int* ldb,
91 double* w,double* work,int* lwork,int* info);
92
93 // solve the eigenproblem Ax=ex, where A is Hermitian and complex couble
94 // zheev_ returns all eigenvalues while zheevx_ returns selected ones
95 void zheev_(const char* jobz,const char* uplo,const int* n,std::complex<double> *a,
96 const int* lda,double* w,std::complex<double >* work,const int* lwork,
97 double* rwork,int* info);
98 void cheev_(const char* jobz,const char* uplo,const int* n,std::complex<float> *a,
99 const int* lda,float* w,std::complex<float >* work,const int* lwork,
100 float* rwork,int* info);
101 void dsyev_(const char* jobz,const char* uplo,const int* n,double *a,
102 const int* lda,double* w,double* work,const int* lwork, int* info);
103
104 // solve the eigenproblem Ax=ex, where A is a general matrix
105 void dgeev_(const char* jobvl, const char* jobvr, const int* n, double* a, const int* lda,
106 double* wr, double* wi, double* vl, const int* ldvl, double* vr, const int* ldvr,
107 double* work, const int* lwork, int* info);
108 void zgeev_(const char* jobvl, const char* jobvr, const int* n, std::complex<double>* a, const int* lda,
109 std::complex<double>* w, std::complex<double>* vl, const int* ldvl, std::complex<double>* vr, const int* ldvr,
110 std::complex<double>* work, const int* lwork, double* rwork, int* info);
111 // liuyu add 2023-10-03
112 // dgetri and dgetrf computes the inverse of a n*n real matrix
113 void dgetri_(const int* n, double* a, const int* lda, const int* ipiv, double* work, const int* lwork, int* info);
114 void dgetrf_(const int* m, const int* n, double* a, const int* lda, int* ipiv, int* info);
115
116 // dsytrf_ computes the Bunch-Kaufman factorization of a double precision
117 // symmetric matrix, while dsytri takes its output to perform martrix inversion
118 void dsytrf_(const char* uplo, const int* n, double * a, const int* lda,
119 int *ipiv,double *work, const int* lwork ,int *info);
120 void dsytri_(const char* uplo,const int* n,double *a, const int *lda,
121 int *ipiv, double * work,int *info);
122 // Peize Lin add dsptrf and dsptri 2016-06-21, to compute inverse real symmetry indefinit matrix.
123 // dpotrf computes the Cholesky factorization of a real symmetric positive definite matrix
124 // while dpotri taks its output to perform matrix inversion
125 void spotrf_(const char*const uplo, const int*const n, float*const A, const int*const lda, int*const info);
126 void dpotrf_(const char*const uplo, const int*const n, double*const A, const int*const lda, int*const info);
127 void cpotrf_(const char*const uplo, const int*const n, std::complex<float>*const A, const int*const lda, int*const info);
128 void zpotrf_(const char*const uplo, const int*const n, std::complex<double>*const A, const int*const lda, int*const info);
129 void spotri_(const char*const uplo, const int*const n, float*const A, const int*const lda, int*const info);
130 void dpotri_(const char*const uplo, const int*const n, double*const A, const int*const lda, int*const info);
131 void cpotri_(const char*const uplo, const int*const n, std::complex<float>*const A, const int*const lda, int*const info);
132 void zpotri_(const char*const uplo, const int*const n, std::complex<double>*const A, const int*const lda, int*const info);
133
134 // zgetrf computes the LU factorization of a general matrix
135 // while zgetri takes its output to perform matrix inversion
136 void zgetrf_(const int* m, const int *n, std::complex<double> *A, const int *lda, int *ipiv, int* info);
137 void zgetri_(const int* n, std::complex<double>* A, const int* lda, const int* ipiv, std::complex<double>* work, const int* lwork, int* info);
138
139 // if trans=='N': C = alpha * A * A.H + beta * C
140 // if trans=='C': C = alpha * A.H * A + beta * C
141 void zherk_(const char *uplo, const char *trans, const int *n, const int *k,
142 const double *alpha, const std::complex<double> *A, const int *lda,
143 const double *beta, std::complex<double> *C, const int *ldc);
144 void cherk_(const char* uplo, const char* trans, const int* n, const int* k,
145 const float* alpha, const std::complex<float>* A, const int* lda,
146 const float* beta, std::complex<float>* C, const int* ldc);
147
148 // computes all eigenvalues of a symmetric tridiagonal matrix
149 // using the Pal-Walker-Kahan variant of the QL or QR algorithm.
150 void dsterf_(int *n, double *d, double *e, int *info);
151 // computes the eigenvectors of a real symmetric tridiagonal
152 // matrix T corresponding to specified eigenvalues
153 void dstein_(int *n, double* d, double *e, int *m, double *w,
154 int* block, int* isplit, double* z, int *lda, double *work,
155 int* iwork, int* ifail, int *info);
156 // computes the eigenvectors of a complex symmetric tridiagonal
157 // matrix T corresponding to specified eigenvalues
158 void zstein_(int *n, double* d, double *e, int *m, double *w,
159 int* block, int* isplit, std::complex<double>* z, int *lda, double *work,
160 int* iwork, int* ifail, int *info);
161
162 // computes the Cholesky factorization of a symmetric
163 // positive definite matrix A.
164 void dpotf2_(char *uplo, int *n, double *a, int *lda, int *info);
165 void zpotf2_(char *uplo,int *n,std::complex<double> *a, int *lda, int *info);
166
167 // reduces a symmetric definite generalized eigenproblem to standard form
168 // using the factorization results obtained from spotrf
169 void dsygs2_(int *itype, char *uplo, int *n, double *a, int *lda, double *b, int *ldb, int *info);
170 void zhegs2_(int *itype, char *uplo, int *n, std::complex<double> *a, int *lda, std::complex<double> *b, int *ldb, int *info);
171
172 // copies a into b
173 void dlacpy_(char *uplo, int *m, int *n, double* a, int *lda, double *b, int *ldb);
174 void zlacpy_(char *uplo, int *m, int *n, std::complex<double>* a, int *lda, std::complex<double> *b, int *ldb);
175
176 // generates a real elementary reflector H of order n, such that
177 // H * ( alpha ) = ( beta ), H is unitary.
178 // ( x ) ( 0 )
179 void dlarfg_(int *n, double *alpha, double *x, int *incx, double *tau);
180 void zlarfg_(int *n, std::complex<double> *alpha, std::complex<double> *x, int *incx, std::complex<double> *tau);
181
182 // solve a tridiagonal linear system
183 void dgtsv_(int* N, int* NRHS, double* DL, double* D, double* DU, double* B, int* LDB, int* INFO);
184
185 // solve Ax = b
186 void dsysv_(const char* uplo, const int* n, const int* m, double * a, const int* lda,
187 int *ipiv, double * b, const int* ldb, double *work, const int* lwork ,int *info);
188}
189
190#ifdef GATHER_INFO
191#define zhegvx_ zhegvx_i
192void zhegvx_i(const int* itype,
193 const char* jobz,
194 const char* range,
195 const char* uplo,
196 const int* n,
197 std::complex<double>* a,
198 const int* lda,
199 std::complex<double>* b,
200 const int* ldb,
201 const double* vl,
202 const double* vu,
203 const int* il,
204 const int* iu,
205 const double* abstol,
206 const int* m,
207 double* w,
208 std::complex<double>* z,
209 const int* ldz,
210 std::complex<double>* work,
211 const int* lwork,
212 double* rwork,
213 int* iwork,
214 int* ifail,
215 int* info);
216#endif // GATHER_INFO
217
218// Class LapackConnector provide the connector to fortran lapack routine.
219// The entire function in this class are static and inline function.
220// Usage example: LapackConnector::functionname(parameter list).
222{
223private:
224 // Transpose the std::complex matrix to the fortran-form real-std::complex array.
225 static inline
226 std::complex<double>* transpose(const ModuleBase::ComplexMatrix& a, const int n, const int lda)
227 {
228 std::complex<double>* aux = new std::complex<double>[lda*n];
229 for (int i = 0; i < n; ++i)
230 {
231 for (int j = 0; j < lda; ++j)
232 {
233 aux[i*lda+j] = a(j,i); // aux[i*lda+j] means aux[i][j] in semantic, not in syntax!
234 }
235 }
236 return aux;
237 }
238
239 static inline
240 std::complex<float>* transpose(const std::complex<float>* a, const int n, const int lda, const int nbase_x)
241 {
242 std::complex<float>* aux = new std::complex<float>[lda*n];
243 for (int i = 0; i < n; ++i)
244 {
245 for (int j = 0; j < lda; ++j)
246 {
247 aux[j * n + i] = a[i * nbase_x + j];
248 }
249 }
250 return aux;
251 }
252
253 static inline
254 std::complex<double>* transpose(const std::complex<double>* a, const int n, const int lda, const int nbase_x)
255 {
256 std::complex<double>* aux = new std::complex<double>[lda*n];
257 for (int i = 0; i < n; ++i)
258 {
259 for (int j = 0; j < lda; ++j)
260 {
261 aux[j * n + i] = a[i * nbase_x + j];
262 }
263 }
264 return aux;
265 }
266
267 // Transpose the fortran-form real-std::complex array to the std::complex matrix.
268 static inline
269 void transpose(const std::complex<double>* aux, ModuleBase::ComplexMatrix& a, const int n, const int lda)
270 {
271 for (int i = 0; i < n; ++i)
272 {
273 for (int j = 0; j < lda; ++j)
274 {
275 a(j, i) = aux[i*lda+j]; // aux[i*lda+j] means aux[i][j] in semantic, not in syntax!
276 }
277 }
278 }
279
280 // Transpose the fortran-form real-std::complex array to the std::complex matrix.
281 static inline
282 void transpose(const std::complex<float>* aux, std::complex<float>* a, const int n, const int lda, const int nbase_x)
283 {
284 for (int i = 0; i < n; ++i)
285 {
286 for (int j = 0; j < lda; ++j)
287 {
288 a[j * nbase_x + i] = aux[i * lda + j]; // aux[i*lda+j] means aux[i][j] in semantic, not in syntax!
289 }
290 }
291 }
292
293 // Transpose the fortran-form real-std::complex array to the std::complex matrix.
294 static inline
295 void transpose(const std::complex<double>* aux, std::complex<double>* a, const int n, const int lda, const int nbase_x)
296 {
297 for (int i = 0; i < n; ++i)
298 {
299 for (int j = 0; j < lda; ++j)
300 {
301 a[j * nbase_x + i] = aux[i * lda + j]; // aux[i*lda+j] means aux[i][j] in semantic, not in syntax!
302 }
303 }
304 }
305
306 // Peize Lin add 2015-12-27
307 static inline
308 char change_uplo(const char &uplo)
309 {
310 switch(uplo)
311 {
312 case 'U': return 'L';
313 case 'L': return 'U';
314 default: throw std::invalid_argument("uplo must be 'U' or 'L'");
315 }
316 }
317
318 // Peize Lin add 2019-04-14
319 static inline
320 char change_trans_NC(const char &trans)
321 {
322 switch(trans)
323 {
324 case 'N': return 'C';
325 case 'C': return 'N';
326 default: throw std::invalid_argument("trans must be 'N' or 'C'");
327 }
328 }
329
330public:
331 // wrap function of fortran lapack routine zheev.
332 static inline
333 void zheev( const char jobz,
334 const char uplo,
335 const int n,
337 const int lda,
338 double* w,
339 std::complex< double >* work,
340 const int lwork,
341 double* rwork,
342 int *info )
343 { // Transpose the std::complex matrix to the fortran-form real-std::complex array.
344 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
345 // call the fortran routine
346 zheev_(&jobz, &uplo, &n, aux, &lda, w, work, &lwork, rwork, info);
347 // Transpose the fortran-form real-std::complex array to the std::complex matrix.
348 LapackConnector::transpose(aux, a, n, lda);
349 // free the memory.
350 delete[] aux;
351 }
352
353 static inline
354 void zgetrf(int m, int n, ModuleBase::ComplexMatrix &a, const int lda, int *ipiv, int *info)
355 {
356 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
357 zgetrf_( &m, &n, aux, &lda, ipiv, info);
358 LapackConnector::transpose(aux, a, n, lda);
359 delete[] aux;
360 return;
361 }
362 static inline
363 void zgetri(int n, ModuleBase::ComplexMatrix &a, int lda, int *ipiv, std::complex<double> * work, int lwork, int *info)
364 {
365 std::complex<double> *aux = LapackConnector::transpose(a, n, lda);
366 zgetri_( &n, aux, &lda, ipiv, work, &lwork, info);
367 LapackConnector::transpose(aux, a, n, lda);
368 delete[] aux;
369 return;
370 }
371
372 // Peize Lin add 2016-07-09
373 static inline
374 void potrf( const char &uplo, const int &n, float*const A, const int &lda, int &info )
375 {
376 const char uplo_changed = change_uplo(uplo);
377 spotrf_( &uplo_changed, &n, A, &lda, &info );
378 }
379 static inline
380 void potrf( const char &uplo, const int &n, double*const A, const int &lda, int &info )
381 {
382 const char uplo_changed = change_uplo(uplo);
383 dpotrf_( &uplo_changed, &n, A, &lda, &info );
384 }
385 static inline
386 void potrf( const char &uplo, const int &n, std::complex<float>*const A, const int &lda, int &info )
387 {
388 const char uplo_changed = change_uplo(uplo);
389 cpotrf_( &uplo_changed, &n, A, &lda, &info );
390 }
391 static inline
392 void potrf( const char &uplo, const int &n, std::complex<double>*const A, const int &lda, int &info )
393 {
394 const char uplo_changed = change_uplo(uplo);
395 zpotrf_( &uplo_changed, &n, A, &lda, &info );
396 }
397
398
399 // Peize Lin add 2016-07-09
400 static inline
401 void potri( const char &uplo, const int &n, float*const A, const int &lda, int &info )
402 {
403 const char uplo_changed = change_uplo(uplo);
404 spotri_( &uplo_changed, &n, A, &lda, &info);
405 }
406 static inline
407 void potri( const char &uplo, const int &n, double*const A, const int &lda, int &info )
408 {
409 const char uplo_changed = change_uplo(uplo);
410 dpotri_( &uplo_changed, &n, A, &lda, &info);
411 }
412 static inline
413 void potri( const char &uplo, const int &n, std::complex<float>*const A, const int &lda, int &info )
414 {
415 const char uplo_changed = change_uplo(uplo);
416 cpotri_( &uplo_changed, &n, A, &lda, &info);
417 }
418 static inline
419 void potri( const char &uplo, const int &n, std::complex<double>*const A, const int &lda, int &info )
420 {
421 const char uplo_changed = change_uplo(uplo);
422 zpotri_( &uplo_changed, &n, A, &lda, &info);
423 }
424
425 // Peize Lin add 2016-07-09
426 static inline
427 void potrf( const char &uplo, const int &n, ModuleBase::matrix &A, const int &lda, int &info )
428 {
429 potrf( uplo, n, A.c, lda, info );
430 }
431 static inline
432 void potrf( const char &uplo, const int &n, ModuleBase::ComplexMatrix &A, const int &lda, int &info )
433 {
434 potrf( uplo, n, A.c, lda, info );
435 }
436
437 // Peize Lin add 2016-07-09
438 static inline
439 void potri( const char &uplo, const int &n, ModuleBase::matrix &A, const int &lda, int &info )
440 {
441 potri( uplo, n, A.c, lda, info);
442 }
443 static inline
444 void potri( const char &uplo, const int &n, ModuleBase::ComplexMatrix &A, const int &lda, int &info )
445 {
446 potri( uplo, n, A.c, lda, info);
447 }
448
449 // Peize Lin add 2019-04-14
450 // if trans=='N': C = a * A * A.H + b * C
451 // if trans=='C': C = a * A.H * A + b * C
452 static inline
453 void herk(const char uplo, const char trans, const int n, const int k,
454 const double alpha, const std::complex<double> *A, const int lda,
455 const double beta, std::complex<double> *C, const int ldc)
456 {
457 const char uplo_changed = change_uplo(uplo);
458 const char trans_changed = change_trans_NC(trans);
459 zherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc);
460 }
461 static inline
462 void herk(const char uplo, const char trans, const int n, const int k,
463 const float alpha, const std::complex<float>* A, const int lda,
464 const float beta, std::complex<float>* C, const int ldc)
465 {
466 const char uplo_changed = change_uplo(uplo);
467 const char trans_changed = change_trans_NC(trans);
468 cherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc);
469 }
470};
471#endif // LAPACKCONNECTOR_HPP
Definition lapack_connector.h:222
static void potrf(const char &uplo, const int &n, double *const A, const int &lda, int &info)
Definition lapack_connector.h:380
static char change_trans_NC(const char &trans)
Definition lapack_connector.h:320
static void zgetri(int n, ModuleBase::ComplexMatrix &a, int lda, int *ipiv, std::complex< double > *work, int lwork, int *info)
Definition lapack_connector.h:363
static void transpose(const std::complex< float > *aux, std::complex< float > *a, const int n, const int lda, const int nbase_x)
Definition lapack_connector.h:282
static void herk(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 lapack_connector.h:453
static void potri(const char &uplo, const int &n, std::complex< float > *const A, const int &lda, int &info)
Definition lapack_connector.h:413
static void potri(const char &uplo, const int &n, double *const A, const int &lda, int &info)
Definition lapack_connector.h:407
static void potri(const char &uplo, const int &n, ModuleBase::matrix &A, const int &lda, int &info)
Definition lapack_connector.h:439
static std::complex< double > * transpose(const ModuleBase::ComplexMatrix &a, const int n, const int lda)
Definition lapack_connector.h:226
static void potri(const char &uplo, const int &n, ModuleBase::ComplexMatrix &A, const int &lda, int &info)
Definition lapack_connector.h:444
static std::complex< double > * transpose(const std::complex< double > *a, const int n, const int lda, const int nbase_x)
Definition lapack_connector.h:254
static void zgetrf(int m, int n, ModuleBase::ComplexMatrix &a, const int lda, int *ipiv, int *info)
Definition lapack_connector.h:354
static void transpose(const std::complex< double > *aux, std::complex< double > *a, const int n, const int lda, const int nbase_x)
Definition lapack_connector.h:295
static std::complex< float > * transpose(const std::complex< float > *a, const int n, const int lda, const int nbase_x)
Definition lapack_connector.h:240
static char change_uplo(const char &uplo)
Definition lapack_connector.h:308
static void potrf(const char &uplo, const int &n, float *const A, const int &lda, int &info)
Definition lapack_connector.h:374
static void potri(const char &uplo, const int &n, float *const A, const int &lda, int &info)
Definition lapack_connector.h:401
static void zheev(const char jobz, const char uplo, const int n, ModuleBase::ComplexMatrix &a, const int lda, double *w, std::complex< double > *work, const int lwork, double *rwork, int *info)
Definition lapack_connector.h:333
static void herk(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)
Definition lapack_connector.h:462
static void potrf(const char &uplo, const int &n, std::complex< double > *const A, const int &lda, int &info)
Definition lapack_connector.h:392
static void potrf(const char &uplo, const int &n, ModuleBase::matrix &A, const int &lda, int &info)
Definition lapack_connector.h:427
static void potri(const char &uplo, const int &n, std::complex< double > *const A, const int &lda, int &info)
Definition lapack_connector.h:419
static void potrf(const char &uplo, const int &n, ModuleBase::ComplexMatrix &A, const int &lda, int &info)
Definition lapack_connector.h:432
static void potrf(const char &uplo, const int &n, std::complex< float > *const A, const int &lda, int &info)
Definition lapack_connector.h:386
static void transpose(const std::complex< double > *aux, ModuleBase::ComplexMatrix &a, const int n, const int lda)
Definition lapack_connector.h:269
Definition complexmatrix.h:14
std::complex< double > * c
Definition complexmatrix.h:21
Definition matrix.h:19
double * c
Definition matrix.h:25
#define N
Definition exp.cpp:24
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, const 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 dpotrf_(const char *const uplo, const int *const n, double *const A, const int *const lda, int *const info)
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info)
void cpotri_(const char *const uplo, const int *const n, std::complex< float > *const A, const int *const lda, int *const info)
void zlacpy_(char *uplo, int *m, int *n, std::complex< double > *a, int *lda, std::complex< double > *b, int *ldb)
void zhegs2_(int *itype, char *uplo, int *n, std::complex< double > *a, int *lda, std::complex< double > *b, int *ldb, 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, const int *m, double *w, double *Z, const int *ldz, double *work, const int *lwork, int *iwork, int *ifail, int *info)
void spotrf_(const char *const uplo, const int *const n, float *const A, const int *const lda, int *const 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, const 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 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, const int *m, double *w, double *z, const int *ldz, double *work, const int *lwork, double *rwork, int *iwork, int *ifail, int *info)
void dlacpy_(char *uplo, int *m, int *n, double *a, int *lda, double *b, int *ldb)
void dsysv_(const char *uplo, const int *n, const int *m, double *a, const int *lda, int *ipiv, double *b, const int *ldb, double *work, const int *lwork, int *info)
void zpotrf_(const char *const uplo, const int *const n, std::complex< double > *const A, const int *const lda, int *const 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, int *lwork, float *rwork, int *info)
void zpotf2_(char *uplo, int *n, std::complex< double > *a, int *lda, 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 zhegvd_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, const std::complex< double > *b, const int *ldb, double *w, std::complex< double > *work, int *lwork, double *rwork, int *lrwork, int *iwork, int *liwork, int *info)
void dsygs2_(int *itype, char *uplo, int *n, double *a, int *lda, double *b, int *ldb, int *info)
void dgetri_(const int *n, double *a, const int *lda, const int *ipiv, double *work, const int *lwork, 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, const 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 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, int *lwork, double *rwork, int *info)
void dsytri_(const char *uplo, const int *n, double *a, const int *lda, int *ipiv, double *work, int *info)
void dsygvd_(const int *itype, const char *jobz, const char *uplo, const int *n, double *a, const int *lda, const double *b, const int *ldb, double *w, double *work, int *lwork, int *iwork, int *liwork, int *info)
void chegvd_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< float > *a, const int *lda, const std::complex< float > *b, const int *ldb, float *w, std::complex< float > *work, int *lwork, float *rwork, int *lrwork, int *iwork, int *liwork, int *info)
void zpotri_(const char *const uplo, const int *const n, std::complex< double > *const A, const int *const lda, int *const 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 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 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, int *lwork, int *info)
void dgtsv_(int *N, int *NRHS, double *DL, double *D, double *DU, double *B, int *LDB, int *INFO)
void dpotf2_(char *uplo, int *n, double *a, int *lda, int *info)
void zlarfg_(int *n, std::complex< double > *alpha, std::complex< double > *x, int *incx, std::complex< double > *tau)
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, const 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 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_(int *n, double *d, double *e, int *m, double *w, int *block, int *isplit, std::complex< double > *z, int *lda, double *work, int *iwork, int *ifail, int *info)
void dpotri_(const char *const uplo, const int *const n, double *const A, const int *const lda, int *const info)
void dlarfg_(int *n, double *alpha, double *x, int *incx, double *tau)
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, const 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 dstein_(int *n, double *d, double *e, int *m, double *w, int *block, int *isplit, double *z, int *lda, 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 cpotrf_(const char *const uplo, const int *const n, std::complex< float > *const A, const int *const lda, int *const info)
void zgetrf_(const int *m, const int *n, std::complex< double > *A, const int *lda, int *ipiv, int *info)
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)
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 *const uplo, const int *const n, float *const A, const int *const lda, int *const info)
void dsterf_(int *n, double *d, double *e, 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)