JDFTx  1.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ExCorr_internal_GGA.h File Reference

Classes

class  FunctionalGGA
 Common interface to the compute kernels for GGA-like functionals. More...
 
struct  GGA_calc< variant, spinScaling, nCount >
 
struct  GGA_calc< variant, true, nCount >
 Specialization of GGA_calc for spin-scaling functionals (exchange and KE) More...
 
struct  GGA_calc< variant, false, nCount >
 Specialization of GGA_calc for functionals that do not spin-scale (correlation) More...
 
struct  GGA_calc< GGA_X_GLLBsc, true, nCount >
 
struct  GGA_calc< GGA_X_LB94, true, nCount >
 

Macros

#define SwitchTemplate_GGA(variant, nCount, fTemplate, argList)
 

Enumerations

enum  GGA_Variant {
  GGA_X_PBE, GGA_C_PBE, GGA_X_PBEsol, GGA_C_PBEsol,
  GGA_X_PW91, GGA_C_PW91, GGA_X_wPBE_SR, GGA_X_GLLBsc,
  GGA_X_LB94, GGA_KE_VW, GGA_KE_PW91
}
 Available GGA functionals. More...
 

Functions

template<GGA_Variant variant>
__hostanddev__ double GGA_eval (double rs, double s2, double &e_rs, double &e_s2)
 
template<GGA_Variant variant>
__hostanddev__ double GGA_eval (double rs, double zeta, double g, double t2, double &e_rs, double &e_zeta, double &e_g, double &e_t2)
 
__hostanddev__ double slaterExchange (double rs, double &e_rs)
 Slater exchange as a function of rs (PER PARTICLE):
 
__hostanddev__ double GGA_PBE_exchange (const double kappa, const double mu, double rs, double s2, double &e_rs, double &e_s2)
 PBE GGA exchange [JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)].
 
template<>
__hostanddev__ double GGA_eval< GGA_X_PBE > (double rs, double s2, double &e_rs, double &e_s2)
 PBE GGA exchange [JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)].
 
template<>
__hostanddev__ double GGA_eval< GGA_X_PBEsol > (double rs, double s2, double &e_rs, double &e_s2)
 PBEsol GGA exchange [JP Perdew et al, Phys. Rev. Lett. 100, 136406 (2008)].
 
__hostanddev__ double GGA_PW91_Enhancement (double s2, double &F_s2, const double P, const double Q, const double R, const double S, const double T, const double U)
 
template<>
__hostanddev__ double GGA_eval< GGA_X_PW91 > (double rs, double s2, double &e_rs, double &e_s2)
 PW91 GGA exchange [JP Perdew et al, Phys. Rev. B 46, 6671 (1992)].
 
template<int n>
__hostanddev__ double integralErfcGaussian (double A, double B, double &result_A, double &result_B)
 Evaluate $ \int_0^\infty dy y^n e^{-Ay^2} \textrm{erfc}{By} $ and its derivatives.
 
template<>
__hostanddev__ double integralErfcGaussian< 1 > (double A, double B, double &result_A, double &result_B)
 
template<>
__hostanddev__ double integralErfcGaussian< 2 > (double A, double B, double &result_A, double &result_B)
 
template<>
__hostanddev__ double integralErfcGaussian< 3 > (double A, double B, double &result_A, double &result_B)
 
template<>
__hostanddev__ double integralErfcGaussian< 5 > (double A, double B, double &result_A, double &result_B)
 
template<>
__hostanddev__ double GGA_eval< GGA_X_wPBE_SR > (double rs, double s2, double &e_rs, double &e_s2)
 
__hostanddev__ double PW91_H0 (const double gamma, double beta, double g3, double t2, double ecUnif, double &H0_beta, double &H0_g3, double &H0_t2, double &H0_ecUnif)
 
__hostanddev__ double GGA_PBE_correlation (const double beta, const double beta_rs, double rs, double zeta, double g, double t2, double &e_rs, double &e_zeta, double &e_g, double &e_t2)
 
template<>
__hostanddev__ double GGA_eval< GGA_C_PBE > (double rs, double zeta, double g, double t2, double &e_rs, double &e_zeta, double &e_g, double &e_t2)
 PBE GGA correlation [JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)].
 
