19template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
32 const int& david_ndim_in,
33 const double& diag_thr_in,
34 const int& diag_nmax_in,
36 const int diago_dav_method_in,
37 const int block_size_in);
42 using HPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
47 const int psi_in_dmax,
49 const std::vector<double>& ethr_band,
50 const bool& scf_type);
113 std::vector<Real>* eigenvalue_iter);
127 const Real* eigenvalue,
148 std::vector<Real>* eigenvalue_iter,
154 const int psi_in_dmax,
156 const std::vector<double>& ethr_band);
173 using resmem_real_op = base_device::memory::resize_memory_op_mt<Real, Device>;
174 using delmem_real_op = base_device::memory::delete_memory_op_mt<Real, Device>;
Definition diago_dav_subspace.h:21
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:405
const T zero_
Definition diago_dav_subspace.h:199
const T neg_one_
Definition diago_dav_subspace.h:199
base_device::AbacusDevice_t device
Definition diago_dav_subspace.h:101
std::function< void(T *, T *, const int, const int)> HPsiFunc
Definition diago_dav_subspace.h:42
const double diag_thr
the threshold for this electronic iteration
Definition diago_dav_subspace.h:57
Real * d_precondition
Definition diago_dav_subspace.h:73
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:275
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:109
const diag_comm_info diag_comm
for MPI communication
Definition diago_dav_subspace.h:54
const int n_band
the first dimension of the matrix to be diagonalized
Definition diago_dav_subspace.h:63
~Diago_DavSubspace()
Definition diago_dav_subspace.cpp:88
T * hpsi
the product of H and psi in the reduced basis set
Definition diago_dav_subspace.h:81
T * vcc
Eigenvectors on the reduced basis.
Definition diago_dav_subspace.h:93
T * psi_in_iter
Definition diago_dav_subspace.h:78
typename GetTypeReal< T >::type Real
Definition diago_dav_subspace.h:26
const T * zero
Definition diago_dav_subspace.h:198
Real * d_eigenvalue
Definition diago_dav_subspace.h:96
const T * one
Definition diago_dav_subspace.h:198
const int nbase_x
the maximum dimension of the reduced basis set
Definition diago_dav_subspace.h:69
const std::vector< Real > & precondition
precondition for diag
Definition diago_dav_subspace.h:72
T * hcc
Hamiltonian on the reduced basis.
Definition diago_dav_subspace.h:87
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:658
typename ct::PsiToContainer< Device >::type ct_Device
Definition diago_dav_subspace.h:195
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:742
T * scc
Overlap on the reduced basis.
Definition diago_dav_subspace.h:90
T * d_scc
Definition diago_dav_subspace.h:95
base_device::DEVICE_CPU * cpu_ctx
Definition diago_dav_subspace.h:100
T * spsi
the product of S and psi in the reduced basis set
Definition diago_dav_subspace.h:84
Device * ctx
device type of psi
Definition diago_dav_subspace.h:99
const T * neg_one
Definition diago_dav_subspace.h:198
int diago_subspace_bs
Definition diago_dav_subspace.h:161
int notconv
record for how many bands not have convergence eigenvalues
Definition diago_dav_subspace.h:76
int diag_subspace
Definition diago_dav_subspace.h:160
const T one_
Definition diago_dav_subspace.h:199
bool test_exit_cond(const int &ntry, const int ¬conv, const bool &scf)
Definition diago_dav_subspace.cpp:775
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:529
const int iter_nmax
maximal iteration number
Definition diago_dav_subspace.h:60
const int dim
the second dimension of the matrix to be diagonalized
Definition diago_dav_subspace.h:66
#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