ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
esolver_ks_pw.h
Go to the documentation of this file.
1#ifndef ESOLVER_KS_PW_H
2#define ESOLVER_KS_PW_H
3#include "./esolver_ks.h"
8
9#include <memory>
10#include <source_base/macros.h>
11
12namespace ModuleESolver
13{
14
15template <typename T, typename Device = base_device::DEVICE_CPU>
16class ESolver_KS_PW : public ESolver_KS<T, Device>
17{
18 private:
19 using Real = typename GetTypeReal<T>::type;
20
21 public:
23
25
26 void before_all_runners(UnitCell& ucell, const Input_para& inp) override;
27
28 double cal_energy() override;
29
30 void cal_force(UnitCell& ucell, ModuleBase::matrix& force) override;
31
32 void cal_stress(UnitCell& ucell, ModuleBase::matrix& stress) override;
33
34 void after_all_runners(UnitCell& ucell) override;
35
37
38 protected:
39 virtual void before_scf(UnitCell& ucell, const int istep) override;
40
41 virtual void iter_init(UnitCell& ucell, const int istep, const int iter) override;
42
43 virtual void update_pot(UnitCell& ucell, const int istep, const int iter, const bool conv_esolver) override;
44
45 virtual void iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) override;
46
47 virtual void after_scf(UnitCell& ucell, const int istep, const bool conv_esolver) override;
48
49 virtual void others(UnitCell& ucell, const int istep) override;
50
51 virtual void hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr) override;
52
53 virtual void allocate_hamilt(const UnitCell& ucell);
54 virtual void deallocate_hamilt();
55
57 psi::Psi<std::complex<double>, base_device::DEVICE_CPU>* psi = nullptr;
58
59 // psi_initializer controller
61
62 Device* ctx = {};
63
65
67
69
70 bool already_initpsi = false;
71
73 = base_device::memory::cast_memory_op<std::complex<double>, T, base_device::DEVICE_CPU, Device>;
74
75};
76} // namespace ModuleESolver
77#endif
Definition matrix.h:19
Definition esolver_ks_pw.h:17
bool already_initpsi
Definition esolver_ks_pw.h:70
base_device::AbacusDevice_t device
Definition esolver_ks_pw.h:64
virtual void hamilt2rho_single(UnitCell &ucell, const int istep, const int iter, const double ethr) override
Definition esolver_ks_pw.cpp:480
Exx_Helper< T, Device > exx_helper
Definition esolver_ks_pw.h:36
virtual void others(UnitCell &ucell, const int istep) override
Definition pw_others.cpp:48
void cal_stress(UnitCell &ucell, ModuleBase::matrix &stress) override
calcualte stress of given cell
Definition esolver_ks_pw.cpp:860
virtual void iter_finish(UnitCell &ucell, const int istep, int &iter, bool &conv_esolver) override
Something to do after hamilt2rho function in each iter loop.
Definition esolver_ks_pw.cpp:580
Device * ctx
Definition esolver_ks_pw.h:62
virtual void after_scf(UnitCell &ucell, const int istep, const bool conv_esolver) override
Something to do after SCF iterations when SCF is converged or comes to the max iter step.
Definition esolver_ks_pw.cpp:687
psi::Psi< std::complex< double >, Device > * __kspw_psi
Definition esolver_ks_pw.h:68
void before_all_runners(UnitCell &ucell, const Input_para &inp) override
Initialize of the first-principels energy solver.
Definition esolver_ks_pw.cpp:135
double cal_energy() override
calculate total energy of a given system
Definition esolver_ks_pw.cpp:824
virtual void allocate_hamilt(const UnitCell &ucell)
Definition esolver_ks_pw.cpp:119
psi::PSIInit< T, Device > * p_psi_init
Definition esolver_ks_pw.h:60
void cal_force(UnitCell &ucell, ModuleBase::matrix &force) override
calcualte forces for the atoms in the given cell
Definition esolver_ks_pw.cpp:830
typename GetTypeReal< T >::type Real
Definition esolver_ks_pw.h:19
virtual void deallocate_hamilt()
Definition esolver_ks_pw.cpp:125
~ESolver_KS_PW()
Definition esolver_ks_pw.cpp:78
void after_all_runners(UnitCell &ucell) override
perform post processing calculations
Definition esolver_ks_pw.cpp:895
virtual void update_pot(UnitCell &ucell, const int istep, const int iter, const bool conv_esolver) override
<Temporary> It should be replaced by a function in Hamilt Class
Definition esolver_ks_pw.cpp:562
virtual void iter_init(UnitCell &ucell, const int istep, const int iter) override
Something to do before hamilt2rho function in each iter loop.
Definition esolver_ks_pw.cpp:402
ESolver_KS_PW()
Definition esolver_ks_pw.cpp:55
virtual void before_scf(UnitCell &ucell, const int istep) override
Something to do before SCF iterations.
Definition esolver_ks_pw.cpp:246
psi::Psi< T, Device > * kspw_psi
Definition esolver_ks_pw.h:66
Definition esolver_ks.h:25
bool conv_esolver
Definition esolver.h:44
Definition unitcell.h:16
Definition psi_init.h:12
Definition psi.h:37
#define T
Definition exp.cpp:237
plane wave basis
Definition opt_test_tools.cpp:93
AbacusDevice_t
Definition types.h:12
Definition exx_lip.h:23
Definition exx_helper.h:13
T type
Definition macros.h:8
Definition input_parameter.h:12
Definition memory_op.h:61