ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
diago_iter_assist.h
Go to the documentation of this file.
1#ifndef DIAGOITERASSIST_H
2#define DIAGOITERASSIST_H
3
7#include "source_psi/psi.h"
8
9namespace hsolver
10{
11
12template <typename T, typename Device = base_device::DEVICE_CPU>
14{
15 private:
16 using Real = typename GetTypeReal<T>::type;
17
18 public:
20 static int PW_DIAG_NMAX;
21
23 static int LCAO_DIAG_NMAX;
24
26 static Real avg_iter;
27 static bool need_subspace;
28
29 static int SCF_ITER;
30
31 // for psi::Psi structure
32 static void diagH_subspace(const hamilt::Hamilt<T, Device>* const pHamilt,
35 Real* en,
36 int n_band = 0);
37
47 static void diagH_subspace_init(
49 const T* psi,
50 int psi_nr,
51 int psi_nc,
53 Real* en,
54 const std::function<void(T*, const int)>& add_to_hcc = [](T* null, const int n) {},
55 const std::function<void(const T* const, const int, const int)>& export_vcc = [](const T* null, const int n, const int m) {});
56
57 static void diagH_LAPACK(const int nstart,
58 const int nbands,
59 const T* hcc,
60 const T* sc,
61 const int ldh, // nstart
62 Real* e,
63 T* vcc);
64
70 static void cal_hs_subspace(const hamilt::Hamilt<T, Device>* pHamilt, // hamiltonian operator carrier
71 const psi::Psi<T, Device>& psi, // [in] wavefunction
72 T *hcc,
73 T *scc);
74
83 static void diag_responce(const T* hcc,
84 const T* scc,
85 const int nbands,
86 const T* mat_in,
87 T* mat_out,
88 int mat_col,
89 Real* en);
90
92 static void diag_subspace_psi(const T* hcc,
93 const T* scc,
94 const int dim_subspace,
96 Real* en);
97
98 static bool test_exit_cond(const int& ntry, const int& notconv);
99
100 private:
101 constexpr static const Device* ctx = {};
102
104
113
120
121 static T one;
122 static T zero;
123};
124
125template <typename T, typename Device>
127
128template <typename T, typename Device>
130
131template <typename T, typename Device>
133
134template <typename T, typename Device>
136
137template <typename T, typename Device>
139
140template <typename T, typename Device>
142
143template <typename T, typename Device>
145
146template <typename T, typename Device>
147T DiagoIterAssist<T, Device>::one = static_cast<T>(1.0);
148
149template <typename T, typename Device>
150T DiagoIterAssist<T, Device>::zero = static_cast<T>(0.0);
151} // namespace hsolver
152
153#endif
Definition hamilt.h:16
std::tuple< const psi::Psi< T, Device > *, const psi::Range, T * > hpsi_info
Definition operator.h:49
Definition diago_iter_assist.h:14
static Real PW_DIAG_THR
Definition diago_iter_assist.h:19
typename GetTypeReal< T >::type Real
Definition diago_iter_assist.h:16
static int PW_DIAG_NMAX
Definition diago_iter_assist.h:20
static Real avg_iter
average steps of last cg diagonalization for each band.
Definition diago_iter_assist.h:26
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:411
static int SCF_ITER
Definition diago_iter_assist.h:29
static T one
Definition diago_iter_assist.h:121
static T zero
Definition diago_iter_assist.h:122
typename hamilt::Operator< T, Device >::hpsi_info hpsi_info
Definition diago_iter_assist.h:103
static void diagH_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)
Definition diago_iter_assist.cpp:21
static void diagH_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:148
static void diag_subspace_psi(const T *hcc, const 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:523
static int LCAO_DIAG_NMAX
Definition diago_iter_assist.h:23
static void diag_responce(const T *hcc, const 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:480
static constexpr const Device * ctx
Definition diago_iter_assist.h:101
static void diagH_LAPACK(const int nstart, const int nbands, const T *hcc, const T *sc, const int ldh, Real *e, T *vcc)
Definition diago_iter_assist.cpp:360
static Real LCAO_DIAG_THR
Definition diago_iter_assist.h:22
static bool need_subspace
Definition diago_iter_assist.h:27
static bool test_exit_cond(const int &ntry, const int &notconv)
Definition diago_iter_assist.cpp:572
Definition psi.h:37
#define T
Definition exp.cpp:237
Definition diag_comm_info.h:9
Definition exx_lip.h:23
T type
Definition macros.h:8
Definition memory_op.h:77
Definition memory_op.h:17
Definition memory_op.h:31