18template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
31 const int& david_ndim_in,
32 const double& diag_thr_in,
33 const int& diag_nmax_in,
35 const int diago_dav_method_in,
36 const int block_size_in);
41 using HPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
46 const int psi_in_dmax,
48 const std::vector<double>& ethr_band,
49 const bool& scf_type);
112 std::vector<Real>* eigenvalue_iter);
126 const Real* eigenvalue,
147 std::vector<Real>* eigenvalue_iter,
153 const int psi_in_dmax,
155 const std::vector<double>& ethr_band);
172 using resmem_real_op = base_device::memory::resize_memory_op_mt<Real, Device>;
173 using delmem_real_op = base_device::memory::delete_memory_op_mt<Real, Device>;
Definition diago_dav_subspace.h:20
void cal_elem(const int &dim, int &nbase, const int ¬conv, const T *psi_iter, const T *spsi, const T *hpsi, T *hcc, T *scc)
Definition diago_dav_subspace.cpp:490
const T zero_
Definition diago_dav_subspace.h:198
const T neg_one_
Definition diago_dav_subspace.h:198
base_device::AbacusDevice_t device
Definition diago_dav_subspace.h:100
std::function< void(T *, T *, const int, const int)> HPsiFunc
Definition diago_dav_subspace.h:41
const double diag_thr
the threshold for this electronic iteration
Definition diago_dav_subspace.h:56
Real * d_precondition
Definition diago_dav_subspace.h:72
void cal_grad(const HPsiFunc &hpsi_func, const HPsiFunc &spsi_func, const int &dim, const int &nbase, const int ¬conv, T *psi_iter, T *hpsi, T *spsi, T *vcc, const int *unconv, std::vector< Real > *eigenvalue_iter)
Definition diago_dav_subspace.cpp:277
int diag_once(const HPsiFunc &hpsi_func, const HPsiFunc &spsi_func, T *psi_in, const int psi_in_dmax, Real *eigenvalue_in, const std::vector< double > ðr_band)
Definition diago_dav_subspace.cpp:111
const diag_comm_info diag_comm
for MPI communication
Definition diago_dav_subspace.h:53
const int n_band
the first dimension of the matrix to be diagonalized
Definition diago_dav_subspace.h:62
~Diago_DavSubspace()
Definition diago_dav_subspace.cpp:90
T * hpsi
the product of H and psi in the reduced basis set
Definition diago_dav_subspace.h:80
T * vcc
Eigenvectors on the reduced basis.
Definition diago_dav_subspace.h:92
T * psi_in_iter
Definition diago_dav_subspace.h:77
typename GetTypeReal< T >::type Real
Definition diago_dav_subspace.h:25
const T * zero
Definition diago_dav_subspace.h:197
Real * d_eigenvalue
Definition diago_dav_subspace.h:95
const T * one
Definition diago_dav_subspace.h:197
const int nbase_x
the maximum dimension of the reduced basis set
Definition diago_dav_subspace.h:68
const std::vector< Real > & precondition
precondition for diag
Definition diago_dav_subspace.h:71
T * hcc
Hamiltonian on the reduced basis.
Definition diago_dav_subspace.h:86
void refresh(const int &dim, const int &nband, int &nbase, const Real *eigenvalue, T *psi_iter, T *hpsi, T *spsi, T *hcc, T *scc, T *vcc)
Definition diago_dav_subspace.cpp:731
typename ct::PsiToContainer< Device >::type ct_Device
Definition diago_dav_subspace.h:194
int diag(const HPsiFunc &hpsi_func, const HPsiFunc &spsi_func, T *psi_in, const int psi_in_dmax, Real *eigenvalue_in, const std::vector< double > ðr_band, const bool &scf_type)
Definition diago_dav_subspace.cpp:815
T * scc
Overlap on the reduced basis.
Definition diago_dav_subspace.h:89
T * d_scc
Definition diago_dav_subspace.h:94
base_device::DEVICE_CPU * cpu_ctx
Definition diago_dav_subspace.h:99
T * spsi
the product of S and psi in the reduced basis set
Definition diago_dav_subspace.h:83
Device * ctx
device type of psi
Definition diago_dav_subspace.h:98
const T * neg_one
Definition diago_dav_subspace.h:197
int diago_subspace_bs
Definition diago_dav_subspace.h:160
int notconv
record for how many bands not have convergence eigenvalues
Definition diago_dav_subspace.h:75
int diag_subspace
Definition diago_dav_subspace.h:159
const T one_
Definition diago_dav_subspace.h:198
bool test_exit_cond(const int &ntry, const int ¬conv, const bool &scf)
Definition diago_dav_subspace.cpp:848
void diag_zhegvx(const int &nbase, const int &nband, T *hcc, T *scc, const int &nbase_x, std::vector< Real > *eigenvalue_iter, T *vcc)
Definition diago_dav_subspace.cpp:602
const int iter_nmax
maximal iteration number
Definition diago_dav_subspace.h:59
const int dim
the second dimension of the matrix to be diagonalized
Definition diago_dav_subspace.h:65
#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:45
Definition memory_op.h:31
Definition memory_op.h:77
Definition memory_op.h:61
Definition tensor_types.h:113
Definition diag_comm_info.h:12