ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
esolver_ks_lcao.h
Go to the documentation of this file.
1#ifndef ESOLVER_KS_LCAO_H
2#define ESOLVER_KS_LCAO_H
3
4#include "esolver_ks.h"
5#include "source_lcao/record_adj.h" // adjacent atoms
7#include "source_lcao/module_gint/gint.h" // gint
10#include "source_lcao/setup_deepks.h" // for deepks, mohan add 20251008
11#include "source_lcao/setup_exx.h" // for exx, mohan add 20251008
12#include "source_lcao/module_rdmft/rdmft.h" // rdmft
13#include "source_lcao/setup_dm.h" // mohan add 2025-10-30
14
15#include <memory>
16
17
18// for Linear Response
19namespace LR
20{
21template <typename T, typename TR>
22class ESolver_LR;
23}
24
25//-----------------------------------
26// ESolver for LCAO
27//-----------------------------------
28namespace ModuleESolver
29{
30
31template <typename TK, typename TR>
33{
34 public:
37
38 void before_all_runners(UnitCell& ucell, const Input_para& inp) override;
39
40 double cal_energy() override;
41
42 void cal_force(UnitCell& ucell, ModuleBase::matrix& force) override;
43
44 void cal_stress(UnitCell& ucell, ModuleBase::matrix& stress) override;
45
46 void after_all_runners(UnitCell& ucell) override;
47
48 protected:
49 virtual void before_scf(UnitCell& ucell, const int istep) override;
50
51 virtual void iter_init(UnitCell& ucell, const int istep, const int iter) override;
52
53 virtual void hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr) override;
54
55 virtual void iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) override;
56
57 virtual void after_scf(UnitCell& ucell, const int istep, const bool conv_esolver) override;
58
59 virtual void others(UnitCell& ucell, const int istep) override;
60
62 psi::Psi<TK>* psi = nullptr;
63
66
69
72
74 std::unique_ptr<ModuleGint::GintInfo> gint_info_;
75
78
81
84
85
86 // For deepks method, mohan add 2025-10-08
88
89 // For exact-exchange energy, mohan add 2025-10-08
91
94
96 friend class LR::ESolver_LR<double, double>;
97 friend class LR::ESolver_LR<std::complex<double>, double>;
98
99 // Temporarily store the stress to unify the interface with PW,
100 // because it's hard to seperate force and stress calculation in LCAO.
102 bool have_force = false;
103
105
106
107 public:
108 const Record_adj & get_RA() const { return RA; }
109 const Grid_Driver & get_gd() const { return gd; }
110 const Parallel_Orbitals & get_pv() const { return pv; }
111 const std::unique_ptr<ModuleGint::GintInfo> & get_gint_info() const { return gint_info_; }
114 const LCAO_Orbitals & get_orb() const { return orb_; }
115 const ModuleBase::matrix & get_scs() const { return scs; }
116 const Setup_DeePKS<TK> & get_deepks() const { return deepks; }
117 const Exx_NAO<TK> & get_exx_nao() const { return exx_nao; }
118};
119} // namespace ModuleESolver
120#endif
Definition setup_exx.h:18
Definition gint_precision_controller.h:9
Definition sltk_grid_driver.h:40
Definition ORB_read.h:18
Definition setup_dm.h:14
Excited State Solver: Linear Response TDDFT (Tamm Dancoff Approximation)
Definition esolver_lrtd_lcao.h:27
Definition matrix.h:18
Definition esolver_ks_lcao.h:33
Grid_Driver gd
Store information about Adjacent Atoms.
Definition esolver_ks_lcao.h:68
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_lcao.cpp:435
const Grid_Driver & get_gd() const
Definition esolver_ks_lcao.h:109
const std::unique_ptr< ModuleGint::GintInfo > & get_gint_info() const
Definition esolver_ks_lcao.h:111
void cal_stress(UnitCell &ucell, ModuleBase::matrix &stress) override
calcualte stress of given cell
Definition esolver_ks_lcao.cpp:252
const rdmft::RDMFT< TK, TR > & get_rdmft_solver() const
Definition esolver_ks_lcao.h:113
virtual void others(UnitCell &ucell, const int istep) override
Definition lcao_others.cpp:35
TwoCenterBundle two_center_bundle_
NAO orbitals: two-center integrations.
Definition esolver_ks_lcao.h:80
LCAO_Orbitals orb_
NAO: store related information.
Definition esolver_ks_lcao.h:77
void cal_force(UnitCell &ucell, ModuleBase::matrix &force) override
calcualte forces for the atoms in the given cell
Definition esolver_ks_lcao.cpp:226
ModuleBase::matrix scs
Definition esolver_ks_lcao.h:101
const TwoCenterBundle & get_two_center_bundle() const
Definition esolver_ks_lcao.h:112
virtual void before_scf(UnitCell &ucell, const int istep) override
Something to do before SCF iterations.
Definition esolver_ks_lcao.cpp:106
ESolver_KS_LCAO()
Definition esolver_ks_lcao.cpp:33
GintPrecisionController gint_precision_controller_
Definition esolver_ks_lcao.h:104
Setup_DeePKS< TK > deepks
Definition esolver_ks_lcao.h:87
~ESolver_KS_LCAO()
Definition esolver_ks_lcao.cpp:41
rdmft::RDMFT< TK, TR > rdmft_solver
For RDMFT calculations, added by jghan, 2024-03-16.
Definition esolver_ks_lcao.h:93
bool have_force
Definition esolver_ks_lcao.h:102
std::unique_ptr< ModuleGint::GintInfo > gint_info_
GintInfo: used to store some basic infomation about module_gint.
Definition esolver_ks_lcao.h:74
const Setup_DeePKS< TK > & get_deepks() const
Definition esolver_ks_lcao.h:116
Record_adj RA
Store information about Adjacent Atoms.
Definition esolver_ks_lcao.h:65
Parallel_Orbitals pv
NAO orbitals: 2d block-cyclic distribution info.
Definition esolver_ks_lcao.h:71
Exx_NAO< TK > exx_nao
Definition esolver_ks_lcao.h:90
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_lcao.cpp:489
LCAO_domain::Setup_DM< TK > dmat
Add density matrix class, mohan add 2025-10-30.
Definition esolver_ks_lcao.h:83
const ModuleBase::matrix & get_scs() const
Definition esolver_ks_lcao.h:115
void after_all_runners(UnitCell &ucell) override
perform post processing calculations
Definition esolver_ks_lcao.cpp:271
double cal_energy() override
calculate total energy of a given system
Definition esolver_ks_lcao.cpp:220
const Parallel_Orbitals & get_pv() const
Definition esolver_ks_lcao.h:110
void before_all_runners(UnitCell &ucell, const Input_para &inp) override
Initialize of the first-principels energy solver.
Definition esolver_ks_lcao.cpp:50
const Record_adj & get_RA() const
Definition esolver_ks_lcao.h:108
const Exx_NAO< TK > & get_exx_nao() const
Definition esolver_ks_lcao.h:117
virtual void hamilt2rho_single(UnitCell &ucell, const int istep, const int iter, const double ethr) override
Definition esolver_ks_lcao.cpp:391
const LCAO_Orbitals & get_orb() const
Definition esolver_ks_lcao.h:114
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_lcao.cpp:303
Definition esolver_ks.h:17
bool conv_esolver
Definition esolver.h:48
Definition parallel_orbitals.h:9
Definition record_adj.h:12
Definition setup_deepks.h:23
Definition two_center_bundle.h:11
Definition unitcell.h:15
Definition psi.h:37
Definition rdmft.h:42
std::complex< double > complex
Definition diago_cusolver.cpp:15
Definition esolver_ks_lcao.h:20
The First-Principles (FP) Energy Solver Class.
Definition opt_test_tools.cpp:93
Definition exx_lip.h:23
Definition input_parameter.h:12