template<>
__hostanddev__ double GGA_eval< GGA_C_PBEsol > (double rs, double zeta, double g, double t2, double &e_rs, double &e_zeta, double &e_g, double &e_t2)
 PBEsol GGA correlation [JP Perdew et al, Phys. Rev. Lett. 100, 136406 (2008)].
 
template<>
__hostanddev__ double GGA_eval< GGA_C_PW91 > (double rs, double zeta, double g, double t2, double &e_rs, double &e_zeta, double &e_g, double &e_t2)
 PW91 GGA correlation [JP Perdew et al, Phys. Rev. B 46, 6671 (1992)].
 
__hostanddev__ double TFKinetic (double rs, double &e_rs)
 Thomas Fermi kinetic energy as a function of rs (PER PARTICLE):
 
template<>
__hostanddev__ double GGA_eval< GGA_KE_VW > (double rs, double s2, double &e_rs, double &e_s2)
 von Weisacker gradient correction to Thomas Fermi LDA kinetic energy (with correct gradient expansion parameter lambda)
 
template<>
__hostanddev__ double GGA_eval< GGA_KE_PW91 > (double rs, double s2, double &e_rs, double &e_s2)
 PW91k GGA kinetic energy [PRB 46, 6671-6687 (1992)] parameterized by Lembarki and Chermette [PRA 50, 5328-5331 (1994)].
 

Detailed Description

Shared CPU-GPU implementation of GGA functionals

Macro Definition Documentation

#define SwitchTemplate_GGA (   variant,
  nCount,
  fTemplate,
  argList 
)
Value:
switch(variant) \
{ case GGA_X_PBE: fTemplate< GGA_X_PBE, true, nCount> argList; break; \
case GGA_C_PBE: fTemplate< GGA_C_PBE, false, nCount> argList; break; \
case GGA_X_PBEsol: fTemplate< GGA_X_PBEsol, true, nCount> argList; break; \
case GGA_C_PBEsol: fTemplate< GGA_C_PBEsol, false, nCount> argList; break; \
case GGA_X_PW91: fTemplate< GGA_X_PW91, true, nCount> argList; break; \
case GGA_C_PW91: fTemplate< GGA_C_PW91, false, nCount> argList; break; \
case GGA_X_wPBE_SR: fTemplate< GGA_X_wPBE_SR, true, nCount> argList; break; \
case GGA_X_GLLBsc: fTemplate< GGA_X_GLLBsc, true, nCount> argList; break; \
case GGA_X_LB94: fTemplate< GGA_X_LB94, true, nCount> argList; break; \
case GGA_KE_VW: fTemplate< GGA_KE_VW, true, nCount> argList; break; \
case GGA_KE_PW91: fTemplate< GGA_KE_PW91, true, nCount> argList; break; \
default: break; \
}
Perdew-Wang 1991 GGA exchange.
Definition: ExCorr_internal_GGA.h:34
Semi-local part of GLLB-sc exchange (potential-only, equal to 2x PBEsol per-particle energy) ...
Definition: ExCorr_internal_GGA.h:37
Perdew-Burke-Ernzerhof GGA exchange.
Definition: ExCorr_internal_GGA.h:30
van Leeuwen-Baerends asymptotically-correct exchange potential correction (potential-only) ...
Definition: ExCorr_internal_GGA.h:38
Short-ranged part of omega-PBE exchange (used in HSE06 hybrid)
Definition: ExCorr_internal_GGA.h:36
Perdew-Burke-Ernzerhof GGA exchange reparametrized for solids.
Definition: ExCorr_internal_GGA.h:32
Teter GGA kinetic energy.
Definition: ExCorr_internal_GGA.h:40
Perdew-Burke-Ernzerhof GGA correlation reparametrized for solids.
Definition: ExCorr_internal_GGA.h:33
Perdew-Wang 1991 GGA correlation.
Definition: ExCorr_internal_GGA.h:35
Perdew-Burke-Ernzerhof GGA correlation.
Definition: ExCorr_internal_GGA.h:31
von Weisacker gradient correction to Thomas Fermi LDA kinetic energy
Definition: ExCorr_internal_GGA.h:39

