ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Classes | Functions
ModuleESolver Namespace Reference

The First-Principles (FP) Energy Solver Class. More...

Classes

class  ESolver
 
class  ESolver_DM2rho
 
class  ESolver_DoubleXC
 
class  ESolver_DP
 
class  ESolver_FP
 
class  ESolver_GetS
 
class  ESolver_KS
 
class  ESolver_KS_LCAO
 
class  ESolver_KS_LCAO_TDDFT
 
class  ESolver_KS_LIP
 
class  ESolver_KS_PW
 
class  ESolver_LJ
 
class  ESolver_NEP
 
class  ESolver_OF
 
class  ESolver_OF_TDDFT
 
class  ESolver_SDFT_PW
 

Functions

std::string determine_type ()
 A subrutine called in init_esolver() This function returns type of ESolver Based on PARAM.inp.basis_type and PARAM.inp.esolver_type.
 
ESolverinit_esolver (const Input_para &inp, UnitCell &ucell)
 Determine and initialize an ESolver based on input information.
 
template<typename TK >
void init_dftu_lcao (const int istep, const int iter, const Input_para &inp, void *dftu, void *dm, const UnitCell &ucell, double **rho, const int nrxx)
 Initialize DFT+U for LCAO method in iter_init.
 
template<typename TK >
void finish_dftu_lcao (const int iter, const bool conv_esolver, const Input_para &inp, void *dftu, const UnitCell &ucell, const std::vector< std::vector< TK > > &dm_vec, const K_Vectors &kv, const double mixing_beta, void *hamilt_lcao)
 Finish DFT+U calculation for LCAO method in iter_finish.
 
template void init_dftu_lcao< double > (const int istep, const int iter, const Input_para &inp, void *dftu, void *dm, const UnitCell &ucell, double **rho, const int nrxx)
 Template instantiation.
 
template void init_dftu_lcao< std::complex< double > > (const int istep, const int iter, const Input_para &inp, void *dftu, void *dm, const UnitCell &ucell, double **rho, const int nrxx)
 
template void finish_dftu_lcao< double > (const int iter, const bool conv_esolver, const Input_para &inp, void *dftu, const UnitCell &ucell, const std::vector< std::vector< double > > &dm_vec, const K_Vectors &kv, const double mixing_beta, void *hamilt_lcao)
 
template void finish_dftu_lcao< std::complex< double > > (const int iter, const bool conv_esolver, const Input_para &inp, void *dftu, const UnitCell &ucell, const std::vector< std::vector< std::complex< double > > > &dm_vec, const K_Vectors &kv, const double mixing_beta, void *hamilt_lcao)
 
template<typename TK >
void init_deltaspin_lcao (const UnitCell &ucell, const Input_para &inp, void *pv, const K_Vectors &kv, void *p_hamilt, void *psi, void *dm, void *pelec)
 Initialize DeltaSpin for LCAO method.
 
template<typename TK >
void cal_mi_lcao_wrapper (const int iter, const Input_para &inp)
 Calculate magnetic moments for DeltaSpin in LCAO method.
 
template<typename TK >
bool run_deltaspin_lambda_loop_lcao (const int iter, const double drho, const Input_para &inp)
 Run DeltaSpin lambda loop for LCAO method.
 
template void init_deltaspin_lcao< double > (const UnitCell &ucell, const Input_para &inp, void *pv, const K_Vectors &kv, void *p_hamilt, void *psi, void *dm, void *pelec)
 Template instantiation.
 
template void init_deltaspin_lcao< std::complex< double > > (const UnitCell &ucell, const Input_para &inp, void *pv, const K_Vectors &kv, void *p_hamilt, void *psi, void *dm, void *pelec)
 
template void cal_mi_lcao_wrapper< double > (const int iter, const Input_para &inp)
 
template void cal_mi_lcao_wrapper< std::complex< double > > (const int iter, const Input_para &inp)
 
template bool run_deltaspin_lambda_loop_lcao< double > (const int iter, const double drho, const Input_para &inp)
 
template bool run_deltaspin_lambda_loop_lcao< std::complex< double > > (const int iter, const double drho, const Input_para &inp)
 

Detailed Description

The First-Principles (FP) Energy Solver Class.

This class represents components that needed in first-principles energy solver, such as the plane wave basis, the structure factors, and the k points.

Function Documentation

◆ cal_mi_lcao_wrapper()

template<typename TK >
void ModuleESolver::cal_mi_lcao_wrapper ( const int  iter,
const Input_para inp 
)

Calculate magnetic moments for DeltaSpin in LCAO method.

This function calculates the magnetic moments for each atom in the DeltaSpin method.

Parameters
iterCurrent iteration number
inpInput parameters
Here is the call graph for this function:

◆ cal_mi_lcao_wrapper< double >()

template void ModuleESolver::cal_mi_lcao_wrapper< double > ( const int  iter,
const Input_para inp 
)

◆ cal_mi_lcao_wrapper< std::complex< double > >()

template void ModuleESolver::cal_mi_lcao_wrapper< std::complex< double > > ( const int  iter,
const Input_para inp 
)

◆ determine_type()

std::string ModuleESolver::determine_type ( )

A subrutine called in init_esolver() This function returns type of ESolver Based on PARAM.inp.basis_type and PARAM.inp.esolver_type.

Returns
[out] std::string The type of ESolver
Here is the call graph for this function:
Here is the caller graph for this function:

◆ finish_dftu_lcao()

template<typename TK >
void ModuleESolver::finish_dftu_lcao ( const int  iter,
const bool  conv_esolver,
const Input_para inp,
void *  dftu,
const UnitCell ucell,
const std::vector< std::vector< TK > > &  dm_vec,
const K_Vectors kv,
const double  mixing_beta,
void *  hamilt_lcao 
)

