ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <esolver_ks_pw.h>
Public Member Functions | |
ESolver_KS_PW () | |
~ESolver_KS_PW () | |
void | before_all_runners (UnitCell &ucell, const Input_para &inp) override |
Initialize of the first-principels energy solver. | |
double | cal_energy () override |
calculate total energy of a given system | |
void | cal_force (UnitCell &ucell, ModuleBase::matrix &force) override |
calcualte forces for the atoms in the given cell | |
void | cal_stress (UnitCell &ucell, ModuleBase::matrix &stress) override |
calcualte stress of given cell | |
void | after_all_runners (UnitCell &ucell) override |
perform post processing calculations | |
![]() | |
ESolver_KS () | |
Constructor. | |
virtual | ~ESolver_KS () |
Deconstructor. | |
virtual void | runner (UnitCell &ucell, const int istep) override |
run energy solver | |
![]() | |
ESolver_FP () | |
Constructor. | |
virtual | ~ESolver_FP () |
Deconstructor. | |
![]() | |
ESolver () | |
virtual | ~ESolver () |
Public Attributes | |
Exx_Helper< T, Device > | exx_helper |
![]() | |
bool | conv_esolver = true |
std::string | classname |
Protected Types | |
using | castmem_2d_d2h_op = base_device::memory::cast_memory_op< std::complex< double >, T, base_device::DEVICE_CPU, Device > |
Protected Member Functions | |
virtual void | before_scf (UnitCell &ucell, const int istep) override |
Something to do before SCF iterations. | |
virtual void | iter_init (UnitCell &ucell, const int istep, const int iter) override |
Something to do before hamilt2rho function in each iter loop. | |
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 | |
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. | |
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. | |
virtual void | others (UnitCell &ucell, const int istep) override |
virtual void | hamilt2rho_single (UnitCell &ucell, const int istep, const int iter, const double ethr) override |
virtual void | allocate_hamilt (const UnitCell &ucell) |
virtual void | deallocate_hamilt () |
![]() | |
void | hamilt2rho (UnitCell &ucell, const int istep, const int iter, const double ethr) |
Protected Attributes | |
psi::Psi< std::complex< double >, base_device::DEVICE_CPU > * | psi = nullptr |
hide the psi in ESolver_KS for tmp use | |
psi::PSIInit< T, Device > * | p_psi_init = nullptr |
Device * | ctx = {} |
base_device::AbacusDevice_t | device = {} |
psi::Psi< T, Device > * | kspw_psi = nullptr |
psi::Psi< std::complex< double >, Device > * | __kspw_psi = nullptr |
bool | already_initpsi = false |
![]() | |
hamilt::Hamilt< T, Device > * | p_hamilt = nullptr |
Hamiltonian. | |
ModulePW::PW_Basis_K * | pw_wfc = nullptr |
PW for wave functions, only used in KSDFT, not in OFDFT. | |
Charge_Mixing * | p_chgmix = nullptr |
Charge mixing method. | |
pseudopot_cell_vnl | ppcell |
nonlocal pseudopotentials | |
psi::Psi< T > * | psi = nullptr |
Electronic wavefunctions. | |
std::string | basisname |
double | esolver_KS_ne = 0.0 |
esolver_ks_lcao.cpp | |
double | diag_ethr |
number of electrons | |
double | scf_thr |
the threshold for diagonalization | |
double | scf_ene_thr |
scf density threshold | |
double | drho |
scf energy threshold | |
double | hsolver_error |
the difference between rho_in (before HSolver) and rho_out (After HSolver) | |
int | maxniter |
the error of HSolver | |
int | niter |
maximum iter steps for scf | |
bool | oscillate_esolver = false |
iter steps actually used in scf | |
![]() | |
elecstate::ElecState * | pelec = nullptr |
Electronic states. | |
K_Vectors | kv |
K points in Brillouin zone. | |
Charge | chr |
Electorn charge density. | |
ModulePW::PW_Basis * | pw_rho |
ModulePW::PW_Basis * | pw_rhod |
ModulePW::PW_Basis_Big * | pw_big |
dense grid for USPP | |
Parallel_Grid | Pgrid |
parallel for rho grid | |
Structure_Factor | sf |
Structure factors that used with plane-wave basis set. | |
pseudopot_cell_vl | locpp |
local pseudopotentials | |
Charge_Extra | CE |
charge extrapolation method | |
surchem | solvent |
solvent model | |
int | pw_rho_flag = false |
flag for pw_rho, 0: not initialized, 1: initialized | |
double | iter_time |
the start time of scf iteration | |
Private Types | |
using | Real = typename GetTypeReal< T >::type |
|
protected |
|
private |
ModuleESolver::ESolver_KS_PW< T, Device >::ESolver_KS_PW | ( | ) |
ModuleESolver::ESolver_KS_PW< T, Device >::~ESolver_KS_PW | ( | ) |
|
overridevirtual |
perform post processing calculations
1) after_all_runners in ESolver_KS
2) Compute density of states (DOS)
3) Compute LDOS
4) Calculate the spillage value, which are used to generate numerical atomic orbitals
5) Print out electronic wave functions in real space
6) Use Kubo-Greenwood method to compute conductivities
7) generate training data for ML-KEDF
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overrideprotectedvirtual |
Something to do after SCF iterations when SCF is converged or comes to the max iter step.
5) calculate Wannier functions in pw basis
6) calculate Berry phase polarization in pw basis
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
protectedvirtual |
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >.
|
overridevirtual |
Initialize of the first-principels energy solver.
SDFT only supports double precision currently
set the cell volume variable in pelec
3) inititlize the charge density.
4) initialize the potential.
5) Initalize local pseudopotential
6) Initalize non-local pseudopotential
7) Allocate and initialize psi
8) setup occupations
1) initialize "before_all_runniers" in ESolver_FP
3) it has been established that
4) setup the charge mixing parameters
5) ESolver depends on the Symmetry module
6) Setup the k points according to symmetry.
7) print information
8) setup plane wave for electronic wave functions
9) initialize the real-space uniform grid for FFT and parallel distribution of plane waves
10) calculate the structure factor
1) read pseudopotentials
2) initialie the plane wave basis for rho
3) initialize the double grid (for uspp) if necessary
4) print some information
5) initialize the charge extrapolation method if necessary
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overrideprotectedvirtual |
Something to do before SCF iterations.
1) Call before_scf() of ESolver_KS
2) Init variables (cell changed)
3) init Hamiltonian (cell changed)
Operators in HamiltPW should be reallocated once cell changed delete Hamilt if not first scf
4) Exx calculations
5) Renew local pseudopotential
6) Symmetrize the charge density (rho)
Symmetry_rho should behind init_scf, because charge should be initialized first. liuyu comment: Symmetry_rho should be located between init_rho and v_of_rho?
7) Calculate the effective potential with rho
liuyu move here 2023-10-09 D in uspp need vloc, thus behind init_scf() calculate the effective coefficient matrix for non-local pseudopotential projectors
8) Onsite projectors
9) Spin-constrained algorithms
10) DFT+U algorithm
10) Initialize wave functions
11) Exx calculations
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >, and ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overridevirtual |
calculate total energy of a given system
Implements ModuleESolver::ESolver.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overridevirtual |
calcualte forces for the atoms in the given cell
Implements ModuleESolver::ESolver.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overridevirtual |
calcualte stress of given cell
Implements ModuleESolver::ESolver.
Reimplemented in ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
protectedvirtual |
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >.
|
overrideprotectedvirtual |
the 5th function of ESolver_KS: hamilt2rho_single mohan add 2024-05-11
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >, and ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overrideprotectedvirtual |
Something to do after hamilt2rho function in each iter loop.
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >, and ModuleESolver::ESolver_SDFT_PW< T, Device >.
|
overrideprotectedvirtual |
Something to do before hamilt2rho function in each iter loop.
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
Reimplemented in ModuleESolver::ESolver_KS_LIP< T >.
|
overrideprotectedvirtual |
deal with exx and other calculation than scf/md/relax/cell-relax: such as nscf, get_wf and get_pchg
Reimplemented from ModuleESolver::ESolver.
|
overrideprotectedvirtual |
<Temporary> It should be replaced by a function in Hamilt Class
Reimplemented from ModuleESolver::ESolver_KS< T, Device >.
|
protected |
|
protected |
|
protected |
|
protected |
Exx_Helper<T, Device> ModuleESolver::ESolver_KS_PW< T, Device >::exx_helper |
|
protected |
|
protected |
|
protected |
hide the psi in ESolver_KS for tmp use