Libxc:manual
From OctopusWiki
Note further, that the interface as been enhanced with optional arguments and also a bit modified
Note that "provides" is now "flags", its values have changed, and more functions take the number-of-points argument, which will be ready in the upcoming 1.0 release.
Contents |
An example
Probably the best to explain the usage of libxc is through an example. This snippet is taken from the file testsuite/xc-get_data.c
switch(xc_family_from_id(xc.functional))
{
case XC_FAMILY_LDA:
xc_lda_init(&lda_func, xc.functional, xc.nspin);
info = lda_func.info;
break;
case XC_FAMILY_GGA:
xc_gga_init(&gga_func, xc.functional, xc.nspin);
info = gga_func.info;
break;
case XC_FAMILY_HYB_GGA:
xc_hyb_gga_init(&hyb_gga_func, xc.functional, xc.nspin);
info = hyb_gga_func.info;
break;
case XC_FAMILY_MGGA:
xc_mgga_init(&mgga_func, xc.functional, xc.nspin);
info = mgga_func.info;
break;
default:
fprintf(stderr, "Functional '%d' not found\n", xc.functional);
exit(1);
}
The functionals are divided in families (LDA, GGA, etc.). Given a functional identifier, xc.functional returns the corresponding family. Then the functional is initialized by one of the xc_XXX_init, and evaluated by xc_XXX, which returns the energy per unit particle (zk and the derivatives of the energy per unit volume. Finally the functions xc_XXX_end clean up.
This is an example in Fortran:
program lxctest use libxc implicit none real(8) :: rho, e_c, v_c TYPE(xc_func) :: xc_c_func TYPE(xc_info) :: xc_c_info CALL xc_f90_lda_init(xc_c_func, xc_c_info, XC_LDA_C_VWN, XC_UNPOLARIZED) CALL xc_f90_lda_vxc(xc_c_func, rho, e_c, v_c) CALL xc_f90_lda_end(xc_c_func) end program lxctest
The info structure
For each functional there is a structure that holds several pieces of information. The relevant part of this structure for the end user is defined as
typedef struct{
int number; /* indentifier number */
int kind; /* XC_EXCHANGE or XC_CORRELATION */
char *name; /* name of the functional, e.g. "PBE" */
int family; /* type of the functional, e.g. XC_FAMILY_GGA */
char *refs; /* references */
int provides; /* what the functional provides, e.g. XC_PROVIDES_EXC | XC_PROVIDES_VXC */
...
} xc_func_info_type;
For example, for the Slater exchange functional, this structrue is defined as
const xc_func_info_type func_info_lda_x = {
XC_LDA_X,
XC_EXCHANGE,
"Slater exchange",
XC_FAMILY_LDA,
"P.A.M. Dirac, Proceedings of the Cambridge Philosophical Society 26, 376 (1930)\n"
"F. Bloch, Zeitschrift fuer Physik 57, 545 (1929)",
XC_PROVIDES_EXC | XC_PROVIDES_VXC | XC_PROVIDES_FXC,
...
};
Note that the references are separated by a newline. The user of the library can access the information in the following way:
xc_gga_type b88;
xc_gga_init(&b88, XC_GGA_X_B88, XC_UNPOLARIZED);
printf("The functional '%s' is defined in the reference(s):\n%s",
b88.info->name, b88.info->refs);
xc_gga_end(&b88);
Fortran bindings
The Fortran 90 bindings can be found in the file libxc.F90 (show). In general, calling libxc from Fortran is as simple as from C. There are a few exceptions though. The most notable is how to access the information about the functional, due to the way that Fortran handles strings. You can take a look at the following example (taken from octopus/src/xc_functl.F90) for help
i = xc_f90_info_kind(functl%info)
select case(i)
case(XC_EXCHANGE)
write(message(1), '(2x,a)') 'Exchange'
case(XC_CORRELATION)
write(message(1), '(2x,a)') 'Correlation'
case(XC_EXCHANGE_CORRELATION)
write(message(1), '(2x,a)') 'Exchange-correlation'
end select
call xc_f90_info_name(functl%info, s1)
select case(functl%family)
case (XC_FAMILY_LDA); write(s2,'(a)') "LDA"
case (XC_FAMILY_GGA); write(s2,'(a)') "GGA"
case (XC_FAMILY_MGGA); write(s2,'(a)') "MGGA"
case (XC_FAMILY_LCA); write(s2,'(a)') "LCA"
end select
write(message(2), '(4x,4a)') trim(s1), ' (', trim(s2), ')'
call write_info(2, iunit)
i = 1; str = 0
call xc_f90_info_ref(functl%info, str, s1)
do while(str >= 0)
write(message(1), '(4x,a,i1,2a)') '[', i, '] ', trim(s1)
call write_info(1, iunit)
call xc_f90_info_ref(functl%info, str, s1)
i = i + 1
end do
xc_family_from_id
If you have the identifier of a functional (that was read, for example from an input file), and want to find out to which family it belongs to, you can use the routine
int xc_family_from_id(int functional); input: functional: identifier of the functional returns: XC_FAMILY_UNKNOWN: could not find the family XC_FAMILY_LDA, XC_FAMILY_GGA, etc.
Analogously for Fortran:
integer function xc_family_from_id (functional)
The LDAs
LDA Functionals
These are the LDA functionals the library currently knows about. Exc, Vxc, Fxc and Kxc implementation audit status.
LDA Exchange
- XC_LDA_X: Exchange
- XC_LDA_X_2D: Slater exchange in 2D
- XC_LDA_X_1D: Exchange in 1D
- Unpublished
LDA Correlation
- XC_LDA_C_WIGNER: Wigner parametrization
- EP Wigner, Trans. Faraday Soc. 34, 678 (1938)
- XC_LDA_C_RPA: Random Phase Approximation
- M Gell-Mann and KA Brueckner, Phys. Rev. 106, 364 (1957)
- XC_LDA_C_HL: Hedin & Lundqvist
- L. Hedin and B.I. Lundqvist, J. Phys. C 4, 2064 (1971)
- XC_LDA_C_GL: Gunnarson & Lundqvist
- O Gunnarsson and BI Lundqvist, Phys. Rev. B 13, 4274 (1976)
- XC_LDA_C_XALPHA: Slater's Xα (X-alpha)
- XC_LDA_C_VWN: Vosko, Wilk, & Nussair
- SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)
- XC_LDA_C_VWN_RPA: Vosko, Wilk, & Nussair (RPA)
- SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)
- XC_LDA_C_PZ: Perdew & Zunger
- Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)
- XC_LDA_C_PZ_MOD: Perdew & Zunger (Modified)
- Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)
- Modified to improve the matching between the low and high rs parts
- XC_LDA_C_OB_PZ: Ortiz & Ballone (PZ)
- G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)
- G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)
- Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)
- XC_LDA_C_PW: Perdew & Wang
- JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)
- XC_LDA_C_PW_MOD: Perdew & Wang (Modified)
- JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)
- Added extra digits to some constants as in the PBE routine (http://dft.uci.edu/pubs/PBE.asc)
- XC_LDA_C_OB_PW: Ortiz & Ballone (PW)
- G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)
- G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)
- JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)
- XC_LDA_C_2D_AMGB: AMGB (for 2D systems)
- C Attacalite et al, Phys. Rev. Lett. 88, 256601 (2002)
- C Attacalite, PhD thesis
- XC_LDA_C_PRM: PRM08 (for 2D systems)
- S Pittalis, E Rasanen, and MAL Marques, Phys. Rev. B 78, 195322 (2008). OAI: arXiv:0807.0276
- XC_LDA_C_vBH: von Barth & Hedin
- U von Barth and L Hedin, J. Phys. C: Solid State Phys. 5, 1629 (1972)
- XC_LDA_C_1D_CSC: Casula, Sorella & Senatore (only for 1D, untested)
- M Casula, S Sorella, and G Senatore, Phys. Rev. B 74, 245427 (2006)
- XC_LDA_C_ML1: Modified LSD (version 1) of Proynov and Salahub
- EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)
- XC_LDA_C_ML2: Modified LSD (version 2) of Proynov and Salahub
- EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)
LDA Exchange-Correlation
- XC_LDA_XC_TETER93: Teter 93
- S Goedecker, M Teter, J Hutter, Phys. Rev B 54, 1703 (1996)
Initialization
A generic LDA functional is initialized by the routine
int xc_lda_init(xc_lda_type *p, int functional, int nspin); input: functional: which functional do we want? nspin: either XC_UNPOLARIZED or XC_POLARIZED output: p: structure that holds our LDA functional returns: 0 (OK) or -1 (ERROR)
However, there are a couple of functionals that require some extra information in the initialization. These are the LDA exchange functionals and Slater's Xalpha. The exchange functional can be evaluated for systems with either 2 or 3 dimensions. It is also possible to apply a relativistic correction (cf. A. K. Rajagopal, J. Phys. C 11, L943 (1978); A. H. MacDonald and S. H. Vosko, J. Phys. C 12, 2977 (1979); E. Engel, S. Keller, A. Facco Bonetti, H. Müller, and R. M. Dreizler, Phys. Rev. A 52, 2750 (1995)):
xc_lda_x_init(xc_lda_type *p, int nspin, int dim, int irel); input: dim: either 2 or 3. The dimensionality of the space irel: either XC_NON_RELATIVISTIC or XC_RELATIVISTIC
Slater's Xalpha requires the parameter alpha:
void xc_lda_c_xalpha_init(xc_lda_type *p, int nspin, int dim, double alpha); input: alpha: Slater's parameter that multiplies the exchange
This correlation functional, added to the exchange functional, produces a total exchange and correlation functional, Exc, equal to 3/2 * alpha * Ex Setting alpha equal to one gives the *usual* Slater Xalpha functional, whereas alpha equal to 2/3 just leaves the exchange functional unchanged.
In Fortran, there is only one generic subroutine,
subroutine xc_lda_init (p, info, functional, nspin) subroutine xc_lda_init (p, info, functional, nspin, dim, irel) subroutine xc_lda_init (p, info, functional, nspin, dim, alpha) input: integer :: functional ! which functional do we want? integer :: nspin ! either XC_UNPOLARIZED or XC_POLARIZED integer :: dim ! either 2 or 3. The dimensionality of the space integer :: irel ! either XC_NON_RELATIVISTIC or XC_RELATIVISTIC real(8) :: alpha ! Slater's parameter that multiplies the exchange output: type(xc_func_t) :: p ! structure that holds our LDA functional type(xc_info_t) :: info ! information structure of the functional
Evaluation
This is done by the routines
void xc_lda_exc(xc_lda_type *p, double *rho, double *exc); void xc_lda_vxc(xc_lda_type *p, double *rho, double *exc, double *vxc); void xc_lda_fxc(xc_lda_type *p, double *rho, double *fxc); void xc_lda_kxc(xc_lda_type *p, double *rho, double *kxc); void xc_lda(xc_lda_type *p, double *rho, double *exc, double *vxc, double *fxc, double *kxc); input: p: structure obtained from calling xc_lda_init rho[]: the density output: exc: the energy per unit particle vxc[]: first derivative of the energy per unit volume fxc[]: second derivative of the energy per unit volume kxc[]: third derivative of the energy per unit volume
The derivatives are defined as
where ε is the energy per unit volume.
If the functional was initialized with nspin=XC_UNPOLARIZED, the spin indices should be dropped from the previous expressions. Otherwise, the parameters have dimensions rho[2], vxc[2], and fxc[3]. The components of fxc are
Destruction
Due to its simplicity, the LDA functionals do not require, at the moment, an explicit destruction.
The GGAs
GGA Functionals
These are the GGA functionals we know about. Exc, Vxc, Fxc and Kxc implementation audit status.
GGA Exchange
- XC_GGA_X_PBE: Perdew, Burke & Ernzerhof exchange
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- XC_GGA_X_PBE_R: Perdew, Burke & Ernzerhof exchange (revised)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- Y Zhang and W Yang, Phys. Rev. Lett 80, 890 (1998)
- XC_GGA_X_MPBE: Adamo & Barone modification to PBE
- C Adamo and V Barone, J. Chem. Phys., 116, 5933 (2002)
- XC_GGA_X_XPBE: Extended PBE by Xu & Goddard III
- X. Xu and WA Goddard III, J. Chem. Phys., 121, 4068 (2004)
- XC_GGA_X_B86: Becke 86 Xalfa,beta,gamma
- AD Becke, J. Chem. Phys 84, 4524 (1986)
- XC_GGA_X_B86_R: Becke 86 Xalfa,beta,gamma (reoptimized)
- AD Becke, J. Chem. Phys 84, 4524 (1986)
- AD Becke, J. Chem. Phys 107, 8554 (1997)
- XC_GGA_X_B86_MGC: Becke 86 Xalfa,beta,gamma (with mod. grad. correction)
- AD Becke, J. Chem. Phys 84, 4524 (1986)
- AD Becke, J. Chem. Phys 85, 7184 (1986)
- XC_GGA_X_B88: Becke 88
- AD Becke, Phys. Rev. A 38, 3098 (1988)
- XC_GGA_X_G96: Gill 96
- PMW Gill, Mol. Phys. 89, 433 (1996)
- XC_GGA_X_PW86: Perdew & Wang 86
- JP Perdew and Y Wang, Phys. Rev. B 33, 8800 (1986)
- XC_GGA_X_PW91: Perdew & Wang 91
- JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)
- XC_GGA_X_OPTX: Handy & Cohen OPTX 01
- NC Handy and AJ Cohen, Mol. Phys. 99, 403 (2001)
- XC_GGA_X_DK87_R1: dePristo & Kress 87 (version R1)
- AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)
- XC_GGA_X_DK87_R2: dePristo & Kress 87 (version R2)
- AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)
- XC_GGA_X_LG93: Lacks & Gordon 93
- DJ Lacks and RG Gordon, Phys. Rev. A 47, 4681 (1993)
- XC_GGA_X_FT97_A: Filatov & Thiel 97 (version A)
- M Filatov and W Thiel, Mol. Phys. 91, 847 (1997)
- XC_GGA_X_FT97_B: Filatov & Thiel 97 (version B)
- M Filatov and W Thiel, Mol. Phys. 91, 847 (1997)
- XC_GGA_X_PBE_SOL: Perdew, Burke & Ernzerhof exchange (solids)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008). arXiv:0707.2088v1
- XC_GGA_X_RPBE: Hammer, Hansen & Norskov (PBE-like)
- B Hammer, LB Hansen and JK Nørskov, Phys. Rev. B 59, 7413 (1999)
- XC_GGA_X_WC: Wu & Cohen
- Z Wu and RE Cohen, Phys. Rev. B 73, 235116 (2006)
- XC_GGA_X_AM05: Armiento & Mattsson 05 exchange
- R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)
- AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008)
- XC_GGA_X_PBEA: Madsen 07
- G Madsen, Phys. Rev. B 75, 195108 (2007)
- XC_GGA_X_mPW91: mPW91 of Adamo & Barone
- C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)
- XC_GGA_X_2D_B86_MGC: Becke 86 with modified gradient correction for 2D
- S Pittalis, E Rasanen, JG Vilhena, and MAL Marques, Phys. Rev. A 79, 012503 (2009)
- AD Becke, J. Chem. Phys 85, 7184 (1986)
- XC_GGA_X_BAYESIAN: Bayesian best fit for the enhancement factor
- JJ Mortensen, K Kaasbjerg, SL Frederiksen, JK Nørskov, JP Sethna, and KW Jacobsen, Phys. Rev. Lett. 95, 216401 (2005)
- XC_GGA_X_PBE_JRGX: Reparametrized PBE by Pedroza, Silva & Capelle
- LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009). arxiv:0905.1925 (2009)
- XC_GGA_X_2D_B86: Becke 86 in 2D
- G Vilhena and MAL Marques, unpublished
- AD Becke, J. Chem. Phys 84, 4524 (1986)
- XC_GGA_X_2D_B88: Becke 88
- G Vilhena, MAL Marques, unpublished
- AD Becke, Phys. Rev. A 38, 3098 (1988)
- XC_GGA_X_2D_PBE: Perdew, Burke & Ernzerhof in 2D
- G Vilhena and MAL Marques, unpublished
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- XC_GGA_X_OPTB88_VDW: opt-Becke 88 for vdW
- J Klimes, DR Bowler, and A Michaelides, arxiv:0910.0438
- XC_GGA_X_PBEK1_VDW: Reparametrized PBE for vdW
- J Klimes, DR Bowler, and A Michaelides, arxiv:0910.0438
- XC_GGA_X_OPTPBE_VDW: Reparametrized PBE for vdW
- J Klimes, DR Bowler, and A Michaelides, arxiv:0910.0438
GGA Correlation
- XC_GGA_C_PBE: Perdew, Burke & Ernzerhof correlation
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- XC_GGA_C_XPBE: Extended PBE by Xu & Goddard III
- X. Xu and WA Goddard III, J. Chem. Phys., 121, 4068 (2004)
- XC_GGA_C_LYP: Lee, Yang & Parr
- C Lee, W Yang and RG Parr, Phys. Rev. B 37, 785 (1988)
- B Miehlich, A Savin, H Stoll and H Preuss, Chem. Phys. Lett. 157, 200 (1989)
- XC_GGA_C_P86: Perdew 86
- JP Perdew, Phys. Rev. B 33, 8822 (1986)
- XC_GGA_C_PBE_SOL: Perdew, Burke & Ernzerhof correlation SOL
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)
- JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)
- JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008). arXiv:0707.2088v1
- XC_GGA_C_PW91: Perdew & Wang 91
- JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)
- JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 48, 4978(E) (1993)
- XC_GGA_C_AM05: Armiento & Mattsson 05 correlation
- R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)
- AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008)
- XC_GGA_C_LM: Langreth & Mehl
- DC Langreth and MJ Mehl, Phys. Rev. Lett. 47, 446 (1981)
- XC_GGA_C_PBE_JRGX: Reparametrized PBE by Pedroza, Silva & Capelle
- LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009). arxiv:0905.1925 (2009)
GGA Exchange-Correlation
- XC_GGA_XC_LB: van Leeuwen & Baerends
- R van Leeuwen and EJ Baerends, Phys. Rev. A. 49, 2421 (1994)
- XC_GGA_XC_HCTH_93: HCTH functional fitted to 93 molecules
- FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)
- XC_GGA_XC_HCTH_120: HCTH functional fitted to 120 molecules
- AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)
- XC_GGA_XC_HCTH_147: HCTH functional fitted to 147 molecules
- AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)
- XC_GGA_XC_HCTH_407: HCTH functional fitted to 147 molecules
- AD Boese, and NC Handy, J. Chem. Phys. 114, 5497 (2001)
- XC_GGA_XC_EDF1: Empirical functional from Adamson, Gill, and Pople
- RD Adamson, PMW Gill, and JA Pople, Chem. Phys. Lett. 284, 6 (1998)
- XC_GGA_XC_XLYP: XLYP functional
- X Xu and WA Goddard, III, PNAS 101, 2673 (2004)
- XC_GGA_XC_B97: Becke 97
- AD Becke, J. Chem. Phys. 107, 8554-8560 (1997)
- XC_GGA_XC_B97_1: Becke 97-1
- FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)
- XC_GGA_XC_B97_2: Becke 97-2
- PJ Wilson, TJ Bradley, and DJ Tozer, Chem. Phys. 115, 9233 (2001)
- XC_GGA_XC_B97_D: Becke 97-D (Grimme functional to be used with C6 vdW term)
- S Grimme, J. Comput. Chem. 27, 1787 (2006)
- XC_GGA_XC_B97_K: Becke 97-K (Boese-Martin for Kinetics)
- AD Boese and JML Martin, J. Chem. Phys. 121, 3405 (2004)
- XC_GGA_XC_B97_3: Becke 97-3
- TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)
- XC_GGA_XC_PBE1W: PBE1W (functional fitted for water)
- EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)
- XC_GGA_XC_MPWLYP1W: mPWLYP1w (functional fitted for water)
- EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)
- XC_GGA_XC_PBELYP1W: PBELYP1W (functional fitted for water)
- EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)
- XC_GGA_XC_SB98_1a: SB98 (1a)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_GGA_XC_SB98_1b: SB98 (1b)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_GGA_XC_SB98_1c: SB98 (1c)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_GGA_XC_SB98_2a: SB98 (2a)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_GGA_XC_SB98_2b: SB98 (2b)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_GGA_XC_SB98_2c: SB98 (2c)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
Initialization
A generic GGA functional is initialized by the routine
int xc_gga_init(xc_gga_type *p, int functional, int nspin); input: functional: which functional do we want? nspin: either XC_UNPOLARIZED or XC_POLARIZED output: p: structure that holds our GGA functional returns: 0 (OK) or -1 (ERROR)
Evaluation
This is done by the routines
void xc_gga(xc_gga_type *p, double *rho, double *sigma,
double *exc, double *vrho, double *vsigma)
input:
p: structure obtained from calling xc_lda_init
rho[]: the density
sigma[]: contracted gradients of the density
output:
exc: the energy per unit particle
vrho[]: first partial derivative of the energy per unit volume in terms of the density
vsigma[]: first partial derivative of the energy per unit volume in terms of sigma
The derivatives are defined as
where ε is the energy per unit volume.
If the functional was initialized with nspin=XC_UNPOLARIZED, the spin indices should be dropped from the previous expressions. Otherwise, the parameters have dimensions rho[2], vxc[2], sigma[3], and vsigma[3]. The components of sigma are
Destruction
If you no longer need your xc functional, you should destruct it with the routine
void xc_gga_end (xc_gga_type *p); input: p: structure holding the functional to destroy
The Hybrid GGAs
Hybrid Functionals
These are the hybrid GGA functionals we know about. Exc, Vxc, Fxc and Kxc implementation audit status.
- XC_HYB_GGA_XC_B3PW91: The original hybrid proposed by Becke
- AD Becke, J. Chem. Phys. 98, 5648 (1993)
- XC_HYB_GGA_XC_B3LYP: The (in)famous B3LYP
- PJ Stephens, FJ Devlin, CF Chabalowski, MJ Frisch, J. Phys. Chem. 98, 11623 (1994)
- XC_HYB_GGA_XC_B3P86: Perdew 86 hybrid similar to B3PW91
- Defined through Gaussian implementation
- XC_HYB_GGA_XC_O3LYP: hybrid using the optx functional
- AJ Cohen, NC Handy, Mol. Phys. 99, 607 (2001)
- XC_HYB_GGA_XC_PBEH: PBEH (PBE0)
- M. Ernzerhof, G. E. Scuseria, J. Chem. Phys. 110, 5029 (1999)
- XC_HYB_GGA_XC_X3LYP: X3LYP
- X Xu, WA Goddard, III, PNAS 101, 2673 (2004)
- XC_HYB_GGA_XC_B1WC: B1WC
- DI Bilc, R Orlando, R Shaltaf, G-M Rignanese, J Iniguez, and Ph Ghosez, Phys. Rev. B 77, 165107 (2008)
- XC_HYB_GGA_XC_B97: Becke 97
- AD Becke, J. Chem. Phys. 107, 8554 (1997)
- XC_HYB_GGA_XC_B97_1: Becke 97-1
- FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)
- XC_HYB_GGA_XC_B97_2: Becke 97-2
- PJ Wilson, TJ Bradley, and DJ Tozer, J. Chem. Phys. 115, 9233 (2001)
- XC_HYB_GGA_XC_B97_K: Becke 97-K, Boese-Martin for Kinetics
- AD Boese and JML Martin, J. Chem. Phys. 121, 3405 (2004)
- XC_HYB_GGA_XC_B97_3: Becke 97-3
- TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)
- XC_HYB_GGA_XC_B1LYP: B1LYP
- C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)
- XC_HYB_GGA_XC_B1PW91: B1PW91
- C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)
- XC_HYB_GGA_XC_mPW1PW: mPW1PW
- C. Adamo, V. Barone, J. Chem. Phys. 108, 664 (1998)
- XC_HYB_GGA_XC_mPW3PW: mPW3PW of Adamo & Barone
- C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)
- XC_HYB_GGA_XC_mPW3LYP: mPW3LYP
- Y Zhao and DGJ Truhlar, J. Phys. Chem. A 108, 6908 (2004)
- XC_HYB_GGA_XC_SB98_1a: SB98 (1a)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_SB98_1b: SB98 (1b)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_SB98_1c: SB98 (1c)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_SB98_2a: SB98 (2a)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_SB98_2b: SB98 (2b)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_SB98_2c: SB98 (2c)
- HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)
- XC_HYB_GGA_XC_mPW1K: mPW1K
- BJ Lynch, PL Fast, M Harris, DGJ Truhlar, J. Phys. Chem. A 104, 4811 (2000)
TODO
- XC_HYB_GGA_B97_1_REV
Initialization
A generic hybrid GGA functional is initialized by the routine
int xc_hyb_gga_init(xc_hyb_gga_type *p, int functional, int nspin); input: functional: which functional do we want? nspin: either XC_UNPOLARIZED or XC_POLARIZED output: p: structure that holds our hybrid GGA functional returns: 0 (OK) or -1 (ERROR)
Evaluation
This is done by the routines (cf. the GGAs)
void xc_hyb_gga(xc_hyb_gga_type *p, double *rho, double *sigma,
double *exc, double *vrho, double *vsigma)
input:
p: structure obtained from calling xc_hyb_gga_init
rho[]: the density
sigma[]: contracted gradients of the density
output:
exc: the energy per unit particle
vrho[]: first partial derivative of the energy per unit volume in terms of the density
vsigma[]: first partial derivative of the energy per unit volume in terms of sigma
Destruction
If you no longer need your xc functional, you should destruct it with the routine
void xc_hyb_gga_end (xc_hyb_gga_type *p); input: p: structure holding the functional to destroy
The MetaGGAs (experimental)
MetaGGA Functionals
These are the MetaGGA functionals we know about. Exc, Vxc, Fxc and Kxc implementation audit status.
MetaGGA Exchange
- XC_MGGA_X_LTA: Local tau approximation
- M Ernzerhof and G Scuseria, J. Chem. Phys. 111, 911 (1999)
- XC_MGGA_X_TPSS: Perdew, Tao, Staroverov & Scuseria exchange
- JP Perdew, J Tao, VN Staroverov and GE Scuseria, Phys. Rev. Lett. 91, 146401 (2003)
- JP Perdew, J Tao, VN Staroverov and GE Scuseria, J. Chem. Phys. 120, 6898 (2004)
- XC_MGGA_X_TAU_HCTH: Tau HCTH
- AD Boese and NC Handy, J. Chemical Physics 116, 9559 (2002)
- XC_MGGA_X_GVT4: GVT4 (exchange part of VSXC)
- T Van Voorhis and GE Scuseria, J. Chem. Phys. 109, 400 (1998)
- XC_MGGA_X_M06L: M06-L
- Y Zhao and DG Truhlar, J Chem. Phys. 125, 194101 (2006)
- Y Zhao and DG Truhlar, Theor. Chem. Accounts 120, 215 (2008)
- XC_MGGA_X_BR89: Becke-Roussel 89
- AD Becke and MR Roussel, Phys. Rev. A 39, 3761 (1989)
- XC_MGGA_X_BJ06: Becke & Johnson 06
- AD Becke and ER Johnson, J. Chem. Phys. 124, 221101 (2006)
- XC_MGGA_X_TB09: Tran & Blaha 89
- F Tran and P Blaha, Phys. Rev. Lett. 102, 226401 (2009)
- XC_MGGA_X_RPP09: Rasanen, Pittalis & Proetto 09
- E Rasanen, S Pittalis & C Proetto, arXiv:0909.1477 (2009)
MetaGGA Correlation
- XC_MGGA_C_TPSS: Perdew, Tao, Staroverov & Scuseria correlation
- JP Perdew, J Tao, VN Staroverov and GE Scuseria, Phys. Rev. Lett. 91, 146401 (2003)
- JP Perdew, J Tao, VN Staroverov and GE Scuseria, J. Chem. Phys. 120, 6898 (2004)
- XC_MGGA_C_VSXC: VSXC (correlation part)
- T Van Voorhis and GE Scuseria, J. Chem. Phys. 109, 400 (1998)
Initialization
A generic meta-GGA functional is initialized by the routine
int xc_mgga_init(xc_mgga_type *p, int functional, int nspin); input: functional: which functional do we want? nspin: either XC_UNPOLARIZED or XC_POLARIZED output: p: structure that holds our meta-GGA functional returns: 0 (OK) or -1 (ERROR)
Evaluation
FIX & complete the description
This is done by the routines
void xc_mgga(xc_mgga_type *p, double *rho, double *sigma,
double *tau, double *zk, double *vrho,
double *vsigma, double *vtau, double *v2rho2,
double *v2rho2, doule *v2rhosigma, double *v2sigma2,
double *v2rhotau, double *v2tausigma, double *v2tau2)
input:
p: structure obtained from calling xc_lda_init
rho[]: the density
sigma[]: contracted gradients of the density
tau[]:
output:
zk: energy density per unit particle
vrho[]: first partial derivative of the energy per unit volume in terms of the density
vsigma[]: first partial derivative of the energy per unit volume in terms of sigma
Destruction
If you no longer need your xc functional, you should destruct it with the routine
void xc_mgga_end (xc_mgga_type *p); input: p: structure holding the functional to destroy
The LCAs (not working)
LCA Functionals
These are the LCA functionals we know about. Exc, Vxc, Fxc and Kxc implementation audit status.
- XC_LCA_OMC: Orestes, Marcasso & Capelle
- E Orestes, T Marcasso and K Capelle, Phys. Rev. A 68, 022105 (2003)
- XC_LCA_LCH: Lee, Colwell & Handy
- AM Lee, SM Colwell and NC Handy, Chem. Phys. Lett. 229, 225 (1994)
- AM Lee, SM Colwell and NC Handy, J. Chem. Phys. 103, 10095 (1995)

