25template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
56 const int david_ndim_in,
57 const bool use_paw_in,
91 using HPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
107 using SPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
136 const std::vector<double>& ethr_band,
137 const int david_maxiter,
138 const int ntry_max = 5,
139 const int notconv_max = 0);
189 const std::vector<double>& ethr_band,
190 const int david_maxiter);
296 void planSchmidtOrth(
const int nband, std::vector<int>& pre_matrix_mm_m, std::vector<int>& pre_matrix_mv_m);
A class that implements the block-Davidson algorithm for solving generalized eigenvalue problems.
Definition diago_david.h:27
T * hcc
the Product of S and psi in the reduced basis set
Definition diago_david.h:171
bool check_block_conv(const int &ntry, const int ¬conv, const int &ntry_max, const int ¬conv_max)
Check the convergence of block eigenvectors in the Davidson iteration.
Definition diago_david.cpp:998
void cal_grad(const HPsiFunc &hpsi_func, const SPsiFunc &spsi_func, const int &dim, const int &nbase, const int nbase_x, const int ¬conv, T *hpsi, T *spsi, const T *vcc, const int *unconv, const Real *eigenvalue)
Definition diago_david.cpp:295
const T * one
Definition diago_david.h:343
~DiagoDavid()
Destructor for the DiagoDavid class.
Definition diago_david.cpp:99
int diag(const HPsiFunc &hpsi_func, const SPsiFunc &spsi_func, const int ld_psi, T *psi_in, Real *eigenvalue_in, const std::vector< double > ðr_band, const int david_maxiter, const int ntry_max=5, const int notconv_max=0)
Performs iterative diagonalization using the David algorithm.
Definition diago_david.cpp:967
const T zero_
Definition diago_david.h:344
const int nbase_x
maximum dimension of the reduced basis set
Definition diago_david.h:152
Real * eigenvalue
eigenvalue results
Definition diago_david.h:163
int diag_once(const HPsiFunc &hpsi_func, const SPsiFunc &spsi_func, const int dim, const int nband, const int ld_psi, T *psi_in, Real *eigenvalue_in, const std::vector< double > ðr_band, const int david_maxiter)
Definition diago_david.cpp:118
bool use_paw
Definition diago_david.h:142
const T * zero
Definition diago_david.h:343
void planSchmidtOrth(const int nband, std::vector< int > &pre_matrix_mm_m, std::vector< int > &pre_matrix_mv_m)
Plans the Schmidt orthogonalization for a given number of bands.
Definition diago_david.cpp:903
void SchmidtOrth(const int &dim, const int nband, const int m, const T *spsi, T *lagrange_m, const int mm_size, const int mv_size)
Definition diago_david.cpp:777
void refresh(const int &dim, const int &nband, int &nbase, const int nbase_x, const Real *eigenvalue, const T *psi_in, const int ld_psi, T *hpsi, T *spsi, T *hcc, T *vcc)
Definition diago_david.cpp:655
T * vcc
Hamiltonian on the reduced basis.
Definition diago_david.h:173
T * lagrange_matrix
eigenvectors of hc
Definition diago_david.h:175
void diag_zhegvx(const int &nbase, const int &nband, const T *hcc, const int &nbase_x, Real *eigenvalue, T *vcc)
Definition diago_david.cpp:606
T * hpsi
pointer to basis set(dim, nbase_x), leading dimension = dim
Definition diago_david.h:167
const T neg_one_
Definition diago_david.h:344
T * spsi
the product of H and psi in the reduced basis set
Definition diago_david.h:169
Real * d_precondition
Definition diago_david.h:160
const int dim
dimension of the input matrix to be diagonalized
Definition diago_david.h:150
T * basis
Definition diago_david.h:165
const int david_ndim
dimension of the subspace allowed in Davidson
Definition diago_david.h:154
typename GetTypeReal< T >::type Real
Definition diago_david.h:32
const T * neg_one
Definition diago_david.h:343
int test_david
Definition diago_david.h:143
void cal_elem(const int &dim, int &nbase, const int nbase_x, const int ¬conv, const T *hpsi, const T *spsi, T *hcc)
Definition diago_david.cpp:527
const int nband
number of required eigenpairs
Definition diago_david.h:148
int notconv
number of unconverged eigenvalues
Definition diago_david.h:156
std::function< void(T *, T *, const int, const int)> SPsiFunc
A function type representing the SX function.
Definition diago_david.h:107
const T one_
Definition diago_david.h:344
base_device::DEVICE_CPU * cpu_ctx
Definition diago_david.h:179
Device * ctx
device type of psi
Definition diago_david.h:178
const Real * precondition
precondition for diag, diagonal approximation of matrix A(i.e. Hamilt)
Definition diago_david.h:159
base_device::AbacusDevice_t device
Definition diago_david.h:180
diag_comm_info diag_comm
Definition diago_david.h:145
std::function< void(T *, T *, const int, const int)> HPsiFunc
A function type representing the HX function.
Definition diago_david.h:91
#define T
Definition exp.cpp:237
AbacusDevice_t
Definition types.h:12
Definition diag_comm_info.h:9
T type
Definition macros.h:8
Definition memory_op.h:61
Definition memory_op.h:77
Definition memory_op.h:17
Definition memory_op.h:31
Definition memory_op.h:45
Definition diag_comm_info.h:12