ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
KEDF_LKT Class Reference

A class which calculates the kinetic energy, potential, and stress with Luo-Karasiev-Trickey (LKT) KEDF. See Luo K, Karasiev V V, Trickey S B. Physical Review B, 2018, 98(4): 041111. More...

#include <kedf_lkt.h>

Collaboration diagram for KEDF_LKT:

Public Member Functions

 KEDF_LKT ()
 
 ~KEDF_LKT ()
 
void set_para (double dV, double lkt_a)
 
double get_energy (const double *const *prho, ModulePW::PW_Basis *pw_rho)
 Get the energy of LKT KEDF.
 
double get_energy_density (const double *const *prho, int is, int ir, ModulePW::PW_Basis *pw_rho)
 Get the energy density of LKT KEDF.
 
void tau_lkt (const double *const *prho, ModulePW::PW_Basis *pw_rho, double *rtau_lkt)
 
void lkt_potential (const double *const *prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential)
 Get the potential of LKT KEDF, and add it into rpotential, and the LKT energy will be calculated and stored in this->lkt_energy.
 
void get_stress (const double *const *prho, ModulePW::PW_Basis *pw_rho)
 Get the stress of LKT KEDF, and store it into this->stress.
 

Public Attributes

double lkt_energy = 0.
 
ModuleBase::matrix stress
 

Private Member Functions

void nabla (const double *pinput, ModulePW::PW_Basis *pw_rho, double **routput)
 Caculate routput = nabla(pinput)
 
void divergence (const double *const *pinput, ModulePW::PW_Basis *pw_rho, double *routput)
 Caculate routput = nabla dot pinput.
 
void get_as (const double *prho, const double *const *pnabla_rho, const int nrxx, double *as)
 Caculate as = lkt_a * s, s = c_s * |\nabla \rho|/\rho^{4/3}.
 

Private Attributes

double dV_ = 0.
 
const double c_tf_
 
const double s_coef_ = 1.0 / (2. * std::pow(3 * std::pow(M_PI, 2.0), 1.0 / 3.0))
 
double lkt_a_ = 1.3
 

Detailed Description

A class which calculates the kinetic energy, potential, and stress with Luo-Karasiev-Trickey (LKT) KEDF. See Luo K, Karasiev V V, Trickey S B. Physical Review B, 2018, 98(4): 041111.

Author
sunliang on 2023-04-28

Constructor & Destructor Documentation

◆ KEDF_LKT()

KEDF_LKT::KEDF_LKT ( )
inline
Here is the call graph for this function:

◆ ~KEDF_LKT()

KEDF_LKT::~KEDF_LKT ( )
inline

Member Function Documentation

◆ divergence()

void KEDF_LKT::divergence ( const double *const *  pinput,
ModulePW::PW_Basis pw_rho,
double *  routput 
)
private

Caculate routput = nabla dot pinput.

Parameters
[in]pinput
[in]pw_rhopw basis
[out]routput
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_as()

void KEDF_LKT::get_as ( const double *  prho,
const double *const *  pnabla_rho,
const int  nrxx,
double *  as 
)
private

Caculate as = lkt_a * s, s = c_s * |\nabla \rho|/\rho^{4/3}.

Parameters
[in]prhocharge density
[in]pnabla_rhonabla rho
[in]nrxxthe number of real space grid
[out]aslkt_a * s
Here is the caller graph for this function:

◆ get_energy()

double KEDF_LKT::get_energy ( const double *const *  prho,
ModulePW::PW_Basis pw_rho 
)

Get the energy of LKT KEDF.

\[ E_{LKT} = \int{tau_{TF}/\cosh(a * s)}, s = c_s * |\nabla \rho|/\rho^{4/3} \]

Parameters
prhocharge density
pw_rhopw basis
Returns
the energy of LKT KEDF
Here is the call graph for this function:

◆ get_energy_density()

double KEDF_LKT::get_energy_density ( const double *const *  prho,
int  is,
int  ir,
ModulePW::PW_Basis pw_rho 
)

Get the energy density of LKT KEDF.

\[ \tau_{LKT} = tau_{TF}/\cosh(a * s) \]

Parameters
prhocharge density
isthe index of spin
irthe index of real space grid
pw_rhopw basis
Returns
the energy density of LKT KEDF
Here is the call graph for this function:

◆ get_stress()

void KEDF_LKT::get_stress ( const double *const *  prho,
ModulePW::PW_Basis pw_rho 
)

Get the stress of LKT KEDF, and store it into this->stress.

Parameters
prhocharge density
pw_rhopw basis
Here is the call graph for this function:
Here is the caller graph for this function:

◆ lkt_potential()

void KEDF_LKT::lkt_potential ( const double *const *  prho,
ModulePW::PW_Basis pw_rho,
ModuleBase::matrix rpotential 
)

Get the potential of LKT KEDF, and add it into rpotential, and the LKT energy will be calculated and stored in this->lkt_energy.

\[ V_{LKT} =5/3 *\tau_{TF}/\rho * [1/\cosh(as)+5/4 * as * \tanh(as)/\cosh(as)] \]

\[ +\nabla\cdot(\tau_{TF} * a*\tanh(as)/\cosh(as) * s/|\nabla\rho|^2 * \nabla\rho). \]

Parameters
prhocharge density
pw_rhopw basis
rpotentialrpotential => rpotential + V_{LKT}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nabla()

void KEDF_LKT::nabla ( const double *  pinput,
ModulePW::PW_Basis pw_rho,
double **  routput 
)
private

Caculate routput = nabla(pinput)

Parameters
[in]pinput
[in]pw_rhopw basis
[out]routput
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_para()

void KEDF_LKT::set_para ( double  dV,
double  lkt_a 
)
Here is the caller graph for this function:

◆ tau_lkt()

void KEDF_LKT::tau_lkt ( const double *const *  prho,
ModulePW::PW_Basis pw_rho,
double *  rtau_lkt 
)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ c_tf_

const double KEDF_LKT::c_tf_
private
Initial value:
= 3.0 / 10.0 * std::pow(3 * std::pow(M_PI, 2.0), 2.0 / 3.0)
* 2

◆ dV_

double KEDF_LKT::dV_ = 0.
private

◆ lkt_a_

double KEDF_LKT::lkt_a_ = 1.3
private

◆ lkt_energy

double KEDF_LKT::lkt_energy = 0.

◆ s_coef_

const double KEDF_LKT::s_coef_ = 1.0 / (2. * std::pow(3 * std::pow(M_PI, 2.0), 1.0 / 3.0))
private

◆ stress

ModuleBase::matrix KEDF_LKT::stress

The documentation for this class was generated from the following files: