ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
exx_helper.h
Go to the documentation of this file.
1#include "source_psi/psi.h"
6
7#ifndef EXX_HELPER_H
8#define EXX_HELPER_H
9
10class Charge;
11
12template <typename T, typename Device>
14{
15 using Real = typename GetTypeReal<T>::type;
17
18 public:
19 Exx_Helper() = default;
20 virtual ~Exx_Helper() = default;
21 OperatorEXX *op_exx = nullptr;
22
23 void init(const UnitCell& ucell, const Input_para& inp, const ModuleBase::matrix& wg) override;
24
25 void before_scf(void* p_hamilt, void* psi, const Input_para& inp) override;
26
27 bool iter_finish(void* p_elec, Charge* p_charge, void* psi,
28 UnitCell& ucell, const Input_para& inp,
29 bool& conv_esolver, int& iter) override;
30
31 void set_firstiter(bool flag = true) override { first_iter = flag; }
32 void set_wg(const ModuleBase::matrix *wg_) override { wg = wg_; }
33 void set_psi(void* psi_) override;
34 void iter_inc() override { exx_iter++; }
35
36 void set_op() override
37 {
39 set_psi(psi);
41 }
42
43 bool exx_after_converge(int &iter, bool ene_conv) override;
44
45 double cal_exx_energy(void* psi_) override;
46
47 bool get_op_first_iter() const override { return op_exx ? op_exx->first_iter : false; }
48 void set_op_first_iter(bool flag) override { if (op_exx) op_exx->first_iter = flag; }
49 void set_op_exx(void* op) override { op_exx = reinterpret_cast<OperatorEXX*>(op); }
50
51 private:
52 bool first_iter = false;
54 const ModuleBase::matrix *wg = nullptr;
55 int exx_iter = 0;
56
57};
58#endif // EXX_HELPER_H
Definition charge.h:17
Definition exx_helper_base.h:11
Definition matrix.h:18
Definition unitcell.h:15
Definition op_pw_exx.h:24
bool first_iter
Definition op_pw_exx.h:56
void set_wg(const ModuleBase::matrix *wg_in)
Definition op_pw_exx.h:52
Definition psi.h:37
Definition exx_lip.h:23
Definition exx_helper.h:14
void before_scf(void *p_hamilt, void *psi, const Input_para &inp) override
Definition exx_helper.cpp:35
void set_op_first_iter(bool flag) override
Definition exx_helper.h:48
void set_op_exx(void *op) override
Definition exx_helper.h:49
void set_op() override
Definition exx_helper.h:36
bool first_iter
Definition exx_helper.h:52
void set_wg(const ModuleBase::matrix *wg_) override
Definition exx_helper.h:32
void iter_inc() override
Definition exx_helper.h:34
virtual ~Exx_Helper()=default
void init(const UnitCell &ucell, const Input_para &inp, const ModuleBase::matrix &wg) override
Definition exx_helper.cpp:12
bool get_op_first_iter() const override
Definition exx_helper.h:47
const ModuleBase::matrix * wg
Definition exx_helper.h:54
typename GetTypeReal< T >::type Real
Definition exx_helper.h:15
int exx_iter
Definition exx_helper.h:55
double cal_exx_energy(void *psi_) override
Definition exx_helper.cpp:121
void set_psi(void *psi_) override
Definition exx_helper.cpp:159
void set_firstiter(bool flag=true) override
Definition exx_helper.h:31
Exx_Helper()=default
OperatorEXX * op_exx
Definition exx_helper.h:21
bool iter_finish(void *p_elec, Charge *p_charge, void *psi, UnitCell &ucell, const Input_para &inp, bool &conv_esolver, int &iter) override
Definition exx_helper.cpp:59
bool exx_after_converge(int &iter, bool ene_conv) override
Definition exx_helper.cpp:128
T type
Definition macros.h:8
Definition input_parameter.h:12
const std::map< std::string, std::vector< double > > op
Definition vdwd3_autoset_xcparam.cpp:375