1#ifndef DIAGOITERASSIST_H
2#define DIAGOITERASSIST_H
14template <
typename T,
typename Device = base_device::DEVICE_CPU>
55 const bool is_S_orthogonal =
false);
73 const std::function<
void(
T*,
const int)>& add_to_hcc = [](
T* null,
const int n) {},
74 const std::function<void(
const T*
const,
const int,
const int)>& export_vcc = [](
const T* null,
const int n,
const int m) {});
119 const int dim_subspace,
126 constexpr static const Device*
ctx = {};
150template <
typename T,
typename Device>
153template <
typename T,
typename Device>
156template <
typename T,
typename Device>
159template <
typename T,
typename Device>
162template <
typename T,
typename Device>
165template <
typename T,
typename Device>
168template <
typename T,
typename Device>
171template <
typename T,
typename Device>
174template <
typename T,
typename Device>
std::tuple< const psi::Psi< T, Device > *, const psi::Range, T * > hpsi_info
Definition operator.h:47
Definition diago_iter_assist.h:16
static Real PW_DIAG_THR
Definition diago_iter_assist.h:21
typename GetTypeReal< T >::type Real
Definition diago_iter_assist.h:18
static int PW_DIAG_NMAX
Definition diago_iter_assist.h:22
static Real avg_iter
average steps of last cg diagonalization for each band.
Definition diago_iter_assist.h:28
static void cal_hs_subspace(const hamilt::Hamilt< T, Device > *pHamilt, const psi::Psi< T, Device > &psi, T *hcc, T *scc)
calculate Hamiltonian and overlap matrix in subspace spanned by nstart states psi
Definition diago_iter_assist.cpp:475
static void diag_subspace(const hamilt::Hamilt< T, Device > *const pHamilt, const psi::Psi< T, Device > &psi, psi::Psi< T, Device > &evc, Real *en, int n_band=0, const bool is_S_orthogonal=false)
Diagonalizes the Hamiltonian in a subspace defined by the given wavefunction.
Definition diago_iter_assist.cpp:22
static void diag_subspace_init(hamilt::Hamilt< T, Device > *pHamilt, const T *psi, int psi_nr, int psi_nc, psi::Psi< T, Device > &evc, Real *en, const std::function< void(T *, const int)> &add_to_hcc=[](T *null, const int n) {}, const std::function< void(const T *const, const int, const int)> &export_vcc=[](const T *null, const int n, const int m) {})
use LAPACK to diagonalize the Hamiltonian matrix
Definition diago_iter_assist.cpp:174
static void diag_responce(const T *hcc, T *scc, const int nbands, const T *mat_in, T *mat_out, int mat_col, Real *en)
calculate the response matrix from rotation matrix solved by diagonalization of H and S matrix
Definition diago_iter_assist.cpp:544
static void diag_heevx(const int nstart, const int nbands, const T *hcc, const int ldh, Real *e, T *vcc)
Definition diago_iter_assist.cpp:387
static int SCF_ITER
Definition diago_iter_assist.h:31
static T one
Definition diago_iter_assist.h:146
static T zero
Definition diago_iter_assist.h:147
typename hamilt::Operator< T, Device >::hpsi_info hpsi_info
Definition diago_iter_assist.h:128
static void diag_subspace_psi(const T *hcc, T *scc, const int dim_subspace, psi::Psi< T, Device > &evc, Real *en)
calculate the response wavefunction psi from rotation matrix solved by diagonalization of H and S mat...
Definition diago_iter_assist.cpp:587
static int LCAO_DIAG_NMAX
Definition diago_iter_assist.h:25
static constexpr const Device * ctx
Definition diago_iter_assist.h:126
static Real LCAO_DIAG_THR
Definition diago_iter_assist.h:24
static bool need_subspace
Definition diago_iter_assist.h:29
static void diag_hegvd(const int nstart, const int nbands, const T *hcc, T *sc, const int ldh, Real *e, T *vcc)
Definition diago_iter_assist.cpp:424
static bool test_exit_cond(const int &ntry, const int ¬conv)
Definition diago_iter_assist.cpp:636
#define T
Definition exp.cpp:237
Definition diag_comm_info.h:9
T type
Definition macros.h:8
Definition memory_op.h:115
Definition memory_op.h:17
Definition memory_op.h:31
Definition memory_op.h:61