28template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
59 const int david_ndim_in,
60 const bool use_paw_in,
94 using HPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
110 using SPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
139 const std::vector<double>& ethr_band,
140 const int david_maxiter,
141 const int ntry_max = 5,
142 const int notconv_max = 0);
192 const std::vector<double>& ethr_band,
193 const int david_maxiter);
299 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:30
T * hcc
the Product of S and psi in the reduced basis set
Definition diago_david.h:174
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:1000
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:348
~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:969
const T zero_
Definition diago_david.h:349
const int nbase_x
maximum dimension of the reduced basis set
Definition diago_david.h:155
Real * eigenvalue
eigenvalue results
Definition diago_david.h:166
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:145
const T * zero
Definition diago_david.h:348
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:905
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:779
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:657
T * vcc
Hamiltonian on the reduced basis.
Definition diago_david.h:176
T * lagrange_matrix
eigenvectors of hc
Definition diago_david.h:178
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:170
const T neg_one_
Definition diago_david.h:349
T * spsi
the product of H and psi in the reduced basis set
Definition diago_david.h:172
Real * d_precondition
Definition diago_david.h:163
const int dim
dimension of the input matrix to be diagonalized
Definition diago_david.h:153
T * basis
Definition diago_david.h:168
const int david_ndim
dimension of the subspace allowed in Davidson
Definition diago_david.h:157
typename GetTypeReal< T >::type Real
Definition diago_david.h:35
const T * neg_one
Definition diago_david.h:348
int test_david
Definition diago_david.h:146
typename ct::PsiToContainer< Device >::type ct_Device
Definition diago_david.h:345
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:151
int notconv
number of unconverged eigenvalues
Definition diago_david.h:159
std::function< void(T *, T *, const int, const int)> SPsiFunc
A function type representing the SX function.
Definition diago_david.h:110
const T one_
Definition diago_david.h:349
base_device::DEVICE_CPU * cpu_ctx
Definition diago_david.h:182
Device * ctx
device type of psi
Definition diago_david.h:181
const Real * precondition
precondition for diag, diagonal approximation of matrix A(i.e. Hamilt)
Definition diago_david.h:162
base_device::AbacusDevice_t device
Definition diago_david.h:183
diag_comm_info diag_comm
Definition diago_david.h:148
std::function< void(T *, T *, const int, const int)> HPsiFunc
A function type representing the HX function.
Definition diago_david.h:94
#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:99
Definition memory_op.h:115
Definition memory_op.h:17
Definition memory_op.h:31
Definition memory_op.h:61
Definition tensor_types.h:113
Definition diag_comm_info.h:12