ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
elecstate.h
Go to the documentation of this file.
1#ifndef ELECSTATE_H
2#define ELECSTATE_H
3
4#include "fp_energy.h"
5#include "source_cell/klist.h"
8#include "source_psi/psi.h"
10
11namespace elecstate
12{
13
15{
16 public:
18 {
19 }
21 {
22 this->charge = chr_in;
23 this->charge->set_rhopw(rhopw_in);
24 this->bigpw = bigpw_in;
26 }
27 virtual ~ElecState()
28 {
29 if (this->pot != nullptr)
30 {
31 delete this->pot;
32 this->pot = nullptr;
33 }
34 }
35 void init_ks(Charge* chr_in, // pointer for class Charge
36 const K_Vectors* klist_in,
37 int nk_in, // number of k points
38 ModulePW::PW_Basis* rhopw_in,
39 const ModulePW::PW_Basis_Big* bigpw_in);
40
41 // return current electronic density rho, as a input for constructing Hamiltonian
42 virtual const double* getRho(int spin) const;
43
44 // calculate electronic charge density on grid points or density matrix in real space
45 // the consequence charge density rho saved into rho_out, preparing for charge mixing.
46 virtual void psiToRho(const psi::Psi<std::complex<double>>& psi)
47 {
48 return;
49 }
50 virtual void psiToRho(const psi::Psi<double>& psi)
51 {
52 return;
53 }
54 virtual void cal_tau(const psi::Psi<std::complex<double>>& psi)
55 {
56 return;
57 }
58 virtual void cal_tau(const psi::Psi<double>& psi)
59 {
60 return;
61 }
62 virtual void cal_tau(const psi::Psi<std::complex<float>>& psi)
63 {
64 return;
65 }
66
67 // update charge density for next scf step
68 // in this function, 1. input rho for construct Hamilt and 2. calculated rho from Psi will mix to 3. new charge
69 // density rho among these rho,
70 // 1. input rho would be store to file for restart
71 // 2. calculated rho should be near with input rho when convergence has achieved
72 // 3. new rho should be input rho for next scf step.
73 virtual void getNewRho()
74 {
75 return;
76 }
77
78 // use occupied weights from INPUT and skip calculate_weights
79 // mohan updated on 2024-06-08
80
81 // if nupdown is not 0(TWO_EFERMI case),
82 // nelec_spin will be fixed and weights will be constrained
83 void init_nelec_spin();
84 // used to record number of electrons per spin index
85 // for NSPIN=2, it will record number of spin up and number of spin down
86 // for NSPIN=4, it will record total number, magnetization for x, y, z direction
87 std::vector<double> nelec_spin;
88
89 virtual void print_psi(const psi::Psi<double>& psi_in, const int istep = -1)
90 {
91 return;
92 }
93 virtual void print_psi(const psi::Psi<std::complex<double>>& psi_in, const int istep = -1)
94 {
95 return;
96 }
97
107 void init_scf(const int istep,
108 const UnitCell& ucell,
109 const Parallel_Grid& pgrid,
110 const ModuleBase::ComplexMatrix& strucfac,
111 const bool* numeric,
113 const void* wfcpw = nullptr);
114 std::string classname = "elecstate";
115
116 int iter = 0;
117 Potential* pot = nullptr;
118 Charge* charge = nullptr;
119 const K_Vectors* klist = nullptr;
120 const ModulePW::PW_Basis_Big* bigpw = nullptr;
121
122 public: // something aboud energies. See elecstate_energy.cpp
123 void cal_bandgap();
124 void cal_bandgap_updw();
125
126 double cal_delta_eband(const UnitCell& ucell) const;
127 double cal_delta_escf() const;
128
130 bool vnew_exist = false;
131 void cal_converged();
132 void cal_energies(const int type);
133 void set_exx(const double& Eexx);
134 void set_exx(const std::complex<double>& Eexx);
135
136 double get_hartree_energy();
137 double get_etot_efield();
138 double get_etot_gatefield();
139
140 double get_solvent_model_Ael();
141 double get_solvent_model_Acav();
142
144 {
145 return 0.0;
146 }
147
148 double get_dftu_energy();
149 double get_local_pp_energy();
150
153
154 // below defines the bandgap:
155
156 double bandgap = 0.0;
157 double bandgap_up = 0.0;
158 double bandgap_dw = 0.0;
159
162
163 public:
164
165 bool skip_weights = false;
166};
167
168} // namespace elecstate
169#endif
Definition charge.h:18
void set_rhopw(ModulePW::PW_Basis *rhopw_in)
Definition charge.cpp:51
Definition klist.h:13
Definition complexmatrix.h:14
Definition matrix.h:19
Definition pw_basis_big.h:16
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition symmetry.h:16
Definition parallel_grid.h:8
const System_para & globalv
Definition parameter.h:30
Definition unitcell.h:17
Definition elecstate.h:15
const ModulePW::PW_Basis_Big * bigpw
bigpw will be removed later
Definition elecstate.h:120
virtual void cal_tau(const psi::Psi< double > &psi)
Definition elecstate.h:58
ElecState(Charge *chr_in, ModulePW::PW_Basis *rhopw_in, ModulePW::PW_Basis_Big *bigpw_in)
Definition elecstate.h:20
fenergy f_en
energies contribute to the total free energy
Definition elecstate.h:151
void cal_bandgap()
calculate band gap
Definition elecstate_energy.cpp:13
void init_scf(const int istep, const UnitCell &ucell, const Parallel_Grid &pgrid, const ModuleBase::ComplexMatrix &strucfac, const bool *numeric, ModuleSymmetry::Symmetry &symm, const void *wfcpw=nullptr)
Init rho_core, init rho, renormalize rho, init pot.
Definition elecstate.cpp:30
double get_etot_efield()
Definition elecstate_energy_terms.cpp:17
virtual const double * getRho(int spin) const
Definition elecstate.cpp:13
const K_Vectors * klist
pointer to k points lists
Definition elecstate.h:119
virtual void cal_tau(const psi::Psi< std::complex< float > > &psi)
Definition elecstate.h:62
double bandgap_up
spin up bandgap
Definition elecstate.h:157
virtual void print_psi(const psi::Psi< double > &psi_in, const int istep=-1)
Definition elecstate.h:89
std::string classname
Definition elecstate.h:114
Potential * pot
pointer to potential
Definition elecstate.h:117
virtual double get_spin_constrain_energy()
Definition elecstate.h:143
double get_dftu_energy()
Definition elecstate_energy_terms.cpp:37
virtual void psiToRho(const psi::Psi< std::complex< double > > &psi)
Definition elecstate.h:46
void init_ks(Charge *chr_in, const K_Vectors *klist_in, int nk_in, ModulePW::PW_Basis *rhopw_in, const ModulePW::PW_Basis_Big *bigpw_in)
Definition elecstate.cpp:57
virtual void cal_tau(const psi::Psi< std::complex< double > > &psi)
Definition elecstate.h:54
ModuleBase::matrix vnew
Definition elecstate.h:129
double bandgap_dw
spin down bandgap
Definition elecstate.h:158
ModuleBase::matrix wg
occupation weight for each k-point and band
Definition elecstate.h:161
double get_hartree_energy()
Definition elecstate_energy_terms.cpp:12
double get_local_pp_energy()
Definition elecstate_energy_terms.cpp:42
double cal_delta_escf() const
calculate descf
Definition elecstate_energy.cpp:185
double bandgap
bandgap = E_{lumo} - E_{homo}
Definition elecstate.h:156
double cal_delta_eband(const UnitCell &ucell) const
calculate deband
Definition elecstate_energy.cpp:106
Charge * charge
pointer to charge density
Definition elecstate.h:118
void cal_energies(const int type)
calculate energies
Definition elecstate_energy.cpp:272
void init_nelec_spin()
Definition elecstate.cpp:20
virtual void print_psi(const psi::Psi< std::complex< double > > &psi_in, const int istep=-1)
Definition elecstate.h:93
double get_solvent_model_Acav()
Definition elecstate_energy_terms.cpp:32
double get_solvent_model_Ael()
Definition elecstate_energy_terms.cpp:27
void set_exx(const std::complex< double > &Eexx)
ElecState()
Definition elecstate.h:17
bool skip_weights
Definition elecstate.h:165
std::vector< double > nelec_spin
Definition elecstate.h:87
virtual void getNewRho()
Definition elecstate.h:73
void set_exx(const double &Eexx)
calculation if converged
Definition elecstate_exx.cpp:8
bool vnew_exist
Definition elecstate.h:130
virtual ~ElecState()
Definition elecstate.h:27
ModuleBase::matrix ekb
band energy at each k point, each band.
Definition elecstate.h:160
int iter
scf iteration
Definition elecstate.h:116
void cal_bandgap_updw()
calculate spin up & down band gap
Definition elecstate_energy.cpp:50
double get_etot_gatefield()
Definition elecstate_energy_terms.cpp:22
void cal_converged()
calculation if converged
Definition elecstate_energy.cpp:254
Efermi eferm
fermi energies
Definition elecstate.h:152
virtual void psiToRho(const psi::Psi< double > &psi)
Definition elecstate.h:50
Definition potential_new.h:49
Definition psi.h:37
This file contains all energies about first-principle calculations.
Definition cal_dm.h:10
Definition exx_lip.h:23
Parameter PARAM
Definition parameter.cpp:3
bool two_fermi
true if "nupdown" is set
Definition system_parameter.h:24
Definition fp_energy.h:63
bool two_efermi
Definition fp_energy.h:67
Definition fp_energy.h:17