22
22
extern " C"
23
23
{
24
24
25
+ int ilaenv_ (int * ispec,const char * name,const char * opts,
26
+ const int * n1,const int * n2,const int * n3,const int * n4);
27
+
25
28
// solve the generalized eigenproblem Ax=eBx, where A is Hermitian and complex couble
26
29
// zhegv_ & zhegvd_ returns all eigenvalues while zhegvx_ returns selected ones
27
30
void dsygvd_ (const int * itype, const char * jobz, const char * uplo, const int * n,
@@ -60,9 +63,12 @@ extern "C"
60
63
const int * m, double * w, std::complex<double > *z, const int *ldz,
61
64
std::complex<double > *work, const int * lwork, double * rwork, int * iwork, int * ifail, int * info);
62
65
63
- void zhegv_ (const int * itype,const char * jobz,const char * uplo,const int * n,
64
- std::complex<double >* a,const int * lda,std::complex<double >* b,const int * ldb,
65
- double * w,std::complex<double >* work,int * lwork,double * rwork,int * info);
66
+
67
+ void dsygvx_ (const int * itype, const char * jobz, const char * range, const char * uplo,
68
+ const int * n, double * A, const int * lda, double * B, const int * ldb,
69
+ const double * vl, const double * vu, const int * il, const int * iu,
70
+ const double * abstol, const int * m, double * w, double * Z, const int * ldz,
71
+ double * work, int * lwork, int *iwork, int * ifail, int * info);
66
72
67
73
void chegvx_ (const int * itype,const char * jobz,const char * range,const char * uplo,
68
74
const int * n,std::complex<float > *a,const int * lda,std::complex<float > *b,
@@ -78,6 +84,16 @@ extern "C"
78
84
std::complex<double > *z,const int *ldz,std::complex<double > *work,const int * lwork,
79
85
double * rwork,int * iwork,int * ifail,int * info);
80
86
87
+ void zhegv_ (const int * itype,const char * jobz,const char * uplo,const int * n,
88
+ std::complex<double >* a,const int * lda,std::complex<double >* b,const int * ldb,
89
+ double * w,std::complex<double >* work,int * lwork,double * rwork,int * info);
90
+ void chegv_ (const int * itype,const char * jobz,const char * uplo,const int * n,
91
+ std::complex<float >* a,const int * lda,std::complex<float >* b,const int * ldb,
92
+ float * w,std::complex<float >* work,int * lwork,float * rwork,int * info);
93
+ void dsygv_ (const int * itype, const char * jobz,const char * uplo, const int * n,
94
+ double * a,const int * lda,double * b,const int * ldb,
95
+ double * w,double * work,int * lwork,int * info);
96
+
81
97
// solve the eigenproblem Ax=ex, where A is Hermitian and complex couble
82
98
// zheev_ returns all eigenvalues while zheevx_ returns selected ones
83
99
void zheev_ (const char * jobz,const char * uplo,const int * n,std::complex<double > *a,
@@ -86,18 +102,6 @@ extern "C"
86
102
void cheev_ (const char * jobz,const char * uplo,const int * n,std::complex<float > *a,
87
103
const int * lda,float * w,std::complex<float >* work,const int * lwork,
88
104
float * rwork,int * info);
89
-
90
- // solve the generalized eigenproblem Ax=eBx, where A is Symmetric and real couble
91
- // dsygv_ returns all eigenvalues while dsygvx_ returns selected ones
92
- void dsygv_ (const int * itype, const char * jobz,const char * uplo, const int * n,
93
- double * a,const int * lda,double * b,const int * ldb,
94
- double * w,double * work,int * lwork,int * info);
95
- void dsygvx_ (const int * itype, const char * jobz, const char * range, const char * uplo,
96
- const int * n, double * A, const int * lda, double * B, const int * ldb,
97
- const double * vl, const double * vu, const int * il, const int * iu,
98
- const double * abstol, int * m, double * w, double * Z, const int * ldz,
99
- double * work, int * lwork, int *iwork, int * ifail, int * info);
100
- // solve the eigenproblem Ax=ex, where A is Symmetric and real double
101
105
void dsyev_ (const char * jobz,const char * uplo,const int * n,double *a,
102
106
const int * lda,double * w,double * work,const int * lwork, int * info);
103
107
@@ -314,23 +318,19 @@ class LapackConnector
314
318
}
315
319
316
320
public:
317
- // wrap function of fortran lapack routine zhegvd.
318
321
static inline
319
- void zhegvd (const int itype, const char jobz, const char uplo, const int n,
320
- std::complex<double >* a, const int lda,
321
- const std::complex<double >* b, const int ldb, double * w,
322
- std::complex<double >* work, int lwork, double * rwork, int lrwork,
323
- int * iwork, int liwork, int & info)
322
+ int ilaenv ( int ispec, const char *name,const char *opts,const int n1,const int n2,
323
+ const int n3,const int n4)
324
324
{
325
- zhegvd_ (&itype, &jobz, &uplo, &n,
326
- a, &lda, b, &ldb, w,
327
- work, &lwork, rwork, &lrwork,
328
- iwork, &liwork, &info);
325
+ const int nb = ilaenv_ (&ispec, name, opts, &n1, &n2, &n3, &n4);
326
+ return nb;
329
327
}
330
328
329
+
330
+
331
331
// wrap function of fortran lapack routine zhegvd. (pointer version)
332
332
static inline
333
- void xhegvd (const int itype, const char jobz, const char uplo, const int n,
333
+ void xhegvd (const int itype, const char jobz, const char uplo, const int n,
334
334
double * a, const int lda,
335
335
const double * b, const int ldb, double * w,
336
336
double * work, int lwork, double * rwork, int lrwork,
@@ -373,23 +373,9 @@ class LapackConnector
373
373
iwork, &liwork, &info);
374
374
}
375
375
376
- // wrap function of fortran lapack routine zheevx.
377
- static inline
378
- void zheevx ( const int itype, const char jobz, const char range, const char uplo, const int n,
379
- std::complex<double >* a, const int lda,
380
- const double vl, const double vu, const int il, const int iu, const double abstol,
381
- const int m, double * w, std::complex<double >* z, const int ldz,
382
- std::complex<double >* work, const int lwork, double * rwork, int * iwork, int * ifail, int & info)
383
- {
384
- zheevx_ (&jobz, &range, &uplo, &n,
385
- a, &lda, &vl, &vu, &il, &iu,
386
- &abstol, &m, w, z, &ldz,
387
- work, &lwork, rwork, iwork, ifail, &info);
388
- }
389
-
390
376
// wrap function of fortran lapack routine dsyevx.
391
377
static inline
392
- void xheevx (const int itype, const char jobz, const char range, const char uplo, const int n,
378
+ void xheevx (const int itype, const char jobz, const char range, const char uplo, const int n,
393
379
double * a, const int lda,
394
380
const double vl, const double vu, const int il, const int iu, const double abstol,
395
381
const int m, double * w, double * z, const int ldz,
@@ -428,6 +414,98 @@ class LapackConnector
428
414
&abstol, &m, w, z, &ldz,
429
415
work, &lwork, rwork, iwork, ifail, &info);
430
416
}
417
+
418
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
419
+ static inline
420
+ void xhegvx ( const int itype, const char jobz, const char range, const char uplo,
421
+ const int n, std::complex<float >* a, const int lda, std::complex<float >* b,
422
+ const int ldb, const float vl, const float vu, const int il, const int iu,
423
+ const float abstol, const int m, float * w, std::complex<float >* z, const int ldz,
424
+ std::complex<float >* work, const int lwork, float * rwork, int * iwork,
425
+ int * ifail, int & info)
426
+ {
427
+ chegvx_ (&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, &vl,
428
+ &vu, &il,&iu, &abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, ifail, &info);
429
+ }
430
+
431
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
432
+ static inline
433
+ void xhegvx ( const int itype, const char jobz, const char range, const char uplo,
434
+ const int n, std::complex<double >* a, const int lda, std::complex<double >* b,
435
+ const int ldb, const double vl, const double vu, const int il, const int iu,
436
+ const double abstol, const int m, double * w, std::complex<double >* z, const int ldz,
437
+ std::complex<double >* work, const int lwork, double * rwork, int * iwork,
438
+ int * ifail, int & info)
439
+ {
440
+ zhegvx_ (&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, &vl,
441
+ &vu, &il,&iu, &abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, ifail, &info);
442
+ }
443
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
444
+ static inline
445
+ void xhegvx ( const int itype, const char jobz, const char range, const char uplo,
446
+ const int n, double * a, const int lda, double * b,
447
+ const int ldb, const double vl, const double vu, const int il, const int iu,
448
+ const double abstol, const int m, double * w, double * z, const int ldz,
449
+ double * work, const int lwork, double * rwork, int * iwork,
450
+ int * ifail, int & info)
451
+ {
452
+ // dsygvx_(&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, &vl,
453
+ // &vu, &il,&iu, &abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, ifail, &info);
454
+ }
455
+
456
+
457
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
458
+ static inline
459
+ void xhegv ( const int itype, const char jobz, const char uplo,
460
+ const int n,
461
+ double * a, const int lda,
462
+ double * b, const int ldb,
463
+ double * w,
464
+ double * work, int lwork,
465
+ double * rwork, int & info)
466
+ {
467
+ // TODO
468
+ }
469
+
470
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
471
+ static inline
472
+ void xhegv ( const int itype, const char jobz, const char uplo,
473
+ const int n,
474
+ std::complex<float >* a, const int lda,
475
+ std::complex<float >* b, const int ldb,
476
+ float * w,
477
+ std::complex<float >* work, int lwork,
478
+ float * rwork, int & info)
479
+ {
480
+ // TODO
481
+ }
482
+ // wrap function of fortran lapack routine xhegvx ( pointer version ).
483
+ static inline
484
+ void xhegv ( const int itype, const char jobz, const char uplo,
485
+ const int n,
486
+ std::complex<double >* a, const int lda,
487
+ std::complex<double >* b, const int ldb,
488
+ double * w,
489
+ std::complex<double >* work, int lwork,
490
+ double * rwork, int & info)
491
+ {
492
+ zhegv_ (&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, rwork, &info);
493
+ }
494
+
495
+
496
+ // wrap function of fortran lapack routine zhegvd.
497
+ static inline
498
+ void zhegvd (const int itype, const char jobz, const char uplo, const int n,
499
+ std::complex<double >* a, const int lda,
500
+ const std::complex<double >* b, const int ldb, double * w,
501
+ std::complex<double >* work, int lwork, double * rwork, int lrwork,
502
+ int * iwork, int liwork, int & info)
503
+ {
504
+ zhegvd_ (&itype, &jobz, &uplo, &n,
505
+ a, &lda, b, &ldb, w,
506
+ work, &lwork, rwork, &lrwork,
507
+ iwork, &liwork, &info);
508
+ }
431
509
432
510
// wrap function of fortran lapack routine zhegv ( ModuleBase::ComplexMatrix version ).
433
511
static inline
@@ -543,30 +621,6 @@ class LapackConnector
543
621
delete[] zux;
544
622
}
545
623
546
- // wrap function of fortran lapack routine xhegvx ( pointer version ).
547
- static inline
548
- void xhegvx ( const int itype, const char jobz, const char range, const char uplo,
549
- const int n, const std::complex<float >* a, const int lda, const std::complex<float >* b,
550
- const int ldb, const float vl, const float vu, const int il, const int iu,
551
- const float abstol, const int m, float * w, std::complex<float >* z, const int ldz,
552
- std::complex<float >* work, const int lwork, float * rwork, int * iwork,
553
- int * ifail, int & info, int nbase_x)
554
- {
555
- chegvx (itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info, nbase_x);
556
- }
557
-
558
- // wrap function of fortran lapack routine xhegvx ( pointer version ).
559
- static inline
560
- void xhegvx ( const int itype, const char jobz, const char range, const char uplo,
561
- const int n, const std::complex<double >* a, const int lda, const std::complex<double >* b,
562
- const int ldb, const double vl, const double vu, const int il, const int iu,
563
- const double abstol, const int m, double * w, std::complex<double >* z, const int ldz,
564
- std::complex<double >* work, const int lwork, double * rwork, int * iwork,
565
- int * ifail, int & info, int nbase_x)
566
- {
567
- zhegvx (itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info, nbase_x);
568
- }
569
-
570
624
// calculate the eigenvalues and eigenfunctions of a real symmetric matrix.
571
625
static inline
572
626
void dsygv ( const int itype,const char jobz,const char uplo,const int n,ModuleBase::matrix& a,
0 commit comments