ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
elpa_solver.h
Go to the documentation of this file.
1#pragma once
2#include "mpi.h"
3
4#include <complex>
5#include <fstream>
6#include <vector>
7
9{
10 public:
11 ELPA_Solver(const bool isReal,
12 const MPI_Comm comm,
13 const int nev,
14 const int narows,
15 const int nacols,
16 const int* desc,
17 const bool reuse_handle_0 = true);
18 ELPA_Solver(const bool isReal,
19 const MPI_Comm comm,
20 const int nev,
21 const int narows,
22 const int nacols,
23 const int* desc,
24 const int* otherParameter);
25
26 int eigenvector(double* A, double* EigenValue, double* EigenVector);
27 int generalized_eigenvector(double* A, double* B, int& DecomposedState, double* EigenValue, double* EigenVector);
28 int eigenvector(std::complex<double>* A, double* EigenValue, std::complex<double>* EigenVector);
29 int generalized_eigenvector(std::complex<double>* A,
30 std::complex<double>* B,
31 int& DecomposedState,
32 double* EigenValue,
33 std::complex<double>* EigenVector);
34 void setLoglevel(int loglevel);
35 void setKernel(bool isReal, int Kernel);
36 void setQR(int useQR);
37 void outputParameters();
38 void verify(double* A, double* EigenValue, double* EigenVector, double& maxRemain, double& meanRemain);
39 void verify(double* A, double* B, double* EigenValue, double* EigenVector, double& maxRemain, double& meanRemain);
40 void verify(std::complex<double>* A,
41 double* EigenValue,
42 std::complex<double>* EigenVector,
43 double& maxError,
44 double& meanError);
45 void verify(std::complex<double>* A,
46 std::complex<double>* B,
47 double* EigenValue,
48 std::complex<double>* EigenVector,
49 double& maxError,
50 double& meanError);
51 void exit();
52
53 private:
54 const int CHOLESKY_CRITICAL_SIZE = 1000;
55 bool isReal;
56 MPI_Comm comm;
57 int nFull;
58 int nev;
59 int narows;
60 int nacols;
61 int desc[9];
62 int method;
65 int nblk;
66 int lda;
67 std::vector<double> dwork;
68 std::vector<std::complex<double>> zwork;
69 int myid;
70 int nprows;
71 int npcols;
72 int myprow;
73 int mypcol;
74 int useQR;
77 std::ofstream logfile;
78 // for legacy interface
79 int comm_f;
82 // for new elpa handle
84
85 // toolbox
86 int read_cpuflag();
87 int read_real_kernel();
89 int allocate_work();
90 int decomposeRightMatrix(double* B, double* EigenValue, double* EigenVector, int& DecomposedState);
91 int decomposeRightMatrix(std::complex<double>* B,
92 double* EigenValue,
93 std::complex<double>* EigenVector,
94 int& DecomposedState);
95 int composeEigenVector(int DecomposedState, double* B, double* EigenVector);
96 int composeEigenVector(int DecomposedState, std::complex<double>* B, std::complex<double>* EigenVector);
97 // debug tool
98 void timer(int myid, const char function[], const char step[], double& t0);
99};
Definition elpa_solver.h:9
int generalized_eigenvector(double *A, double *B, int &DecomposedState, double *EigenValue, double *EigenVector)
Definition elpa_new_real.cpp:37
int narows
Definition elpa_solver.h:59
const int CHOLESKY_CRITICAL_SIZE
Definition elpa_solver.h:54
int mpi_comm_rows
Definition elpa_solver.h:80
int eigenvector(double *A, double *EigenValue, double *EigenVector)
Definition elpa_new_real.cpp:19
void setLoglevel(int loglevel)
Definition elpa_new.cpp:177
int cblacs_ctxt
Definition elpa_solver.h:64
int useQR
Definition elpa_solver.h:74
int wantDebug
Definition elpa_solver.h:75
std::vector< double > dwork
Definition elpa_solver.h:67
MPI_Comm comm
Definition elpa_solver.h:56
int kernel_id
Definition elpa_solver.h:63
int desc[9]
Definition elpa_solver.h:61
int allocate_work()
Definition elpa_new.cpp:454
int nacols
Definition elpa_solver.h:60
void timer(int myid, const char function[], const char step[], double &t0)
Definition elpa_new.cpp:468
void exit()
Definition elpa_new.cpp:221
int method
Definition elpa_solver.h:62
int mpi_comm_cols
Definition elpa_solver.h:81
int comm_f
Definition elpa_solver.h:79
void setQR(int useQR)
Definition elpa_new.cpp:214
int composeEigenVector(int DecomposedState, double *B, double *EigenVector)
Definition elpa_new_real.cpp:334
int myprow
Definition elpa_solver.h:72
int nFull
Definition elpa_solver.h:57
int decomposeRightMatrix(double *B, double *EigenValue, double *EigenVector, int &DecomposedState)
Definition elpa_new_real.cpp:171
int nev
Definition elpa_solver.h:58
void outputParameters()
Definition elpa_new.cpp:486
void setKernel(bool isReal, int Kernel)
Definition elpa_new.cpp:204
int lda
Definition elpa_solver.h:66
std::vector< std::complex< double > > zwork
Definition elpa_solver.h:68
int npcols
Definition elpa_solver.h:71
int read_real_kernel()
Definition elpa_new.cpp:271
int mypcol
Definition elpa_solver.h:73
std::ofstream logfile
Definition elpa_solver.h:77
int read_complex_kernel()
Definition elpa_new.cpp:377
int myid
Definition elpa_solver.h:69
void verify(double *A, double *EigenValue, double *EigenVector, double &maxRemain, double &meanRemain)
Definition elpa_new_real.cpp:374
int nblk
Definition elpa_solver.h:65
int nprows
Definition elpa_solver.h:70
bool isReal
Definition elpa_solver.h:55
int read_cpuflag()
Definition elpa_new.cpp:232
int handle_id
Definition elpa_solver.h:83
int loglevel
Definition elpa_solver.h:76
Definition kernel.h:7