Switch a function fTemplate templated over GGA variant, spin scaling behavior and spin count, over all supported functionals with nCount being a compile-time constant NOTE: The second argument to fTemplate must correspond to the spin-scaling behavior of each functional (Used by the thread and gpu launchers of FunctionalGGA::evaluate) (This is needed to switch from a run-time variant to a compile-time template argument)

Enumeration Type Documentation

Available GGA functionals.

Enumerator
GGA_X_PBE 

Perdew-Burke-Ernzerhof GGA exchange.

GGA_C_PBE 

Perdew-Burke-Ernzerhof GGA correlation.

GGA_X_PBEsol 

Perdew-Burke-Ernzerhof GGA exchange reparametrized for solids.

GGA_C_PBEsol 

Perdew-Burke-Ernzerhof GGA correlation reparametrized for solids.

GGA_X_PW91 

Perdew-Wang 1991 GGA exchange.

GGA_C_PW91 

Perdew-Wang 1991 GGA correlation.

GGA_X_wPBE_SR 

Short-ranged part of omega-PBE exchange (used in HSE06 hybrid)

GGA_X_GLLBsc 

Semi-local part of GLLB-sc exchange (potential-only, equal to 2x PBEsol per-particle energy)

GGA_X_LB94 

van Leeuwen-Baerends asymptotically-correct exchange potential correction (potential-only)

GGA_KE_VW 

von Weisacker gradient correction to Thomas Fermi LDA kinetic energy

GGA_KE_PW91 

Teter GGA kinetic energy.

Function Documentation

template<GGA_Variant variant>
__hostanddev__ double GGA_eval ( double  rs,
double  s2,
double &  e_rs,
double &  e_s2 
)

GGA interface inner layer for spin-scaling functionals (specialized for each such functional): Return energy density given rs and dimensionless gradient squared s2, and set gradients w.r.t rs and s2

template<GGA_Variant variant>
__hostanddev__ double GGA_eval ( double  rs,
double  zeta,
double  g,
double  t2,
double &  e_rs,
double &  e_zeta,
double &  e_g,
double &  e_t2 
)

GGA interface inner layer for functionals that do not spin-scale (specialized for each such functional): Return energy density given rs, zeta, g(zeta) and dimensionless gradient squared t2, and set gradients w.r.t rs, zeta, g(zeta) and t2 (see PW91 ref for definitions)

template<>
__hostanddev__ double GGA_eval< GGA_X_wPBE_SR > ( double  rs,
double  s2,
double &  e_rs,
double &  e_s2 
)

Short-ranged omega-PBE GGA exchange - used in the HSE06 hybrid functional [J Heyd, G E Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 3865 (2003)]

__hostanddev__ double GGA_PBE_correlation ( const double  beta,
const double  beta_rs,
double  rs,
double  zeta,
double  g,
double  t2,
double &  e_rs,
double &  e_zeta,
double &  e_g,
double &  e_t2 
)

PBE GGA correlation [JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)] If beta depends on rs (as in revTPSS), beta_rs (=dbeta/drs) is propagated to e_rs

__hostanddev__ double GGA_PW91_Enhancement ( double  s2,
double &  F_s2,
const double  P,
const double  Q,
const double  R,
const double  S,
const double  T,
const double  U 
)

Functional form of the PW91 Exchange Enhancement factor (also used in some KE functionals) Implements equation (8) in [JP Perdew et al, Phys. Rev. B 46, 6671 (1992)] and its gradients P,Q,R,S,T,U are the parameters in order of appearance in that equation

__hostanddev__ double PW91_H0 ( const double  gamma,
double  beta,
double  g3,
double  t2,
double  ecUnif,
double &  H0_beta,
double &  H0_g3,
double &  H0_t2,
double &  H0_ecUnif 
)

The H0 function (equations 13,14) of PW91 and its derivatives. Also the H fuunction (equations 7,8) of PBE. The notation is a mixture, picking the shortest of both references: using g from PW91 (phi in PBE) and gamma from PBE (beta^2/(2*alpha) in PW91).