Methods overview
What exists, grouped by family. Maturity varies a great deal between these. Check the grade and its anchors on Capabilities and validation before trusting a number. To go from a task to a method, start with Choosing a method.
| Family | Methods | Page |
|---|---|---|
| SCF and DFT | RHF, UHF, ROHF; KS-DFT (LDA, GGA, hybrid, range-separated, VV10, SCAN/r2SCAN); D3(BJ) and MBD@rsSCS dispersion; IEF-PCM and COSMO solvation; gradients, optimization, finite-difference frequencies, TS search and IRC | SCF and DFT |
| MP2 | RI-MP2, attenuated (erfc, terfc), SCS, SCS-MP2(2terfc), MP2-V, RS-MP2 + LR-RPA, OO-RI-MP2, MP3, Laplace MP2 and SOS-MP2; local approximation of RI-MP2 | The MP2 family |
| Coupled cluster | CCD, CCSD, CCSD(T), LinLCCD (hh, drivers-only, full; exact or local); double hybrids B2PLYP, DSD-PBEP86, ωB97X-L-V | Coupled cluster |
| Response | PDEP-RPA, dRPA by the Riccati solve (exact or local), G0W0, COHSEX, evGW0, evGW, BSE-TDA, TDA/TDDFT, polarizabilities and \( C_6 \) | RPA, GW and excited states |
| Electron transfer | cDFT, \( H_{ab} \) couplings (Python and Rust, no CLI) | Constrained DFT |
QM/MM embedding is on its own page: QM/MM.
Exact and local correlation
A correlated calculation is two choices: the method (what is computed:
RI-MP2, dRPA, LinLCCD) and the approximation (whether, and how, its
amplitudes are truncated). ferric keeps them apart. method.kind (and the
Python function) names the method, and the method is computed exactly. A
local approximation is asked for explicitly, with the CLI's
[local] section or the Python local= and
eps= keywords, and only rimp2, drpa and linlccd have one.
The one local scheme is the amplitude threshold: in the Boys-localized
basis, a pair amplitude whose localized integral is at or below eps is
dropped (single threshold, Wang et al. 2023). Three facts govern its use:
epsis part of the model. It has no default and must be written, and every printout and run-log record of a local run carries it, with the fraction of amplitudes kept ("local": nullmarks an exact run). Report it with any number you quote.eps = 0is the exact method. It keeps every amplitude and reproduces the exact energy (RI-MP2 to ≤ 1e-9 Ha; dRPA to the canonical plasmon formula; LinLCCD of the same variant), which is how each local path is anchored.- The error is one-sided and grows faster than linearly in
eps: dropped amplitudes give less correlation energy, measured with the same sign at every point, and each decade ofepsraises the error by more than a decade (the fraction of amplitudes dropped grows with it). MP2 has Hylleraas stationarity; dRPA does not, so its error is first order in the dropped amplitudes and the one-sidedness is measured, not guaranteed.
Riccati, plasmon and PDEP are not approximations of each other: they are
algorithms for the same exact dRPA. The drCCD Riccati solve at eps = 0,
the plasmon formula and full-rank PDEP agree to ≤ 2.6e-14 Ha (H2/STO-3G and
water/6-31G, PDEP at 64 quadrature points). Which one to use is a cost
question: see RPA, GW and excited states.
Formal scaling with system size N, for orientation (these are the textbook exponents, not measured timings): SCF and DFT N⁴ for exact four-centre integrals, lower with density fitting and screening; RI-MP2 and its variants N⁵; CCSD N⁶; (T) N⁷.
Infrastructure
Shared machinery underneath all of the above:
- Screening: Schwarz bounds on every four-centre path, CSB/CSAM (Thompson & Ochsenfeld 2017) as options, LinK exchange (Ochsenfeld, White & Head-Gordon 1998). QQR (Maurer, Lambrecht & Ochsenfeld 2012) is implemented and validated as a bound but not used in production.
- Spherical and Cartesian basis support, with BSE-JSON and Gaussian-94 parsers and a set of bundled orbital, RI, JK and ECP bases.
einsum!: a tensor-contraction macro that routes contractions through BLAS3 GEMMs, used throughout the CC and MP3 code.- Memory budgets: allocation ceilings that refuse an oversized job with a named breakdown instead of letting it be OOM-killed.
- Python bindings (pyo3) and a TOML-driven CLI. Not every method has both; Capabilities and validation says which.
Properties
ESP at nuclei and on the molecular surface, electric field, static and atom-partitioned polarizabilities, Mulliken, Löwdin, Hirshfeld, CHELPG and RESP charges, density matrices, and NPZ export of ML-ready features.
Negative results
Known limits and measured negatives are kept in one place, Capabilities and validation: known limits, so a correction has one row to change. Two are worth knowing before you pick a method:
- TDHF/RPAx \( C_6 \) stays about 63% low regardless of gap. Use that kernel for static polarizabilities only.
- Local MP2: the integral-direct local MP2 (
rimp2with[local] integral_direct = true) is measured sub-quadratic (about N1.24 erfc, N1.4 Coulomb) on alkanes C20–C48; it is at about parity with exact RI-MP2 at C20 and about 6× faster at C32. Local MP2 withoutintegral_directmakes no scaling claim. See The MP2 family.
The AO-sparse Laplace SOS-MP2 truncation is not a negative: the radius it needs does not track the molecular diameter. See the MP2 page.