Finish DFT+U calculation for LCAO method in iter_finish.

This function handles the DFT+U finalization during the SCF iteration. It calculates the occupation matrix and energy correction if needed.

Parameters
iterCurrent SCF iteration
conv_esolverWhether ESolver has converged
inpInput parameters
dftuDFT+U object
ucellUnit cell
dm_vecDensity matrix vector
kvK-vectors
mixing_betaMixing beta parameter
hamilt_lcaoHamiltonian LCAO object

old DFT+U method calculates energy correction in esolver, new DFT+U method calculates energy in Hamiltonian

use the converged occupation matrix for next MD/Relax SCF calculation

◆ finish_dftu_lcao< double >()

template void ModuleESolver::finish_dftu_lcao< double > ( const int  iter,
const bool  conv_esolver,
const Input_para inp,
void *  dftu,
const UnitCell ucell,
const std::vector< std::vector< double > > &  dm_vec,
const K_Vectors kv,
const double  mixing_beta,
void *  hamilt_lcao 
)

◆ finish_dftu_lcao< std::complex< double > >()

template void ModuleESolver::finish_dftu_lcao< std::complex< double > > ( const int  iter,
const bool  conv_esolver,
const Input_para inp,
void *  dftu,
const UnitCell ucell,
const std::vector< std::vector< std::complex< double > > > &  dm_vec,
const K_Vectors kv,
const double  mixing_beta,
void *  hamilt_lcao 
)

◆ init_deltaspin_lcao()

template<typename TK >
void ModuleESolver::init_deltaspin_lcao ( const UnitCell ucell,
const Input_para inp,
void *  pv,
const K_Vectors kv,
void *  p_hamilt,
void *  psi,
void *  dm,
void *  pelec 
)

Initialize DeltaSpin for LCAO method.

This function initializes the DeltaSpin calculation by setting up the SpinConstrain object with input parameters.

Parameters
ucellUnit cell
inpInput parameters
pvParallel orbitals
kvK-vectors
p_hamiltPointer to Hamiltonian
psiPointer to wave functions
dmDensity matrix
pelecPointer to electronic state
Here is the call graph for this function:

◆ init_deltaspin_lcao< double >()

template void ModuleESolver::init_deltaspin_lcao< double > ( const UnitCell ucell,
const Input_para inp,
void *  pv,
const K_Vectors kv,
void *  p_hamilt,
void *  psi,
void *  dm,
void *  pelec 
)

Template instantiation.

◆ init_deltaspin_lcao< std::complex< double > >()

template void ModuleESolver::init_deltaspin_lcao< std::complex< double > > ( const UnitCell ucell,
const Input_para inp,
void *  pv,
const K_Vectors kv,
void *  p_hamilt,
void *  psi,
void *  dm,
void *  pelec 
)

◆ init_dftu_lcao()

template<typename TK >
void ModuleESolver::init_dftu_lcao ( const int  istep,
const int  iter,
const Input_para inp,
void *  dftu,
void *  dm,
const UnitCell ucell,
double **  rho,
const int  nrxx 
)

Initialize DFT+U for LCAO method in iter_init.

This function handles the DFT+U initialization during the SCF iteration. It sets the density matrix and calculates Slater integrals if needed.

Parameters
istepCurrent ionic step
iterCurrent SCF iteration
inpInput parameters
dftuDFT+U object
dmDensity matrix
ucellUnit cell
rhoCharge density
nrxxNumber of real space grid points

Calculate U and J if Yukawa potential is used

◆ init_dftu_lcao< double >()

template void ModuleESolver::init_dftu_lcao< double > ( const int  istep,
const int  iter,
const Input_para inp,
void *  dftu,
void *  dm,
const UnitCell ucell,
double **  rho,
const int  nrxx 
)

Template instantiation.

◆ init_dftu_lcao< std::complex< double > >()

template void ModuleESolver::init_dftu_lcao< std::complex< double > > ( const int  istep,
const int  iter,
const Input_para inp,
void *  dftu,
void *  dm,
const UnitCell ucell,
double **  rho,
const int  nrxx 
)

◆ init_esolver()

ESolver * ModuleESolver::init_esolver ( const Input_para inp,
UnitCell ucell 
)

Determine and initialize an ESolver based on input information.

This function determines the type of ESolver to create based on input information and initializes the corresponding ESolver child class. It supports various ESolver types including ksdft_pw, ksdft_lcao, ksdft_lcao_tddft, sdft_pw, ofdft, lj_pot, and dp_pot.

Returns
[out] A pointer to an ESolver object that will be initialized.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run_deltaspin_lambda_loop_lcao()

template<typename TK >
bool ModuleESolver::run_deltaspin_lambda_loop_lcao ( const int  iter,
const double  drho,
const Input_para inp 
)

Run DeltaSpin lambda loop for LCAO method.

This function handles the lambda loop optimization for the DeltaSpin method in LCAO calculations. It determines whether to skip the Hamiltonian solve based on the convergence status of magnetic moments.

Parameters
iterCurrent iteration number
drhoCharge density convergence criterion
inpInput parameters
Returns
bool Whether to skip the Hamiltonian solve

optimize lambda to get target magnetic moments, but the lambda is not near target

optimize lambda to get target magnetic moments, but the lambda is not near target

Here is the call graph for this function:

◆ run_deltaspin_lambda_loop_lcao< double >()

template bool ModuleESolver::run_deltaspin_lambda_loop_lcao< double > ( const int  iter,
const double  drho,
const Input_para inp 
)

◆ run_deltaspin_lambda_loop_lcao< std::complex< double > >()

template bool ModuleESolver::run_deltaspin_lambda_loop_lcao< std::complex< double > > ( const int  iter,
const double  drho,
const Input_para inp 
)