ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
kedf_xwm.h
Go to the documentation of this file.
1#ifndef KEDF_XWM_H
2#define KEDF_XWM_H
3
5#include "source_base/timer.h"
7
14{
15 public:
17 {
18 this->stress.create(3, 3);
19 }
21
22 void set_para(double dV,
23 double rho_ref,
24 double kappa,
25 double nelec,
26 double tf_weight,
27 double vw_weight,
28 ModulePW::PW_Basis* pw_rho);
29
30
31 double get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho);
32 double get_energy_density(const double* const* prho, int is, int ir, ModulePW::PW_Basis* pw_rho);
33 void tau_xwm(const double* const* prho, ModulePW::PW_Basis* pw_rho, double* rtau_xwm);
34 void xwm_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpotential);
35 void get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho, double vw_weight);
36 double xwm_energy = 0.;
38
39 private:
40 void multi_kernel(const double* const* prho, const double* kernel, double** rkernel_rho, double exponent, ModulePW::PW_Basis* pw_rho);
41 void fill_kernel(double tf_weight, double vw_weight, ModulePW::PW_Basis* pw_rho);
42
43 double dV_ = 0.;
44 double rho0_ = 0.; // average rho
45 double rho_ref_ = 0.; // reference rho
46 double kf_ = 0.; // Fermi vector kF = (3 pi^2 rho_star_)^(1/3)
47 double tkf_ = 0.; // 2 * kF
48 double kappa_ = 0.;
49 double c_kernel = std::pow(ModuleBase::PI, 4./3.) / std::pow(3., 1. / 3.) * 2.; // multiply by 2 to convert unit from Hartree to Ry
50 double c_0 = 0.; // coef of T0, c_0 = 18 / (6 * kappa + 5) ^ 2
51 double c_1 = 0.; // coef of T1, c_1 = [(kappa + 5/6)(kappa + 11/6)] ^ -1
52 double c_2 = 0.; // coef of T1, c_2 = - (kappa + 5/6) ^ -2 * rho_ref_
53 double kappa_5_6 = 0.; // kappa + 5/6
54 double kappa_11_6 = 0.; // kappa + 11/6
55 double kappa_1_6 = 0.; // kappa - 1/6
56 std::vector<double> kernel1_ = {}; // w1 in PHYSICAL REVIEW B 110, 085113 (2024)
57 std::vector<double> kernel2_ = {}; // w2 in PHYSICAL REVIEW B 110, 085113 (2024)
58};
59#endif
A class which calculates the kinetic energy, potential, and stress with Xie-Wang-Morales (XWM) KEDF....
Definition kedf_xwm.h:14
void multi_kernel(const double *const *prho, const double *kernel, double **rkernel_rho, double exponent, ModulePW::PW_Basis *pw_rho)
Calculate \int{W(r-r')rho^{exponent}(r') dr'}.
Definition kedf_xwm.cpp:280
KEDF_XWM()
Definition kedf_xwm.h:16
double dV_
Definition kedf_xwm.h:43
double kappa_
Definition kedf_xwm.h:48
double rho_ref_
Definition kedf_xwm.h:45
void xwm_potential(const double *const *prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential)
Get the potential of XWM KEDF, and add it into rpotential, and the XWM energy is stored in this->xwm_...
Definition kedf_xwm.cpp:203
void tau_xwm(const double *const *prho, ModulePW::PW_Basis *pw_rho, double *rtau_xwm)
Get the kinetic energy of XWM KEDF, and add it onto rtau_xwm.
Definition kedf_xwm.cpp:157
double kappa_11_6
Definition kedf_xwm.h:54
double kappa_5_6
Definition kedf_xwm.h:53
double kf_
Definition kedf_xwm.h:46
ModuleBase::matrix stress
Definition kedf_xwm.h:37
double c_2
Definition kedf_xwm.h:52
double tkf_
Definition kedf_xwm.h:47
std::vector< double > kernel2_
Definition kedf_xwm.h:57
~KEDF_XWM()
Definition kedf_xwm.h:20
double c_kernel
Definition kedf_xwm.h:49
double rho0_
Definition kedf_xwm.h:44
double kappa_1_6
Definition kedf_xwm.h:55
std::vector< double > kernel1_
Definition kedf_xwm.h:56
void get_stress(const double *const *prho, ModulePW::PW_Basis *pw_rho, double vw_weight)
Get the stress of XWM KEDF, and store it into this->stress.
Definition kedf_xwm.cpp:266
double c_1
Definition kedf_xwm.h:51
double get_energy_density(const double *const *prho, int is, int ir, ModulePW::PW_Basis *pw_rho)
Get the energy density of XWM KEDF.
Definition kedf_xwm.cpp:118
void fill_kernel(double tf_weight, double vw_weight, ModulePW::PW_Basis *pw_rho)
Fill the kernel (this->kernel_)
Definition kedf_xwm.cpp:312
double get_energy(const double *const *prho, ModulePW::PW_Basis *pw_rho)
Get the energy of XWM KEDF.
Definition kedf_xwm.cpp:65
double c_0
Definition kedf_xwm.h:50
double xwm_energy
Definition kedf_xwm.h:36
void set_para(double dV, double rho_ref, double kappa, double nelec, double tf_weight, double vw_weight, ModulePW::PW_Basis *pw_rho)
Set the parameters of XWM KEDF, and initialize kernel.
Definition kedf_xwm.cpp:18
Definition matrix.h:19
void create(const int nrow, const int ncol, const bool flag_zero=true)
Definition matrix.cpp:122
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
const double PI
Definition constants.h:19