ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
esolver_ks.h
Go to the documentation of this file.
1#ifndef ESOLVER_KS_H
2#define ESOLVER_KS_H
3
4#include <cstring>
5//#include <fstream>
6
7// for first-principles esolver
8#include "esolver_fp.h"
9// for plane wave basis set
11// for k-points in Brillouin zone
12#include "source_cell/klist.h"
13// for charge mixing
15// for electronic wave functions
16#include "source_psi/psi.h"
17// for Hamiltonian
19
20namespace ModuleESolver
21{
22
23template <typename T, typename Device = base_device::DEVICE_CPU>
24class ESolver_KS : public ESolver_FP
25{
26 public:
28 ESolver_KS();
29
31 virtual ~ESolver_KS();
32
33 virtual void before_all_runners(UnitCell& ucell, const Input_para& inp) override;
34
35 virtual void runner(UnitCell& ucell, const int istep) override;
36
37 virtual void after_all_runners(UnitCell& ucell) override;
38
39 protected:
41 virtual void before_scf(UnitCell& ucell, const int istep) override;
42
44 virtual void iter_init(UnitCell& ucell, const int istep, const int iter);
45
47 virtual void iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) override;
48
49 // calculate electron density from a specific Hamiltonian with ethr
50 virtual void hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr);
51
52 // calculate electron density from a specific Hamiltonian
53 void hamilt2rho(UnitCell& ucell, const int istep, const int iter, const double ethr);
54
56 virtual void after_scf(UnitCell& ucell, const int istep, const bool conv_esolver) override;
57
59 virtual void update_pot(UnitCell& ucell, const int istep, const int iter, const bool conv_esolver){};
60
63
66
69
72
74 psi::Psi<T>* psi = nullptr;
75
76 std::string basisname;
77 double esolver_KS_ne = 0.0;
78 double diag_ethr;
79 double scf_thr;
80 double scf_ene_thr;
81 double drho;
84 int niter;
85 bool oscillate_esolver = false; // whether esolver is oscillated
86};
87} // namespace ModuleESolver
88#endif
Definition charge_mixing.h:9
Definition esolver_fp.h:45
Definition esolver_ks.h:25
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.cpp:545
virtual void hamilt2rho_single(UnitCell &ucell, const int istep, const int iter, const double ethr)
Definition esolver_ks.cpp:158
ModulePW::PW_Basis_K * pw_wfc
PW for wave functions, only used in KSDFT, not in OFDFT.
Definition esolver_ks.h:65
virtual void iter_init(UnitCell &ucell, const int istep, const int iter)
Something to do before hamilt2rho function in each iter loop.
Definition esolver_ks.cpp:288
pseudopot_cell_vnl ppcell
nonlocal pseudopotentials
Definition esolver_ks.h:71
virtual void before_all_runners(UnitCell &ucell, const Input_para &inp) override
Initialize of the first-principels energy solver.
Definition esolver_ks.cpp:51
double drho
scf energy threshold
Definition esolver_ks.h:81
double esolver_KS_ne
esolver_ks_lcao.cpp
Definition esolver_ks.h:77
hamilt::Hamilt< T, Device > * p_hamilt
Hamiltonian.
Definition esolver_ks.h:62
virtual void runner(UnitCell &ucell, const int istep) override
run energy solver
Definition esolver_ks.cpp:223
Charge_Mixing * p_chgmix
Charge mixing method.
Definition esolver_ks.h:68
bool oscillate_esolver
iter steps actually used in scf
Definition esolver_ks.h:85
virtual void before_scf(UnitCell &ucell, const int istep) override
Something to do before SCF iterations.
Definition esolver_ks.cpp:281
ESolver_KS()
Constructor.
Definition esolver_ks.cpp:34
int niter
maximum iter steps for scf
Definition esolver_ks.h:84
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.cpp:335
double diag_ethr
number of electrons
Definition esolver_ks.h:78
double scf_ene_thr
scf density threshold
Definition esolver_ks.h:80
void hamilt2rho(UnitCell &ucell, const int istep, const int iter, const double ethr)
Definition esolver_ks.cpp:169
int maxniter
the error of HSolver
Definition esolver_ks.h:83
virtual void update_pot(UnitCell &ucell, const int istep, const int iter, const bool conv_esolver)
<Temporary> It should be replaced by a function in Hamilt Class
Definition esolver_ks.h:59
double scf_thr
the threshold for diagonalization
Definition esolver_ks.h:79
virtual ~ESolver_KS()
Deconstructor.
Definition esolver_ks.cpp:40
double hsolver_error
the difference between rho_in (before HSolver) and rho_out (After HSolver)
Definition esolver_ks.h:82
virtual void after_all_runners(UnitCell &ucell) override
perform post processing calculations
Definition esolver_ks.cpp:567
std::string basisname
Definition esolver_ks.h:76
bool conv_esolver
Definition esolver.h:44
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
Definition unitcell.h:16
Definition hamilt.h:16
Definition VNL_in_pw.h:21
Definition psi.h:37
plane wave basis
Definition opt_test_tools.cpp:93
Definition exx_lip.h:23
Definition input_parameter.h:12