17template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
30 const int& david_ndim_in,
31 const double& diag_thr_in,
32 const int& diag_nmax_in,
33 const bool& need_subspace_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:19
const T zero_
Definition diago_dav_subspace.h:192
const T neg_one_
Definition diago_dav_subspace.h:192
void refresh(const int &dim, const int &nband, int &nbase, const Real *eigenvalue, T *psi_iter, T *hphi, T *sphi, T *hcc, T *scc, T *vcc)
Definition diago_dav_subspace.cpp:705
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
void cal_elem(const int &dim, int &nbase, const int ¬conv, const T *psi_iter, const T *sphi, const T *hphi, T *hcc, T *scc)
Definition diago_dav_subspace.cpp:427
Real * d_precondition
Definition diago_dav_subspace.h:75
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:102
const diag_comm_info diag_comm
for MPI communication
Definition diago_dav_subspace.h:53
void cal_grad(const HPsiFunc &hpsi_func, const HPsiFunc &spsi_func, const int &dim, const int &nbase, const int ¬conv, T *psi_iter, T *hphi, T *spsi, T *vcc, const int *unconv, std::vector< Real > *eigenvalue_iter)
Definition diago_dav_subspace.cpp:276
const int n_band
the first dimension of the matrix to be diagonalized
Definition diago_dav_subspace.h:65
~Diago_DavSubspace()
Definition diago_dav_subspace.cpp:84
T * vcc
Eigenvectors on the reduced basis.
Definition diago_dav_subspace.h:95
T * psi_in_iter
Definition diago_dav_subspace.h:80
typename GetTypeReal< T >::type Real
Definition diago_dav_subspace.h:24
const T * zero
Definition diago_dav_subspace.h:191
const T * one
Definition diago_dav_subspace.h:191
const int nbase_x
the maximum dimension of the reduced basis set
Definition diago_dav_subspace.h:71
const std::vector< Real > & precondition
precondition for diag
Definition diago_dav_subspace.h:74
T * hphi
the product of H and psi in the reduced basis set
Definition diago_dav_subspace.h:83
T * hcc
Hamiltonian on the reduced basis.
Definition diago_dav_subspace.h:89
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:824
T * scc
Overlap on the reduced basis.
Definition diago_dav_subspace.h:92
base_device::DEVICE_CPU * cpu_ctx
Definition diago_dav_subspace.h:99
Device * ctx
device type of psi
Definition diago_dav_subspace.h:98
const T * neg_one
Definition diago_dav_subspace.h:191
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:78
int diag_subspace
Definition diago_dav_subspace.h:159
const T one_
Definition diago_dav_subspace.h:192
bool test_exit_cond(const int &ntry, const int ¬conv, const bool &scf)
Definition diago_dav_subspace.cpp:857
const bool is_subspace
is diagH_subspace needed?
Definition diago_dav_subspace.h:62
T * sphi
the product of S and psi in the reduced basis set
Definition diago_dav_subspace.h:86
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:551
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:68
#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