Files
funxc/mapOfFunctionals.md

293 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Libxc Tree of Knowledge: A Categorical Index of ExchangeCorrelation Functionals by Shared Analytic Kernel
## TL;DR
- Libxc's 600+ functional entries collapse to roughly **5070 distinct analytic enhancement-factor kernels**; the great majority of "different" functionals are the *same* math kernel with a different parameter tuple (e.g. ~30+ PBE-type exchange functionals share one rational `Fx(s)` form), so a clean-room reimplementation needs only the small kernel set as code plus a parameter database.
- The tree has four rungs (LDA → GGA → meta-GGA, plus kinetic-energy **K** functionals), each split into **X / C / XC**, with hybrids and range-separation treated as a thin recipe layer of mixing coefficients (α, β, ω) over the semilocal kernels — exact exchange is host-supplied, never a kernel to implement.
- The irreducible "long tail" is small: genuinely unique forms include BeckeRoussel (BR89) exchange-hole inversion, LYP correlation, the VWN/PW92 Padé-and-log local-correlation parametrizations, OPTX, AM05, the B97 power series, and the SCAN/TPSS iso-orbital meta-GGA interpolations.
## Key Findings
1. **The compression ratio is dramatic.** MolSSI's official page states: *"The library currently implements over 600 density functional approximations, and is used by over 30 electronic structure programs ranging from atomic structure calculations to large quantum chemistry and materials modeling programs."* The original 2012 implementation (Marques, Oliveira & Burnus, *Comput. Phys. Commun.* 183, 2272) contained "around 180" functionals, while Marques' own estimate of the total number of *known* approximations at that time was "of the order of 250300" (quoted in Lehtola's GPAW-2021 talk). Today's 600+ entries reduce to ~5070 distinct analytic kernels because parameter-only variants dominate. The single largest family — PBE-type GGA exchange — alone subsumes dozens of functionals through the (κ, μ) tuple.
2. **The PBE rational enhancement `Fx(s) = 1 + κ κ/(1 + μ·s²/κ)` is the workhorse kernel.** It originated as Becke's B86 form and is shared verbatim (in libxc's `maple/gga_x_pbe.mpl`, where it reads `pbe_f0 := s -> 1 + kappa*(1 - kappa/(kappa + mu*s^2))`) by PBE, PBEsol, revPBE, xPBE, APBE, PBEmol, PBEfe, PBEint, PBE_TCA, and the lambda family. The TPSS and SCAN meta-GGAs reuse the same rational shell with a more complex argument `x` replacing `μ·s²`.
3. **Local correlation is dominated by two parametrization forms:** the VWN Padé-in-√rs log/arctan form and the PerdewWang 1992 `G(rs) = 2A(1+α₁·rs)·ln[1 + 1/(2A(β₁·rs^½+…))]` form. PW92 (`lda_c_pw`) is the LDA base of nearly all GGA/mGGA correlation (PBE, PW91, TPSS, SCAN).
4. **The B97 power series `u(x) = γx²/(1+γx²)` with `Σ cᵢ·uⁱ` is a second universal kernel**, spanning B97, B97-1, B97-2, HCTH (all variants), ωB97, ωB97X, B97-D and the meta-GGA B97M extensions — they differ only in the cᵢ coefficient vectors and the γ values.
5. **Meta-GGA exchange splits into three kernel lineages:** (a) TPSS/revTPSS/SCAN/rSCAN/r2SCAN — the PBE rational shell with an iso-orbital argument built from `z = τW/τ` or `α = (ττW)/τunif`; (b) Minnesota (M06-L, M05, M06, M08, M11, MN15) — PBE/PW86 exchange times a kinetic-energy power series `f(w)` plus a VS98-style term; (c) BeckeRoussel BR89 exchange-hole inversion (used by BR89, B00, and underlying the MVS, TM, and mBJ potentials).
---
## Details — The Tree
### RUNG 0 — Variable dependencies (top-level split)
- **LDA**: ε depends on ρ (and ζ = spin polarization) only.
- **GGA**: adds σ = |∇ρ|². Reduced gradient `s = |∇ρ|/(2(3π²)^(1/3)ρ^(4/3))`, or `x = |∇ρ|/ρ^(4/3)`; note `s = x/(2(3π²)^(1/3))`.
- **meta-GGA**: adds τ (kinetic energy density) and/or ∇²ρ (Laplacian). Key dimensionless ingredients: `z = τW/τ`, `α = (ττW)/τunif`, where `τW = |∇ρ|²/(8ρ)`, `τunif = (3/10)(3π²)^(2/3)ρ^(5/3)`.
- Each rung × {X exchange, C correlation, XC combined, K kinetic}.
---
### LDA RUNG
#### Kernel L-X1: DiracSlater exchange
- **Variables:** ρ. **Reference:** Dirac/Slater (`LDA_X`).
- **Form:** εx = (3/4)(3/π)^(1/3) ρ^(1/3) per particle; spin via εx[ρ↑,ρ↓] = ½(εx[2ρ↑]+εx[2ρ↓]).
- **Members / parameters:** `LDA_X` (canonical Cx), `LDA_X_REL` (relativistic correction factor), `LDA_X_2D`, `LDA_X_1D_SOFT`/`_EXPONENTIAL`, `XALPHA` (Slater Xα, adjustable α default 0.7), `LDA_X_RAE`, `LDA_X_SLOC` (a=1.67, b=0.3), `LDA_X_YUKAWA`/`_ERF` (screened). Variation = the prefactor Cx and the dimension.
- **Citation:** Dirac, *Proc. Camb. Phil. Soc.* 26, 376 (1930); Slater, *Phys. Rev.* 81, 385 (1951).
#### Kernel L-C1: VWN Padé log/arctan local correlation
- **Variables:** ρ, ζ. **Reference:** VoskoWilkNusair 1980 (`LDA_C_VWN`).
- **Form:** `ec(rs,ζ) = ec^P + [ec^F ec^P]·fc(ζ)ζ⁴ + (fc(ζ)/fc''(0))(1ζ⁴)αc(rs)`, each of ec^P, ec^F, αc parametrized by
`G(y) = A{ln(y²/X(y)) + (2b/Q)arctan(Q/(2y+b)) (b·y0/X(y0))[ln((yy0)²/X(y)) + (2(b+2y0)/Q)arctan(Q/(2y+b))]}`,
with `y = √rs`, `X(y) = y²+by+c`, `Q = √(4cb²)`, `fc''(0) = 4/[9(2^(1/3)1)]`. Paramagnetic channel constants: A = 0.0310907, b = 3.72744, c = 12.9352, x0 = 0.10498.
- **Members:** `LDA_C_VWN` (=VWN5), `LDA_C_VWN_RPA`, `LDA_C_VWN_1`, `_2`, `_3`, `_4` — variants differ in (A,b,c,x0) tuples and whether the RPA or CeperleyAlder fit is used. VWN3 and VWN5 are the historically confused pair (VWN3 = RPA-fit body parametrization; VWN5 = Table-5 Monte-Carlo parametrization).
- **Citation:** Vosko, Wilk & Nusair, *Can. J. Phys.* 58, 1200 (1980), doi:10.1139/p80-159.
#### Kernel L-C2: PerdewWang 1992 G(rs) local correlation
- **Variables:** ρ, ζ. **Reference:** PW92 (`LDA_C_PW`).
- **Form:** `G(rs) = 2A(1+α₁·rs)·ln[1 + 1/(2A(β₁·rs^(1/2) + β₂·rs + β₃·rs^(3/2) + β₄·rs^(p+1)))]`, spin-interpolated with the von BarthHedin fc(ζ).
- **Parameter table (three channels: ec0 paramagnetic, ec1 ferromagnetic, αc spin-stiffness):**
| param | ec0 | ec1 | αc |
|---|---|---|---|
| A | 0.031091 | 0.015545 | 0.016887 |
| α₁ | 0.21370 | 0.20548 | 0.11125 |
| β₁ | 7.5957 | 14.1189 | 10.357 |
| β₂ | 3.5876 | 6.1977 | 3.6231 |
| β₃ | 1.6382 | 3.3662 | 0.88026 |
| β₄ | 0.49294 | 0.62517 | 0.49671 |
p = 1 for `LDA_C_PW`; p = 3/4 for `LDA_C_PW_RPA`; `LDA_C_PW_MOD` uses higher-precision A (0.0310907…).
- **Members:** `LDA_C_PW`, `LDA_C_PW_RPA`, `LDA_C_PW_MOD`, `LDA_C_OB_PW` (OrtizBallone refit).
- **Citation:** Perdew & Wang, *Phys. Rev. B* 45, 13244 (1992).
#### Kernel L-C3: PZ81 piecewise (high/low-density) correlation
- **Form:** for rs ≥ 1, `ec = γ/(1+β₁√rs+β₂·rs)`; for rs < 1, `ec = A·ln rs + B + C·rs·ln rs + D·rs`. **Members:** `LDA_C_PZ`, `LDA_C_PZ_MOD`, `LDA_C_OB_PZ`. **Citation:** Perdew & Zunger, *Phys. Rev. B* 23, 5048 (1981). **Stability note:** second-derivative discontinuity at rs = 1.
#### Kernel L-C4: Chachiyo single-formula correlation
- **Form:** `ec = a·ln(1 + b/rs + b/rs²)`-type closed two-parameter expression. **Members:** `LDA_C_CHACHIYO`, `LDA_C_CHACHIYO_MOD`, `GGA_C_CHACHIYO` (gradient extension). **Citation:** Chachiyo, *J. Chem. Phys.* 145, 021101 (2016).
#### Kernel L-C5: Wigner / small-rational one-offs
- `LDA_C_WIGNER` (ec = a/(rs+b)), `LDA_C_RPA`, `LDA_C_HL` (HedinLundqvist), `LDA_C_GL` (GunnarssonLundqvist), `LDA_C_vBH`, `LDA_C_RC04`, `LDA_C_W20`, `LDA_C_GOMBAS` — each a distinct small rational/log form; mostly irreducible.
- **Warm-dense-matter / finite-T XC:** `LDA_XC_KSDT`, `LDA_XC_GDSMFB`, `LDA_XC_CORRKSDT` — temperature-dependent Padé parametrizations (shared form, different fits).
- **Electronproton (NEO):** `LDA_C_EPC17`, `_17_2`, `_18_1`, `_18_2` — implemented via the spin-channel trick (electron density as "up", proton density as "down").
#### Kernel L-K1: ThomasFermi kinetic
- **Form:** `τ = CF·ρ^(5/3)`, `CF = (3/10)(3π²)^(2/3)`. **Members:** `LDA_K_TF`, `LDA_K_LP` (LeeParr Gaussian), `LDA_K_ZLP`. **Citation:** Thomas (1927), Fermi (1928).
---
### GGA RUNG — EXCHANGE
#### Kernel G-X1: PBE-type rational enhancement (THE big family)
- **Variables:** ρ, σ. **Reference:** PBE (`GGA_X_PBE`); form first from Becke B86.
- **Form (libxc `maple/gga_x_pbe.mpl`):** `Fx(s) = 1 + κ κ/(1 + μ·s²/κ)`, εx = εx^LDA·Fx(s). Gradient expansion `Fx = 1 + μ·s² + O(s⁴)`.
- **Member / parameter table:**
| Functional | κ | μ |
|---|---|---|
| `GGA_X_PBE` | 0.804 | 0.2195149727645171 |
| `GGA_X_PBE_SOL` (PBEsol) | 0.804 | 10/81 = 0.12345679 |
| `GGA_X_PBE_R` (revPBE) | 1.245 | 0.2195149727645171 |
| `GGA_X_XPBE` (XuGoddard) | 0.91954 | 0.23889 |
| `GGA_X_APBE` | 0.804 | 0.260 |
| `GGA_X_PBE_MOL` | 0.804 | ≈0.27583 |
| `GGA_X_PBEFE` | 0.437 | 0.346 |
| `GGA_X_PBE_TCA` | 1.227 | 0.2195149727645171 |
| `GGA_X_PBEINT` | 0.804 | μ(s) interpolating 10/81→0.21951, α=0.197 |
| `GGA_X_LAMBDA_{LO,CH,OC2}_N` | N-dependent κ (tightened LiebOxford) | 0.2195149727645171 |
Also share this rational shell (refit params): `GGA_X_PBE_JSJR`, `PBE_GAUSSIAN`, `mPBE` (AdamoBarone), and vdW reparametrizations (`PBEK1_VDW`, `OPTPBE_VDW`). The VASP wiki documents the PBE→PBEsol move concisely: PBE's "μ=0.21951 in exchange and β=0.066725 in correlation are changed to μ=10/81≈0.12345679 and β=0.046 to get the PBEsol functional."
- **Citation:** Perdew, Burke & Ernzerhof, *PRL* 77, 3865 (1996); Becke, *J. Chem. Phys.* 84, 4524 (1986).
#### Kernel G-X2: RPBE exponential enhancement
- **Form:** `Fx(s) = 1 + κ(1 exp(μ·s²/κ))`. Same (κ, μ) = (0.804, 0.21951) as PBE but a distinct functional form (exponential, not rational), hence a separate kernel.
- **Members:** `GGA_X_RPBE`; related `GGA_X_PBEpow`. **Citation:** Hammer, Hansen & Nørskov, *Phys. Rev. B* 59, 7413 (1999).
#### Kernel G-X3: B88 arcsinh exchange
- **Variables:** ρ, σ. **Form:** `Fx = 1 + (β/Cx)·x²/(1 + γ·β·x·arcsinh(x))`, `x = |∇ρ|/ρ^(4/3)`, γ = 6.
- **Member / parameters:** `GGA_X_B88` (β = 0.0042), `GGA_X_B88_6311G` (β = 0.0051), `GGA_X_OPTB88_VDW`, `GGA_X_MB88`, `GGA_X_EB88` (excogitated β≈0.0050), `GGA_X_B88M`, LRC variants (β = 0.323). All differ only in β (and γ for some).
- **Citation:** Becke, *Phys. Rev. A* 38, 3098 (1988). **Stability note:** arcsinh is well-behaved; the asymptotic exchange potential is unbounded (the 1/(2r) energy-density decay is designed-in).
#### Kernel G-X4: B86 / B86b family
- **Form:** `Fx = 1 + (μ s²)/(1 + γ s²)^p` with p ∈ {1, 4/5}. **Members:** `GGA_X_B86`, `GGA_X_B86_MGC`, `GGA_X_B86_R`, `GGA_X_OPTB86B_VDW`. (A close cousin of the PBE rational shell with the added power p.)
- **Citation:** Becke, *J. Chem. Phys.* 84, 4524 (1986); 85, 7184 (1986).
#### Kernel G-X5: PW91 exchange (sinh-based rational)
- **Form:** `Fx = (1 + a₁·s·arcsinh(a₂·s) + (a₃ + a₄·exp(b·s²))s²)/(1 + a₁·s·arcsinh(a₂·s) + a₅·s⁴)`. **Members:** `GGA_X_PW91`, `GGA_X_MPW91` (AdamoBarone), `GGA_X_PW91_MOD`. **Citation:** Perdew et al., *Phys. Rev. B* 46, 6671 (1992).
#### Kernel G-X6: OPTX (sum-of-rational-squared)
- **Form:** `Fx = a₁ + a₂·(γx²/(1+γx²))²`, `x = |∇ρ|/ρ^(4/3)`. Parameters: a₁ = 1.05151, a₂ = 1.43169, γ = 0.006.
- **Members:** `GGA_X_OPTX`, `GGA_X_ITYH_OPTX` (short-range erf recipe). **Citation:** Handy & Cohen, *Mol. Phys.* 99, 403 (2001).
#### Kernel G-X7: G96 (Gill 1996)
- **Form:** Fx with an x^(3/2) gradient term, simpler than B88. **Member:** `GGA_X_G96`. **Citation:** Gill, *Mol. Phys.* 89, 433 (1996).
#### Kernel G-X8: AM05 (Airy-gas / subsystem interpolation)
- **Form:** interpolation between LDA and Airy-gas (Laplacian-level) limits with a LangrethVosko-style index. **Members:** `GGA_X_AM05`, `GGA_X_AIRY`, `GGA_X_LAG`. **Citation:** Armiento & Mattsson, *Phys. Rev. B* 72, 085108 (2005). Largely irreducible.
#### Kernel G-X9: Asymptotically-corrected potentials (LB94/LBα)
- **Form:** modeled on the *potential* (not energy): `vx = −β x²/(1+3β x·arcsinh(x))` added to the LDA potential. **Members:** `GGA_X_LB94`, `GGA_X_LBM`, `GGA_X_FD_LB94`. Potential-only — flag as a special case (no consistent εx).
#### Kernel G-X10: HJS screened exchange-hole models
- **Form:** error-function-screened exchange-hole integral, parametrized per base functional. **Members:** `GGA_X_HJS_PBE`, `_PBE_SOL`, `_B88`, `_B97X`, `_B88_V2` — same HJS machinery, parameters per base. **Citation:** Henderson, Janesko & Scuseria, *J. Chem. Phys.* 128, 194105 (2008). Underlies HSE / range-separated builds.
#### Misc one-off GGA exchange (irreducible long tail)
- `GGA_X_WC` (WuCohen; PBE rational with `x = 10/81·s² + (μ10/81)s²·e^(s²) + ln(1+c·s⁴)`), `GGA_X_SOGGA`/`SOGGA11` (two-term second-order GGA), `GGA_X_C09X`, `GGA_X_HTBS` (switches between RPBE & PBEsol), `GGA_X_EV93` (EngelVosko rational poly in s²), `GGA_X_AK13`, `GGA_X_KT1`, `GGA_X_FT97_A/B`, `GGA_X_BAYESIAN`, `GGA_X_BCGP`, the `GGA_X_2D_*` 2D forms, and the TozerHandy XC forms.
---
### GGA RUNG — CORRELATION
#### Kernel G-C1: PBE/PW91 correlation H(t) gradient correction
- **Variables:** ρ, σ, ζ. **Reference:** PBE correlation (`GGA_C_PBE`).
- **Form:** `εc = εc^LDA(PW92) + H(rs,ζ,t)`, with `H = γφ³·ln[1 + (β/γ)t²·(1+At²)/(1+At²+A²t⁴)]`, `A = (β/γ)[exp(εc^LDA/(γφ³))1]^(1)`, `φ = ((1+ζ)^(2/3)+(1ζ)^(2/3))/2`, t = scaled gradient.
- **Member / parameters:**
| Functional | β | γ |
|---|---|---|
| `GGA_C_PBE` | 0.06672455060314922 | (1ln2)/π² ≈ 0.0310906909 |
| `GGA_C_PBE_SOL` | 0.046 | (1ln2)/π² |
| `GGA_C_PBEFE` | 0.043 | (1ln2)/π² |
| `GGA_C_PBE_JRGX` | 3μ^GE/π² ≈ 0.0375 | (1ln2)/π² |
| `GGA_C_PBELOC`, `GGA_C_SG4`, `GGA_C_PBEINT` | β = β(rs,t) density-dependent | — |
Members (all H(t) form, parameter-only): `GGA_C_PBE`, `PBE_SOL`, `XPBE`, `PBEFE`, `PBE_MOL`, `PBE_JRGX`, `APBE`, `PBEINT`, `PBELOC`, `SG4`, `REGTPSS`, `ZPBESOL`.
- **Citation:** Perdew, Burke & Ernzerhof, *PRL* 77, 3865 (1996); PW91: Perdew et al., *PRB* 46, 6671 (1992).
#### Kernel G-C2: LYP correlation (ColleSalvetti-derived)
- **Variables:** ρ, σ (originally ∇²ρ, eliminated by parts). **Form (Miehlich):** `εc = a·(4/(1+d·ρ^(1/3)))·(ρ↑ρ↓/ρ) a·b·ω(ρ)·[...gradient and ρ^(8/3) terms...]`, `ω(ρ) = exp(ρ^(1/3))/(1+d·ρ^(1/3))·ρ^(11/3)`.
- **Parameters (libxc `gga_c_lyp_set_params`):** a = 0.04918, b = 0.132, c = 0.2533, d = 0.349.
- **Members:** `GGA_C_LYP`, plus refits used in OLYP, XLYP, MOHLYP, PBELYP1W. **Citation:** Lee, Yang & Parr, *Phys. Rev. B* 37, 785 (1988); Miehlich et al., *Chem. Phys. Lett.* 157, 200 (1989). Irreducible kernel.
#### Kernel G-C3: P86 (Perdew 1986) gradient correlation
- **Form:** `εc = εc^LDA + e^(−Φ)·C(rs)·|∇ρ|²/ρ^(4/3)` over a spin factor d(ζ); C(rs) is a RasoltGeldart rational. **Members:** `GGA_C_P86`, `GGA_C_P86VWN`, `GGA_C_P86VWN_FT`, `GGA_C_P86_FT`. Differ by underlying LDA (PZ vs VWN5) and the ftilde constant. **Citation:** Perdew, *Phys. Rev. B* 33, 8822 (1986).
#### Kernel G-C4: WilsonLevy type
- **Form:** `εc = √(1ζ²)·(a+b·x)/(c+d(x↑+x↓)+rs)`. **Members:** `GGA_C_WL` (a=0.74860, b=0.06001, c=3.60073, d=0.90000), `GGA_C_WI`, `GGA_C_WI0`. **Citation:** Wilson & Levy, *Phys. Rev. B* 41, 12930 (1990).
#### Misc GGA correlation one-offs
- `GGA_C_AM05` (paired with AM05-X), `GGA_C_OPTC` (CohenHandy), `GGA_C_W94` (Wilson 94), `GGA_C_CS1`, `GGA_C_BMK`, `GGA_C_CCDF`, `GGA_C_SOGGA11`, `GGA_C_GAPC`, `GGA_C_TCA`.
---
### GGA RUNG — KINETIC ENERGY (orbital-free)
#### Kernel G-K1: TFλvW linear combination
- **Form:** `T = λ·TW + γ·TTF`. **Members (by λ):** `GGA_K_VW` (pure von Weizsäcker), `GGA_K_GE2` (λ=1/9), `GGA_K_GOLDEN` (λ=13/45), `GGA_K_YT65` (λ=1/5), `GGA_K_BALTIN` (λ=5/9), `GGA_K_TFVW`. Parameter-only (the λ coefficient). **Citation:** von Weizsäcker, *Z. Phys.* 96, 431 (1935).
#### Kernel G-K2: PBE-type kinetic enhancement (reuses the G-X1 shell)
- **Form:** `Ft(s) = 1 + κ κ/(1+μs²/κ)` applied to τTF. **Members:** `GGA_K_APBE`, `GGA_K_APBEINT`, `GGA_K_REVAPBE`, `GGA_K_LC94`, `GGA_K_PERDEW`, `GGA_K_TW14` (TranWesolowski), `GGA_K_LLP`, `GGA_K_THAKKAR`, `GGA_K_OL1/OL2`, `GGA_K_FR_PW86`, `GGA_K_DK` (DePristoKress rational), `GGA_K_VSK`, `GGA_K_VJKS`, `GGA_K_ERNZERHOF`. Most are PBE/B88-shell forms refit for the kinetic energy. **Citation:** Constantin et al., *PRL* 106, 186406 (2011) (APBE).
---
### META-GGA RUNG — EXCHANGE
#### Kernel M-X1: TPSS-type rational shell with iso-orbital argument
- **Variables:** ρ, σ, τ. **Reference:** TPSS (`MGGA_X_TPSS`).
- **Form:** `Fx = 1 + κ κ²/(κ + x(s,z,α))`, where x is a long polynomial in s, `z = τW/τ`, `α = (ττW)/τunif`, and the reduced-Laplacian mimic `q̃b = (9/20)(α1)/√(1+b·α(α1)) + (2/3)s²`.
- **Member / parameters:** `MGGA_X_TPSS` (κ=0.804, μGE=10/81, μPBE=0.21951, b=0.40, c=1.59096, e=1.537), `MGGA_X_REVTPSS` (μ=0.14, c=2.35203946, e=2.16769874, f=3), `MGGA_X_TPSSLOC`, `MGGA_X_BLOC`, `MGGA_X_REGTPSS`, `MGGA_X_PKZB` (precursor), `MGGA_X_MBEEF`, `MGGA_X_TM` (TaoMo), `MGGA_X_REVTM`. **Citation:** Tao, Perdew, Staroverov & Scuseria, *PRL* 91, 146401 (2003).
#### Kernel M-X2: SCAN-type iso-orbital interpolation
- **Variables:** ρ, σ, τ (via α). **Reference:** SCAN (`MGGA_X_SCAN`).
- **Form:** `Fx(s,α) = {h1x(s,α) + fx(α)[h0x h1x]}·gx(s)`, with `h0x = 1.174 = 1+κ0`, `h1x = 1 + k1 k1/(1 + x/k1)`, `gx(s) = 1 exp(a1·s^(1/2))`, `fx(α) = exp(c1x·α/(1α))·θ(1α) dx·exp(c2x/(1α))·θ(α1)`.
- **Parameters:** SCAN: μGE=10/81, k1=0.065, c1x=0.667, c2x=0.8, dx=1.24, a1=4.9479, with b1, b2≈0.12083, b3=0.5, b4 fixed by GE4. revSCAN: c1x=0.607, c2x=0.7, dx=1.37. r2SCAN regularizes via `α̃` with floor η=10^(3): per Furness et al. (2020), *"the constants Cη = 20/27 + 5η/3, depending on the α̅ regularization parameter η = 10⁻³, and C2x ≈ 0.162742 eliminate erroneous contributions from dfx(α̅)/dα̅ at α̅ → 1."* The damping constant is **dp2 = 0.361** — note the original paper's main text printed 0.316, corrected to 0.361 in the published Correction (*J. Phys. Chem. Lett.* 11, 9248). rSCAN replaces the θ-step switches with smooth polynomials.
- **Members:** `MGGA_X_SCAN`, `MGGA_X_RSCAN`, `MGGA_X_R2SCAN`, `MGGA_X_R2SCAN01`, `MGGA_X_R4SCAN`, `MGGA_X_SCANL` (deorbitalized, Laplacian instead of τ), `MGGA_X_REVSCAN`, `MGGA_X_TASK`, `MGGA_X_RPPSCAN`. **Citation:** Sun, Ruzsinszky & Perdew, *PRL* 115, 036402 (2015); Furness, Kaplan, Ning, Perdew & Sun, *J. Phys. Chem. Lett.* 11, 8208 (2020), doi:10.1021/acs.jpclett.0c02405 (r2SCAN). **Stability note:** SCAN's `fx(α)` step switches are highly grid-sensitive near α≈1; rSCAN/r2SCAN explicitly regularize this (`α̃` with the η floor in density tails where τW/τ diverges).
#### Kernel M-X3: Minnesota (M06/M11/MN) PBE×power-series + VS98 term
- **Variables:** ρ, σ, τ. **Reference:** M06-L (`MGGA_X_M06_L`).
- **Form:** `εx = Σσ [εx^PBE(ρσ,∇ρσ)·f(wσ) + εx^UEG(ρσ)·hx(xσ,zσ)]`, with `f(wσ) = Σ_{i=0}^{11} aᵢ·wσⁱ` a power series in `wσ = (t1)/(t+1)`, `t = τLSDA/τ`; hx is the VS98 inhomogeneity rational.
- **Members / parameters:** the aᵢ vectors (and the VS98 a,b,c constants) differ per functional: `MGGA_X_M06_L`, `M06`, `M06_2X`, `M06_HF`, `M06_SX`, `M05`, `M05_2X`, `M08_HX`, `M08_SO`, `M11`, `M11_L`, `MN12_L`, `MN15_L`, `MN12_SX`, `MN15`. Parent: `MGGA_X_VS98`; also `MGGA_X_GVT4`. **Citation:** Zhao & Truhlar, *J. Chem. Phys.* 125, 194101 (2006); Van Voorhis & Scuseria, *J. Chem. Phys.* 109, 400 (1998). **Stability note:** Minnesota Fx shape is basis-set-dependent and slowly grid-convergent (Mardirossian & Head-Gordon, *JCTC* 9, 4453 (2013)); `MGGA_X_MK00` has a `τ−υ/4` denominator that can vanish or go negative.
#### Kernel M-X4: BeckeRoussel exchange-hole inversion
- **Variables:** ρ, σ, τ (and ∇²ρ). **Form:** models the spherically-averaged exchange hole as a displaced exponential, solving a transcendental relation `x·e^(x)/… = (curvature)` for the nonlinear hole parameter; energy density `= (1e^(x)½x·e^(x))/b`. Requires a Newton root-find per grid point (or the analytic Proynov approximation).
- **Members:** `MGGA_X_BR89`, `MGGA_X_BR89_EXPLICIT` (ProynovGanKong 2008 analytic refit, γ usually 0.8 or 1.0), `MGGA_X_BR89_EXPLICIT_1`, `MGGA_X_B00`, `MGGA_X_MBR`, and the mBJ (TranBlaha modified BeckeJohnson) potential `MGGA_X_TB09`/`MBJ` (potential-only). **Citation:** Becke & Roussel, *Phys. Rev. A* 39, 3761 (1989); Proynov et al., *Chem. Phys. Lett.* 455, 103 (2008). **Stability note:** the explicit refit raises quadrature noise ~3 orders of magnitude vs the iterative BR89 (Lehtola et al., arXiv:2206.14062); needs the Laplacian and is affected by libxc's Fermi-hole-curvature handling (`--disable-fhc`).
#### Kernel M-X5: MVS / MS (made-simple) interpolation
- **Form:** PBE-rational h-function interpolated via a *rational* fx(α) (no step functions). **Members:** `MGGA_X_MS0`, `MS1`, `MS2`, `MS2B`, `MVS`, `MGGA_X_MVSB`. **Citation:** Sun et al., *J. Chem. Phys.* 137, 051101 (2012); Sun, Perdew & Ruzsinszky, *PNAS* 112, 685 (2015).
#### meta-GGA exchange one-offs
- `MGGA_X_PKZB`, `MGGA_X_2D_PRHG07`, `MGGA_X_GX`/`PBE_GX` (Loos; step-function, numerically ill-behaved per Lehtola 2022), `MGGA_X_TLDA`, `MGGA_X_EDMGGA`, `MGGA_X_MK00`/`MK00B`, `MGGA_X_RTPSS`, `MGGA_X_JK`.
---
### META-GGA RUNG — CORRELATION
#### Kernel M-C1: TPSS/revTPSS correlation (self-interaction-corrected PBE)
- **Form:** `εc^TPSS = εc^revPKZB·[1 + 2.8·z³·εc^revPKZB]`, with `εc^revPKZB = εc^PBE[1+C(ζ,ξ)z²] [1+C(ζ,ξ)]z²·Σσ (ρσ/ρ)·max(εc^PBE,σ, εc^PBE)`, `z = τW/τ`. **Members:** `MGGA_C_TPSS` (enforces z = τW/τ ≤ 1), `MGGA_C_REVTPSS`, `MGGA_C_TPSSLOC`, `MGGA_C_BLOC`. **Citation:** TaoPerdewStaroverovScuseria, *PRL* 91, 146401 (2003). **Stability note:** libxc applies a `τW/τ ≤ 1` clamp; a historical factor-of-½-in-τ interface bug caused NaNs in some host codes (QE issue).
#### Kernel M-C2: SCAN correlation
- **Form:** `εc = εc^1 + fc(α)[εc^0 εc^1]`, interpolating a single-orbital `εc^0` (revised PW92-based) and a slowly-varying `εc^1` (PBE-like with β(rs)); fc(α) analogous to the exchange switch. **Members:** `MGGA_C_SCAN`, `MGGA_C_RSCAN`, `MGGA_C_R2SCAN`, `MGGA_C_R2SCAN01`, `MGGA_C_SCANL`, `MGGA_C_REVSCAN`, `MGGA_C_R2SCAN_VV10` (composition with VV10 NL). **Citation:** Sun et al., *PRL* 115, 036402 (2015).
#### Kernel M-C3: M06-L / Minnesota correlation (BC95-derived)
- **Form:** opposite-spin + same-spin components each `= εc^UEG·g(x)` (a B97 power series in x) times a τ-dependent factor (`1 τW/τ` for same-spin self-correlation removal), built on the BC95 (Becke 1995) τ-correlation. **Members:** `MGGA_C_M06_L`, `M06`, `M06_2X`, `M06_HF`, `M05`, `M05_2X`, `M08_HX/SO`, `M11`, `M11_L`, `MN12_L`, `MN15_L`, `MN15`, `MGGA_C_BC95` (parent), `MGGA_C_VSXC`. **Citation:** Becke, *J. Chem. Phys.* 104, 1040 (1996); Zhao & Truhlar.
#### Kernel M-C4: ColleSalvetti / B94 τ-correlation
- **Members:** `MGGA_C_CS` (ColleSalvetti, the parent of LYP), `MGGA_C_B94`, `MGGA_C_KCIS`, `MGGA_C_TPSSLOC`. Distinct from LYP only in retaining τ.
#### meta-GGA correlation one-offs
- `MGGA_C_PKZB`, `MGGA_C_M12C`, `MGGA_C_TM`, `MGGA_C_REVTM`, `MGGA_C_HLTAPW`, `MGGA_C_RREGTM`.
#### meta-GGA kinetic
- `MGGA_K_PC07` (PerdewConstantin Laplacian-level), `MGGA_K_CSK`, `MGGA_K_PGSL025` — Laplacian + τ kinetic functionals.
---
### HYBRID & RANGE-SEPARATED LAYER (thin recipe layer — mixing data only)
Exact exchange is host-supplied; libxc only stores the mixing coefficients and the semilocal kernel composition. The CAM/Ewald range partition convention is:
`1/r₁₂ = [α + β·erf(ωr₁₂)]/r₁₂ (long-range) + [1 α β·erf(ωr₁₂)]/r₁₂ (short-range)`,
so `EX = α·EX^HF(full) + β·EX^HF(LR,erf) + (1α)EX^DFA(SR) + …`. As r₁₂→0 the HF fraction = α; as r₁₂→∞ the HF fraction = α+β.
- **Global hybrids (single α):** `HYB_GGA_XC_PBEH`/PBE0 (α=0.25, PBE X+C), `HYB_GGA_XC_B3LYP` (α=0.20 HF; 0.08 LDA-X + 0.72 B88-X; 0.81 LYP-C + 0.19 VWN-C — note the VWN_RPA vs VWN5 ambiguity: B3LYP uses VWN3/RPA in Gaussian/ORCA/PySCF≥2.3, VWN5 in `B3LYP5`), `HYB_GGA_XC_B3LYP3` (VWN3), `B3LYP5` (VWN5), `BHANDH` (α=0.5), `BHANDHLYP`, `B3PW91`, `B3P86`, `X3LYP`, `O3LYP`, `PBE0_13` (α=1/3); `HYB_MGGA_XC_TPSSH` (α=0.10), `revTPSSH`, `SCAN0` (α=0.25); MGGA hybrids `B86B95`/`B88B95` (Becke τ-correlation, α per functional), and the M05/M06/M08/M11/MN15 hybrid members (HF % from 10% to 54%, and 100% for M06-HF).
- **Range-separated (α, β, ω):**
| Functional | α | β | ω (bohr⁻¹) | convention |
|---|---|---|---|---|
| `HYB_GGA_XC_CAM_B3LYP` | 0.19 | 0.46 | 0.33 | CAM |
| LC-ωPBE (`LRC_WPBE`) | 0 | 1.0 | ~0.4 | LC |
| LC-ωPBEh (`LRC_WPBEH`) | 0.20 | 0.80 | ~0.2 | CAM |
| `HSE03` / `HSE06` | 0.25 (SR) | 0.25 | 0.11 (HSE06) | screened (HF SR, DFA LR) |
| `ωB97` | 0 | 1.0 | 0.40 | LC + B97 series |
| `ωB97X` | 0.157706 (SR) | →1.0 | 0.30 | CAM + B97 series |
| `ωB97X-V` / `ωB97M-V` | as ωB97X | | | + VV10 NL correlation |
| `CAMY-B3LYP` / `LCY-*` | per Yukawa | | | Yukawa screening (not erf) |
Historical libxc bugs to be aware of: `LC_BLYP` used ω=0.3 vs intended 0.33; `CAM_QTP_01` had 81/19 vs intended 80/20 LYP/VWN5; `CAP0` had 75% vs intended 25% HF.
- **Yukawa range separation** (screening `exp(ωr)/r` instead of erf): the CAMY / LCY / LC-Yukawa family — a different attenuation kernel, same mixing-data treatment.
- **Composition (recipe, not kernel):** many `_XC` entries are literally an X-kernel + C-kernel glued together: BLYP = B88 + LYP, BP86 = B88 + P86, OLYP = OPTX + LYP, PBE = PBE-X + PBE-C. These are recipes (two kernel references + coefficients), not new kernels.
---
## Compression Summary
- **600+ libxc entries → ~5070 distinct analytic kernels.** Rough kernel counts by rung: **LDA ≈ 12** (Dirac-X + relativistic/dim variants; VWN, PW92, PZ, Chachiyo, Wigner, HL/GL, finite-T KSDT/GDSMFB, EPC, TF-kinetic); **GGA-X ≈ 1215** (PBE-rational, RPBE-exp, B88, B86, PW91, OPTX, G96, AM05, LB-potential, HJS, WC, SOGGA, EV93, AK13); **GGA-C ≈ 6** (PBE-H, LYP, P86, WilsonLevy, AM05, one-offs); **GGA-K ≈ 2** (TF-λ-vW, PBE-kinetic-shell); **mGGA-X ≈ 6** (TPSS, SCAN, Minnesota, BR89, MVS/MS, one-offs); **mGGA-C ≈ 5** (TPSS, SCAN, Minnesota/BC95, CS/B94); **hybrids/RSH = 0 new kernels** (pure mixing data).
- **The single biggest win:** the PBE rational shell `Fx = 1+κ−κ/(1+μs²/κ)` plus its argument-substitution descendants (TPSS, SCAN h1x) covers well over 100 functional entries across GGA-X, GGA-K and mGGA-X with parameter/argument changes only.
---
## Recommendations (for the JAX clean-room reimplementation)
1. **Stage 1 — implement the high-coverage kernels first.** In priority order by functional count: (a) DiracSlater LDA-X, (b) PW92 + VWN local correlation, (c) PBE rational exchange shell, (d) PBE H(t) correlation, (e) B88 + LYP (gets you BLYP/B3LYP), (f) the B97 u-power series. These six kernels plus their parameter tables already cover the majority of *production* functionals (PBE, PBEsol, revPBE, RPBE, BLYP, B3LYP, PBE0, the B97/HCTH family).
2. **Stage 2 — meta-GGA shells:** TPSS rational-with-iso-orbital, SCAN/r2SCAN interpolation (implement r2SCAN's regularized `α̃` first — it is the numerically robust default; use dp2 = 0.361), Minnesota PBE×power-series. Defer BR89 (it needs a per-point Newton root-find for the exchange-hole parameter — implement as a custom-JVP-wrapped solver).
3. **Represent parameters as a database, kernels as pure functions.** Schema per leaf: `{functional_id, kernel_family_id, param_tuple, base_LDA_ref, family/kind tags, citation/DOI}`. Hybrids/RSH get an extra mixing record `{alpha, beta, omega, screening_convention ∈ {erf, yukawa}, component_kernel_refs}`.
4. **Encode the numerical guards from libxc source as kernel-level config:** density floor (`dens_threshold`), s→∞ saturation (PBE rational saturates naturally; RPBE/B88 need overflow-safe exp/arcsinh), τ iso-orbital boundaries (α near 1 for SCAN — use r2SCAN regularization; z ≤ 1 clamp for TPSS correlation), and the Laplacian/Fermi-hole-curvature handling for the BR89 class (replicate `--disable-fhc` behavior).
5. **Validate against libxc reference data per functional** (energies + up to 4th derivatives), since libxc's Maple-generated code is the de-facto numerical standard. Mismatches usually trace to (i) the VWN3/VWN5 ambiguity, (ii) the τ factor-of-½ convention, or (iii) the (3π²) vs (6π²) reduced-gradient constants.
**Thresholds that change the plan:** if you only need the ~20 most-used functionals, Stages 12 minus BR89/Minnesota suffice (~10 kernels). If you need full libxc parity including the long tail, budget for ~6070 kernels and the transcendental BR89 solver; the marginal cost per additional functional then drops to a single database row.
---
## Caveats
- **Parameter precision:** three values were corroborated from the peer-reviewed TranLehtolaPittalisMarques review (arXiv:2602.17333, 2026) and program docs rather than read verbatim from the `.mpl`/`.c` source blobs — specifically `GGA_X_XPBE` (κ=0.91954, μ=0.23889), `GGA_X_PBE_MOL` (μ≈0.27583), and the `GGA_X_LAMBDA_OC2_N` N-dependent κ. Cross-check these directly against `maple/gga_x_xpbe.mpl`, `gga_x_pbe.c`, and `gga_x_lambda*.mpl` before committing to a database. (GitLab raw blobs render via JavaScript and were not directly fetchable during this research.) The PBE/PBEsol/B88/LYP/PW92/SCAN/r2SCAN constants are confirmed (PBEsol μ=10/81, β=0.046 corroborated by the VASP wiki; r2SCAN dp2=0.361 per the published Correction to Furness 2020).
- **Kernel count is approximate** and depends on how finely you split "same form, different power p" cases (e.g. B86 p=1 vs p=4/5, or treating RPBE-exponential as distinct from PBE-rational). The 5070 figure treats distinct analytic *expressions* as distinct; collapsing near-identical rationals would push it lower.
- **Potential-only functionals** (LB94, mBJ/TB09) do not derive from an energy expression and must be flagged specially — they return a vxc directly and have no consistent εxc; libxc lists them but they cannot be used in energy-only or post-SCF energy evaluations.
- **Version drift:** functional definitions and even default parametrizations change between libxc releases (the changelog documents corrected parameters for KCIS, OPTC, CAM_QTP_01, LC_BLYP ω, and others). Pin to a specific libxc version (devel as of mid-2026) when building the parameter database.
- **VWN3/VWN5 and PZ/PW92 LDA-base ambiguity** is the single most common source of cross-code disagreement; record the exact LDA-correlation base for every GGA/mGGA correlation functional and every hybrid explicitly.
- **Combined-XC vs split functionals:** in libxc, most functionals are split into separate `_X` and `_C` entries that the host combines; a minority (LYP-based, TozerHandy, the `_XC` Minnesota and range-separated forms) are delivered as monolithic XC. Your database should mark each leaf as exchange-only, correlation-only, or combined-XC to drive the composition layer correctly.