ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
esolver.h
Go to the documentation of this file.
1#ifndef ESOLVER_H
2#define ESOLVER_H
3
7
8namespace ModuleESolver
9{
11{
12 public:
14 {
15 classname = "ESolver";
16 }
17
18 virtual ~ESolver()
19 {
20 }
21
23 virtual void before_all_runners(UnitCell& ucell, const Input_para& inp) = 0;
24
26 virtual void runner(UnitCell& cell, const int istep) = 0;
27
29 virtual void after_all_runners(UnitCell& ucell) = 0;
30
33 virtual void others(UnitCell& ucell, const int istep) {};
34
36 virtual double cal_energy() = 0;
37
39 virtual void cal_force(UnitCell& ucell, ModuleBase::matrix& force) = 0;
40
42 virtual void cal_stress(UnitCell& ucell, ModuleBase::matrix& stress) = 0;
43
44 bool conv_esolver = true; // whether esolver is converged
45
46 std::string classname;
47};
48
56std::string determine_type();
57
67ESolver* init_esolver(const Input_para& inp, UnitCell& ucell);
68
69void clean_esolver(ESolver*& pesolver, const bool lcao_cblacs_exit = false);
70
71} // namespace ModuleESolver
72
73#endif
Definition matrix.h:19
Definition esolver.h:11
virtual void runner(UnitCell &cell, const int istep)=0
run energy solver
virtual void cal_stress(UnitCell &ucell, ModuleBase::matrix &stress)=0
calcualte stress of given cell
virtual ~ESolver()
Definition esolver.h:18
ESolver()
Definition esolver.h:13
virtual double cal_energy()=0
calculate total energy of a given system
virtual void after_all_runners(UnitCell &ucell)=0
perform post processing calculations
bool conv_esolver
Definition esolver.h:44
std::string classname
Definition esolver.h:46
virtual void cal_force(UnitCell &ucell, ModuleBase::matrix &force)=0
calcualte forces for the atoms in the given cell
virtual void others(UnitCell &ucell, const int istep)
Definition esolver.h:33
virtual void before_all_runners(UnitCell &ucell, const Input_para &inp)=0
initialize the energy solver by using input parameters and cell modules
Definition unitcell.h:16
plane wave basis
Definition opt_test_tools.cpp:93
ESolver * init_esolver(const Input_para &inp, UnitCell &ucell)
Determine and initialize an ESolver based on input information.
Definition esolver.cpp:125
void clean_esolver(ESolver *&pesolver, const bool lcao_cblacs_exit)
Definition esolver.cpp:326
std::string determine_type()
A subrutine called in init_esolver() This function returns type of ESolver Based on PARAM....
Definition esolver.cpp:29
Definition input_parameter.h:12