Capabilities and validation
Implemented ≠ validated. Working code is not a checked number.
Read this page before trusting any result. It lists every CLI method.kind
(which references it accepts, which tasks it supports, the matching Python
function, an example input) and the Python entry points. Each graded CLI
method.kind gets a grade (three kinds are ungraded, and Python entry points
are not graded individually), and the page shows how far each grade's numbers have been checked against an
independent reference and where they are known to fail.
How to read it: find the capability in the matrix
or the Python entry points. A matrix Grade cell links
to the Anchors table when a row there holds the evidence; the
Known limits section records the measured
negatives. Every matrix cell comes from the CLI dispatch in
crates/ferric-cli/src/lib.rs or the bindings in
crates/ferric-python/src/lib.rs. The page is maintained by hand, so check
those two files if a cell looks wrong. For keyword details see the
input reference; for the example files see the
examples index.
Grades
The grades are the ones ferric's CLI uses. Every CLI method.kind except
laplace-sos-mp2 has a grade. A kind's grade is for the EXACT method; the
local approximation of rimp2, drpa and linlccd (the [local] section)
is graded separately in that row's Caveat. The CLI prints the Smoke and Spike
grades as a [warning] line on stderr at run time; Proven kinds and the
ungraded kind print nothing. The warning text is the
EPISTEMIC_WARNINGS table in crates/ferric-cli/src/lib.rs, and the
"Caveat" column of the matrix condenses it.
| Grade | Meaning |
|---|---|
| Proven | Total energies (or the stated property) agree at a stated tolerance with an independent reference, pinned by tests. An independent reference is another code (PySCF, MOLGW), a numpy reference, a published value, or an exact limit the method must reduce to. The CLI groups "Proven" and "Proven (narrow)" together and does not say which kinds are narrow. |
| Proven (narrow) | As Proven, but only on the stated class of systems, or only against the stated kind of reference (for example exact limits only) |
| Smoke | Runs end to end, and some pieces are checked, but there is no independent reference for the headline number, or only one loose one. The checks are range bands, internal consistency or limits rather than a tight external number. Do not quote a Smoke result as a reference value. |
| Spike | Built on new infrastructure and not yet compared against any reference code; for exploration only |
| not graded | Dispatched by the CLI but in neither its Proven list nor its warning table, so it prints no warning; treat it as unproven |
Symbols: ✓ = supported. — = not supported (the CLI refuses it with an error).
FD = finite differences of the analytic gradient (6N gradient
evaluations). The analytic Hessian covers closed-shell RHF and UHF of any
multiplicity with exact J/K, no ECP and a basis up to f functions; rhf and
uhf frequencies use it there by default.
CLI method.kind matrix
"Reference" is the SCF reference the CLI actually builds for that kind. Open-shell support is listed only where the dispatch code handles it (see Open shells below).
method.kind | Family | Reference (CLI) | Energy | task = "optimize" | task = "frequencies" | Python | Example | Grade | Caveat |
|---|---|---|---|---|---|---|---|---|---|
rhf | SCF | RHF; RKS with [dft] functional (refuses multiplicity > 1) | ✓ | ✓ analytic | analytic (RHF, exact J/K, no ECP, up to f); FD otherwise | run_rhf, run_optimize, run_frequencies | water-rhf.toml | Proven | — |
uhf | SCF | UHF; UKS with [dft] functional | ✓ | ✓ analytic (+ D3(BJ) or MBD@rsSCS gradient with [dft] dispersion on UKS) | analytic (UHF, exact J/K, no ECP, up to f); FD otherwise | run_uhf, run_frequencies(reference="uhf", xc=...) | h_uhf.toml | Proven | — |
rohf | SCF | ROHF; ROKS with [dft] functional | ✓ | ✓ analytic (+ D3(BJ) or MBD@rsSCS gradient with [dft] dispersion on ROKS) | FD | run_rohf, run_frequencies(reference="rohf", xc=...) | — | Proven | — |
ksdft | SCF/DFT | RKS; UKS when multiplicity > 1 | ✓ | ✓ analytic (+ D3(BJ) or MBD@rsSCS gradient with [dft] dispersion, RKS and UKS) | FD; with [dft] dispersion (closed shell) FD of the KS + dispersion gradient; refused with grid_prune | run_dft / run_ksdft, run_frequencies(xc=..., dispersion=...) | benzene-dfb3lyp.toml, h2-lda-opt.toml | Proven | — |
rimp2 | MP2 | RHF; UHF + unrestricted RI-MP2 when multiplicity > 1 (energy only) | ✓ | ✓ analytic (Z-vector; closed shell only) | — | run_rimp2 (UHF + UMP2 when multiplicity > 1) | water-rimp2.toml; local: water-rimp2-local.toml, alkane8-rimp2-local-direct.toml | Proven | Exact RI-MP2. With [local] scheme = "amplitude-threshold" (run_rimp2(local=..., eps=...)): Proven (narrow) by its exact limit — at ε = 0 the in-core and integral_direct paths match PySCF DF-MP2 to ≤1.1e-11 Ha (H2O and n-butane, 6-31G and cc-pVDZ); finite ε is a measured error map, not validated; closed shell and task = "energy" only; ε = 0 reproduces exact rimp2; the exact reference and the error against it are opt-in ([local] reference = true, compute_reference=True). integral_direct = true never forms the global 3-index tensor; its measured scaling is under Known limits. |
mp3 | MP2 | RHF | ✓ | — | — | run_mp3 | water-mp3.toml | Proven | — |
oo-rimp2 | MP2 | RHF; UHF + unrestricted OO-RI-MP2 when multiplicity > 1 (energy only) | ✓ | — | — | run_oo_rimp2 (closed shell only) | water-oo-rimp2.toml | Proven (narrow) | Energy matches an independent numpy OO-RI-MP2 to 7.5e-13 Ha (closed-shell H2O and NH3, UHF CH3 / cc-pVDZ) and the closed-shell analytic gradient matches a finite difference of its own energy to 8e-9 Ha/Bohr. ORCA 6.1.1 stops 3.7e-8 to 7.0e-8 Ha above the same minimum. |
att-rimp2 | MP2 | RHF | ✓ | — | — | run_attenuated_rimp2 | water-attmp2.toml | Proven | — |
mp2-v | MP2 | RHF; UHF when multiplicity > 1 (energy only) | ✓ | — | — | run_mp2_v (closed shell only) | water-mp2v.toml | Smoke | The VV10 half is bit-identical to the ωB97X-V path. No comparison to any published MP2-V number; no published MP2-V total energy exists to compare against. The defaults are fitted for aug-cc-pVTZ with frozen core and no counterpoise. Open shell is doubly unvalidated. |
scs-mp2 | MP2 | RHF | ✓ | — | — | run_scs_mp2 | water-scs-mp2.toml | Proven | — |
scs-mp2-2terfc | MP2 | RHF | ✓ | — | — | run_scs_mp2_2terfc | water-scs-mp2-2terfc.toml | Proven | Needs the terfc tables (FERRIC_TERF_TABLE_DIR). |
laplace-mp2 | MP2 | RHF | ✓ | — | — | run_laplace_mp2 | water-laplace-rimp2.toml | Proven | Minimax-Laplace denominators on five systems (R = 19.0 to 45.7) against exact DF-MP2 and against a quadrature-isolated reference that separates quadrature error from implementation error. See the Anchors table. |
laplace-sos-mp2 | MP2 | RHF | ✓ | — | — | run_laplace_sos_mp2 | water-laplace-sos-mp2.toml | not graded | With c_os = 1.0 it reproduces the opposite-spin MP2 energy (internal reference). |
pdep-rpa | RPA/GW | RHF, or RKS via [rpa] xc; UHF/UKS when multiplicity > 1 (energy only) | ✓ | ✓ (closed-shell RHF reference only; [rpa] xc is refused; analytic SCF + FD correlation) | — | run_pdep_rpa (closed shell only; open-shell U-PDEP-RPA is CLI-only) | water-pdep-rpa.toml | Proven | — |
rs-mp2-rpa | MP2 / RPA | RHF | ✓ | — | — | run_rs_mp2_rpa | water-rs-mp2-rpa.toml | Smoke | The ω→0 and ω→∞ limits reduce exactly to MP2 and MP2+dRPA and are Proven. At production ω it is only marginally benchmarked on one small subset and is unproven on new systems. |
gw | RPA/GW | RHF, or RKS via [rpa] xc; UHF/UKS, or ROHF/ROKS with [gw] reference = "rohf", when multiplicity > 1 (energy only) | ✓ (QP energies) | — | — | run_gw, run_u_gw | water-g0w0-pbe.toml, oh-ugw.toml | Smoke | Matches PySCF gw_ac/ugw_ac only at matched settings (G0W0@HF and @PBE ≤1.3e-7 Ha, evGW ≤5.7e-7, ECP ≤2.5e-6, U-G0W0@UHF ≤7e-6 Ha; U-G0W0@UKS/PBE, with Σx − v_xc inside each spin's quasiparticle equation, ≤2.6e-8 Ha; U-G0W0 on a semi-canonicalized ROHF reference in the Anchors; the ROKS reference is not compared) with [rpa] n_quad = 100 and trunc_thresh = 0; the CLI defaults are coarser (the 20-point grid moves the H2O G0W0@PBE HOMO by 13 meV) and truncation is not validated. See the G0W0 anchors. |
bse-tda | RPA/GW | RHF only (refuses multiplicity > 1) | ✓ (excitations) | — | — | run_bse_tda | water-bse-tda.toml | Smoke | The lowest five singlets match an independent numpy BSE-TDA to 1.8e-10 Ha given the same quasiparticle energies (H2O cc-pVDZ and aug-cc-pVDZ, NH3 and CH2O cc-pVDZ; see anchors). The quasiparticle energies come from the internal G0W0, which matches PySCF only at n_quad = 100, trunc_thresh = 0; the defaults are coarser. |
tdhf-static-polarizability | RPA/GW | RKS only ([rpa] xc required) | ✓ (static α) | — | — | run_tdhf_static_polarizability | water-tdhf-static-alpha.toml | Smoke | Static α only, and not established: at a physical scissor (0.36 Ha) it is 5.20 a.u. for water/cc-pVDZ against DOSD 9.64 (−46%). The same kernel gives C6 about 63% low. At scissor = 0 it can hard-error on a negative α diagonal; set [gw] scissor to about 0.3–0.4 Ha. |
ccsd | CC | RHF (spin-adapted solver) | ✓ | — | — | run_ccsd | water-ccsd.toml | Proven | — |
ccd | CC | RHF only (refuses multiplicity > 1) | ✓ | — | — | run_ccd | water-ccd.toml | Proven (narrow) | RI-CCD, spin-orbital solver. |
ccsd(t) | CC | RHF only (refuses multiplicity > 1) | ✓ | — | — | run_ccsd_t | water-ccsd-t.toml | Proven (narrow) | Spin-adapted CCSD + spin-adapted (T). Prints E_CCSD, E_(T) and the total. |
linlccd | CC | RHF only (refuses multiplicity > 1; open-shell LinLCCD(hh) is library-only) | ✓ | — | — | run_linlccd | water-linlccd.toml; local: water-linlccd-local.toml | Proven (narrow) | No other code implements LinLCCD(hh); the energy matches an independent numpy solve on PySCF density-fitted integrals to ≤1.2e-12 Ha (H2O and NH3 through the CLI's closed-shell path; UHF OH through the library-only open-shell path). With the hole–hole ladder off it reduces exactly to RI-MP2, and with exact integrals its driver terms reproduce canonical MP2; size consistency is checked. [mp2] linlccd_variant (hh, drivers-only, full) applies exact and local. With [local] (amplitude threshold): Proven (narrow); at ε = 0 every variant, full included, matches the independent numpy solve to ≤ 4.4e-13 Ha, as does the exact path. |
drpa | RPA/GW | RHF only (refuses multiplicity > 1) | ✓ | — | — | run_drpa, run_drpa_scan (local ε scan) | water-drpa.toml; local: water-drpa-local.toml | Proven (narrow) | Exact dRPA@HF by the drCCD Riccati solve with nothing truncated; equals the canonical plasmon formula (≤1e-12 Ha), full-rank PDEP (pdep-rpa, trunc_thresh = 0), and an independent numpy plasmon dRPA on PySCF integrals (≤3.0e-11 Ha; water and n-butane at 6-31G and cc-pVDZ, n-octane at 6-31G; see Anchors). Its memory grows as no³·nv² and a run that cannot fit is refused before the SCF. With [local] (amplitude threshold, eps or eps_sweep): Proven (narrow) by its exact limit; the finite-ε error is not variational, and on n-octane it is positive and grows with ε at every point measured (Anchors). |
wb97x-l-v | CC § ωB97X-L-V | Its own RKS (wB97X-L-V) reference (refuses multiplicity > 1; open shell is library-only) | ✓ | — | — | none | water-wb97xlv.toml | Proven (narrow) | E_KS and λ·E_c against PySCF with the paper's parameters plus a numpy LinLCCD(hh) (water, OH / def2-SVP); Be₂ bond energy against the paper's Table 4. |
b2plyp | CC § double hybrids | Its own RKS reference | ✓ | — | — | run_double_hybrid(kind="b2plyp") | water-b2plyp.toml | Spike | Weighted B88+LYP reference. Not compared with any reference code. |
dsd-pbep86 | CC § double hybrids | Its own RKS reference | ✓ | — | — | run_double_hybrid(kind="dsd-pbep86") | — | Spike | Weighted PBE+P86 reference. Not compared with any reference code. |
tda | RPA/GW § TDDFT | RHF (CIS), or RKS via [tddft] xc (refuses multiplicity > 1) | ✓ (excitations) | — | — | run_tddft(method="tda") | water-tda.toml | Proven (narrow, closed shell) | The lowest five roots match PySCF TDA for water, formaldehyde and NH3 at 6-31G and aug-cc-pVDZ with HF, LDA, PBE and B3LYP: at most 6.5e-4 eV (B3LYP), test bar 1e-3 eV. A [tddft] xc with no f_xc kernel (meta-GGA, VV10, range-separated) is refused before the SCF. |
tddft | RPA/GW § TDDFT | RHF (TDHF), or RKS via [tddft] xc (refuses multiplicity > 1) | ✓ (excitations) | — | — | run_tddft(method="casida") | water-tddft-pbe.toml | Proven (narrow, closed shell) | Same comparison of the lowest five roots against PySCF TDDFT, same bar. Same functional refusals as tda. |
task = "optimize" is accepted only for rhf, ksdft, uhf, rohf,
pdep-rpa and rimp2. task = "frequencies" is accepted only for rhf,
ksdft, uhf and rohf. On an open-shell molecule both tasks are accepted
only for uhf, rohf and ksdft (UHF/UKS, ROHF/ROKS). Both tasks refuse
[dft] grid_prune, and [scf] k_builder = "cosx" except for rhf, ksdft
and uhf (closed-shell RHF/RKS and UHF; UKS with COSX is refused before the
SCF); a COSX final pass is skipped for them. [dft] dispersion is
refused for frequencies on an open-shell reference: the frequency driver
threads the correction through the closed-shell SCF only, so it would report
the Hessian of the uncorrected surface. The RKS, UKS and ROKS optimizers apply
D3(BJ) and MBD@rsSCS (energy and exact gradient); an
open-shell task = "energy" single point applies either. Any
other combination exits with an error before the SCF runs.
Open shells in the CLI
uhfandrohfread[molecule] multiplicitydirectly. With[dft] functionalthey run UKS and ROKS, for energies, optimizations and frequencies.ksdftwithmultiplicity > 1runs UKS (theuhfroute with the functional set). For ROKS userohfwith[dft] functional.rhfrefusesmultiplicity > 1and points touhf/rohf.rimp2andoo-rimp2run on the same plain UHF thatkind = "uhf"runs, then take unrestricted RI-MP2 (UMP2, as PySCFmp.MP2(uhf)) and unrestricted OO-RI-MP2.[mp2] kappais refused on an open shell.task = "energy"only: there is no unrestricted MP2 nuclear gradient.pdep-rpa,gwandmp2-vsolve UHF with MOM after 5 iterations whenmultiplicity > 1, fortask = "energy"only. Forpdep-rpaandgw, setting[rpa] xcmakes that reference UKS;gwwith[gw] reference = "rohf"uses ROHF (ROKS with[rpa] xc) instead, semi-canonicalized per spin; U-G0W0 on a semi-canonicalized ROHF reference is in the Anchors, the ROKS reference is not compared.mp2-vdoes not read[rpa] xcand stays UHF.linlccdandwb97x-l-vrefuse an open-shell molecule; their open-shell versions are library-only (ferric_cc::linlccd_u::u_linlccd,ferric_cc::double_hybrid::u_solve_wb97x_l_v).ccd,ccsdandccsd(t)refuse an open-shell molecule, and no open-shell CCD, CCSD or CCSD(T) exists in the library either: every CC solver reads restricted orbitals.- Every other kind refuses
multiplicity > 1with an error before any integral is computed.
Python entry points
These are Python functions without a method.kind of their own; some rows
also have a CLI route through a TOML section or task, noted in the row.
Scope is taken from the binding code and its docstrings. They are not graded
individually.
| Capability | Python | Scope (verified in code) |
|---|---|---|
| Open-shell KS frequencies | run_frequencies(reference="uhf"|"rohf", xc=...) | Setting xc promotes RHF/UHF/ROHF to RKS/UKS/ROKS. FD Hessian. Also CLI: kind = "uhf"/"rohf" with [dft] functional and task = "frequencies". |
| Transition-state search | run_saddle | P-RFO. Closed shell only (refuses multiplicity ≠ 1). Raises if the start has no negative mode. Costs 2(6N+1) + (steps+1) gradients. |
| Reaction path | run_irc | Both IRC branches from a saddle's imaginary mode. Closed shell only. |
| Geometry optimization (Python) | run_optimize | RHF only (no xc argument). Accepts point charges and a field. |
| QM/MM energy + forces | QmmmSystem, run_qmmm | method = "rhf"/"uhf"/"rks"/"uks". Link atoms, boundary schemes (keep/delete-host/rc/rcd), Gaussian-smeared charges, Thole polarizable sites, an optional MM force field (MmTopology). See QM/MM. The CLI [qmmm] section covers fixed point charges only. |
| QM/MM optimization | run_optimize_qmmm | Same four methods. move_mm = "none"/"all"/("within", r)/("residues", [...]). Moving MM atoms requires mm_topology. |
| Constrained DFT | run_cdft, CdftConstraint | UHF, or UKS when functional names a libxc functional other than "HF" (None and "HF", any case, give UHF). Constrained UKS/PBE matches NWChem 7.2.2 (see anchors); UHF-cDFT has only internal checks, because NWChem cannot run Hartree–Fock cDFT. Fragment target is a Becke electron population ("charge": Nα + Nβ; "spin": Nα − Nβ), not a net charge. Raises if the λ loop does not converge. Not graded; see Constrained DFT. |
| cDFT electron-transfer coupling | cdft_coupling | Wu–Van Voorhis H_ab between two run_cdft states, each with one converged "charge" constraint, on the same geometry, basis, occupations and Hamiltonian. Not graded. |
| Point charges / uniform field | point_charges=, external_field= on run_rhf/run_uhf/run_rohf/run_dft, run_optimize, run_frequencies, run_saddle, run_irc, run_pdep_rpa | Bohr and atomic units. run_rhf also takes smeared_charges=. The MP2/CC drivers take no external-potential arguments. The CLI equivalent is [external_potential], where a width makes a charge smeared. |
| D3(BJ) | run_dft(dispersion="d3bj"), run_frequencies(xc=..., dispersion="d3bj"), d3bj_energy | Additive, with parameters fitted per functional. run_frequencies takes it on the closed-shell reference only. |
| MBD@rsSCS | run_dft(dispersion="mbd"), run_frequencies(xc=..., dispersion="mbd"), mbd_rsscs_energy | run_dft adds it to total_energy from Hirshfeld volume ratios of the converged density (DftResult.volume_ratios), with β published for PBE, PBE0, HSE06. With with_gradient=True it adds the analytic gradient: the exact analytic gradient, including the orbital relaxation of the Hirshfeld volumes (Z-vector; LDA, GGA and hybrid-GGA functionals without VV10). mbd_rsscs_energy is the standalone energy from caller-supplied ratios. |
| Charges | mulliken_charges, lowdin_charges, hirshfeld_charges, chelpg_charges, resp_charges | Take an RhfResult or DftResult. Mulliken, Löwdin, CHELPG and RESP are documented closed-shell only. hirshfeld_charges uses the CLI's free-atom SCF proatoms, solved with the result's SCF settings; proatom="slater" selects the single-Slater proatom. RESP is a single-stage restrained fit, not multi-conformer RESP. |
| Electrostatic potential | esp_at_atoms, esp_at_points | Evaluated exactly from the density. esp_at_points takes (N, 3) points in Bohr. |
| Polarizability / moments | hirshfeld_polarizability, orbital_moments, density_second_moment | — |
| ω tuning | tune_omega | Range-separation ω for a named functional. |
| Conformer statistics | boltzmann_weights, weighted_stats*, ConformerEnsemble | — |
| Integrals | compute_eri3, compute_eri3_mo, compute_metric_2c, boys_localize, shell_info | Low-level access. |
Polarizable (Thole) embedding is Python and Rust only. IEF-PCM, UHF
stability descent and terfc-attenuated MP2 are reachable from both: see
[pcm], [scf] stability_descent and [mp2] att_operator in the
Input reference.
Anchors
Where numbers are checked, they are checked against external references or
exact limits, not against ferric's own earlier output. "Stated agreement" is
the measured difference recorded in the repository; "test tolerance" is what
the pinning test actually asserts, which is often looser. Proof links to
the test file that asserts the row, and, where one exists, the script that
generated its reference data; a row with nothing to link is not graded Proven.
Proof files named validation_*.rs are #[ignore]d, so an ordinary
cargo test skips them; they run in the weekly validation CI job and on
demand (cargo nextest run --run-ignored only -E 'binary(/^validation_/)').
| Capability | System / basis | Reference | Stated agreement | Test tolerance | Proof |
|---|---|---|---|---|---|
| UHF and ROHF energies, stability-checked | HO2, NO2, CH2 (triplet), allyl / 6-31G, def2-SVP | PySCF UHF/ROHF + stability() | 4.0e-12 Ha (energy); 3e-7 (⟨S²⟩) | 1e-10 Ha; 1e-6 | validation_open_shell_scf.rs, gen_uhf_rohf.py |
SCF stability: lowest orbital-Hessian eigenvalues and verdict (UHF internal, UKS internal, RHF internal, RHF→UHF external). RhfConfig::check_stability on an RHF/HF run reports BOTH the internal (singlet) verdict on ScfResult::stability and the external (RHF→UHF triplet, rhf_external_stability) verdict on ScfResult::stability_external; the external operator is also checked against the triplet block of ferric's UHF Hessian at the RHF point, an independent construction | N2⁺, OH (UHF), water at r(OH) = 0.9572 and 2.0 Å (RHF), NH2 (UKS/PBE) / 6-31G; H₂ at 2.0 Å / STO-3G (fast tier) | PySCF dense gen_g_hop_uhf/gen_g_hop_rhf/hop_rhf2uhf Hessians + stability() | eigenvalues ≤ 4.5e-10 Ha; energies ≤ 7.1e-12 Ha; the dedicated triplet operator matches the UHF-at-RHF triplet block to ≤ 2.3e-13 Ha (two independent constructions); stable/unstable verdicts match PySCF, including water at 2.0 Å where internal is STABLE (+1.97e-2) and external UNSTABLE (−3.07e-1); OH (an exact zero mode) is reported MARGINAL by ferric where PySCF reports stable. KS references are refused for the external channel (no triplet XC kernel f_αα − f_αβ) | 1e-8 Ha; 1e-10 Ha; 2e-12 Ha | validation_scf_stability.rs, scf_stability_external.rs, gen_scf_stability.py |
SCF convergence ladder with RHF internal stability descent (solve_rhf_ladder, check_stability + scf_stability_descent): converged energy, internal (singlet) and external (RHF→UHF) Hessian eigenvalues | N2 at 1.60 Å, CuCN, Cr(CO)6 / def2-SVP (Cu, Cr from Basis Set Exchange) | PySCF RHF .newton() from four guesses; dense singlet and triplet orbital Hessians from MO integrals, checked against PySCF's own operators | energy ≤ 8.8e-10 Ha; eigenvalues ≤ 1.3e-9 Ha; the plain-DIIS rung lands on the N2 saddle 1.906e-2 Ha higher | 1e-8 Ha; 1e-8 Ha | validation_scf_ladder.rs, rhf_stability_descent.rs, gen_scf_ladder.py |
| RHF and UHF with def2 ECPs: energies and analytic gradients | HI, CH3I, RbH, I atom (UHF) / def2-SVP, def2-TZVP; SnH4 / def2-TZVP; HBr (all-electron control) | PySCF RHF/UHF + analytic gradient, and ORCA RHF (NoRI), both fed ferric's basis and ECP | ≤ 2.9e-8 Ha (energy, both codes); ≤ 2.3e-8 Ha/Bohr (gradient); all-electron HBr 1e-11 | 2.5e-7 Ha; 1e-7 Ha/Bohr | validation_ecp.rs, gen_ecp.py, gen_ecp_orca.py |
| RHF, UHF, RKS, UKS, ROKS and RI-MP2 nuclear gradients with def2 ECPs: full gradient, the ECP term alone (HF and KS; for RI-MP2 the ECP term is tested through the full gradient and a control that the HF-density ECP term misses), translation invariance, 5-point finite difference of ferric's own energy | HF: HI, CH3I / def2-SVP, def2-TZVP; SnH4 / def2-TZVP; CH2I (UHF doublet) / def2-SVP, def2-TZVP; HBr (all-electron control). KS/PBE: CH3I (RKS), CH2I (UKS, ROKS) / def2-SVP. RI-MP2: CH3I / def2-SVP, def2-svp-rifit | HF: PySCF analytic gradient with its ECP term separated (checked against a fixed-density finite difference), and ORCA EnGrad (NoRI), both fed ferric's basis and ECP. KS: PySCF with exact J, the matched (75,110) Becke grid and grid_response=True (analytic for RKS/UKS, 5-point finite difference of the ROKS energy). RI-MP2: 5-point finite difference of the PySCF DF-MP2 energy, its ECP term from the relaxed-energy derivative with respect to a λ dV_ECP/dR hcore perturbation, and ORCA RI-MP2 EnGrad | HF: gradient ≤ 1.3e-7 Ha/Bohr vs PySCF and ≤ 2.5e-7 vs ORCA; the ECP term alone ≤ 1.3e-7; own 5-point FD ≤ 1.9e-7; energy ≤ 2.9e-8 Ha. KS: energy ≤ 2.0e-8 Ha, gradient ≤ 1.4e-8 Ha/Bohr, the ECP term alone ≤ 1.1e-8, own FD ≤ 4.3e-8. RI-MP2: E_corr 7.4e-10 Ha; gradient 7.7e-9 Ha/Bohr vs the PySCF finite difference and 4.3e-8 vs ORCA | HF: 5e-7 Ha/Bohr (PySCF), 1e-6 (ORCA), 6e-7 (FD). KS: 2e-7 (PySCF), 6e-7 (FD). RI-MP2: 1e-7 (PySCF FD), 5e-7 (ORCA) | validation_ecp_gradient.rs, validation_ecp_rimp2_gradient.rs, gen_ecp_gradient.py |
| ESP at the nuclei | H2O, CH3OH (RHF), HO2 (UHF) / cc-pVDZ, def2-SVP | PySCF int1e_rinv on PySCF's converged density, fed to ferric in ferric's AO order (AO order checked through the overlap matrix) | 4.8e-14 a.u. same density; 4.6e-9 own SCF | 5e-13 a.u.; 5e-8 a.u. | validation_density_properties.rs, gen_properties.py |
| Electric field at the nuclei | H2O, CH3OH, HO2 / cc-pVDZ, def2-SVP | PySCF int1e_iprinv, same density (checked against a finite difference of the ESP) | 1.5e-13 a.u. same density; 2.7e-9 own SCF | 1e-12 a.u.; 3e-8 a.u. | ″ |
| Becke effective volumes | H2O, CH3OH, HO2 / cc-pVDZ, def2-SVP; free atoms Z = 1–18 (UKS-PBE; B, C, O, F, Al, Si, S, Cl as the fractional-occupation ensemble) / aug-cc-pVDZ | numpy on ferric's grid rebuilt from PySCF's radial, Lebedev and AO values, with ferric's Becke partition; free atoms vs PySCF UKS | 1.4e-15 rel. same density; 7.1e-9 (molecules), 3.5e-8 (atoms) own SCF; Li, Be, Na, Al 1.5e-6 from ferric's XC density floor (ρ ≤ 1e-10), which the reference does not apply; free-atom energies 3.1e-12 Ha | 1e-13; 5e-8; 2e-6 (Li, Be, Na, Al) | ″ |
Hirshfeld charges (hirshfeld_charges) with the same-basis free-atom SCF proatom (what the CLI and ferric.hirshfeld_charges pass by default) and with the single-Slater proatom (proatom="slater"); free-atom proatom tables (spherically_averaged_proatom) | H2O, CO, CH3OH (RHF) / cc-pVDZ, def2-SVP; free H, C, O (UHF) and He (RHF) atoms; HeH promolecule (zero-charge limit) | numpy on ferric's grid rebuilt from PySCF's radial, Lebedev and AO values, with PySCF's converged density and PySCF free-atom proatoms tabulated and interpolated as ferric does (scipy cubic spline of ln ρ, an independent build of the interpolant); the same charges on a dense (200, 590) grid and on PySCF's own level-9 grid (agreeing to ≤2.8e-7 e) | 1.9e-13 e same density; 2.6e-9 e own SCF and own free atoms; ferric's default grid ≤2.0e-4 e from the dense-grid value; the 0.05 Bohr proatom table ≤2.9e-7 e from a 0.005 Bohr one; promolecule 8.7e-6 e | 1e-10 e; 1e-6 e; 1e-3 e; 5e-5 e | validation_hirshfeld.rs, gen_hirshfeld.py |
Hirshfeld effective volumes (atomic_effective_volumes_hirshfeld, the TS C6 volumes), on the atom-centred Becke–Lebedev grid of hirshfeld_volume_grid_config (75 radial × 590 angular — the volume integrand carries an r³ factor and needs a higher Lebedev order than the XC grid's 110); and atomic_effective_volumes_hirshfeld_on_grid on the 0.20 Bohr lattice, which MBD@rsSCS integrates on | H2O, CO, CH3OH / cc-pVDZ, def2-SVP (SCF proatom); free H, C, O atoms (no proatom, as the CLI's free-atom denominator) | numpy on a dense (200, 590) Becke–Lebedev grid, same density and proatoms; the free-atom weight-one moment ∫ρ r³ against the same grid is the exactness anchor (one atom ⇒ Hirshfeld weight 1); plus numpy on ferric's lattice rebuilt point for point for the lattice entry point | 1.1e-7 rel. vs the dense grid, same density and own SCF alike; ∫ρ within 2.0e-7 e of N_e on the same grid; CH3OH's two mirror-image methyl H equal to 2.9e-14 rel.; free-atom weight-one moment 8.1e-13 rel. (the 1e-12 Hirshfeld weight floor then removes 1.2e-3 of free H's volume, 3.4e-10 of C's); lattice entry point 3.2e-13 rel. same density | 1e-6; 2e-6 e; 1e-10; 1e-11; 1e-11 | ″ |
TS C6 and MBD@TS given the same volume ratios: TS α_eff, ω, pair and molecular C6 (ts_atom_params, ts_dynamic_polarizability, casimir_polder_c6); full-range SCS screened α(iω) and C6 (mbd_screen, mbd_dynamic_polarizability), and the plain Gaussian-damped coupled-oscillator energy (coupled_qho_energy_plain_gg), which checks the oscillator algebra and is not a dispersion energy | H2O, CO, CH3OH / cc-pVDZ, def2-SVP; CH4, benzene / cc-pVDZ (Hirshfeld volume ratios); ferric's and pymbd's frequency grids | pymbd 0.15.0 / libmbd: free-atom table checked equal for every element used; MBD screening as libmbd scs and energy as libmbd plain screening with Gaussian damping (dip,gg), cross-checked against a numpy build and mpmath dimer closed forms | TS ≤ 7.5e-16 rel.; MBD 8.1e-15 against the same A&S erf ferric uses, 5.1e-7 against an exact erf | 1e-12; 1e-11; 1e-6 | validation_ts_mbd.rs, gen_ts_mbd.py |
MBD@rsSCS energy (mbd_rsscs_energy, mbd_rsscs_energy_from_params): range-separated SCS screening (short-range (1−f)·T_GG), screened α₀, C6, ω and R_vdW, and the long-range coupled-oscillator energy with f·T_bare; free-atom R_vdW table (Z = 1–54); frequency grid | H2O, CO, CH3OH / cc-pVDZ, def2-SVP; CH4, benzene / cc-pVDZ (Hirshfeld volume ratios); β = 0.83 (PBE) and 0.85 (PBE0/HSE06), a = 6 | pymbd 0.15.0 (screening + mbd_energy in Python) and libmbd 0.15.0 (Fortran, variant='rsscs') given identical inputs, which agree with each other to < 1e-10; R_vdW table read back from pymbd vdw_params; grid vs pymbd freq_grid(15) | E ≤ 9.5e-12 rel.; screened α₀, C6, ω, R_vdW ≤ 1.5e-14 rel.; grid 3.8e-14 | 1e-10; 1e-12; 1e-12 | validation_mbd_rsscs.rs, gen_ts_mbd.py |
MBD@rsSCS nuclear gradient, exact (mbd_rsscs_gradient; on an SCF mbd_rsscs_for_scf, used by [dft] dispersion = "mbd" with task = "optimize" and by run_dft(with_gradient=True)): explicit term at fixed volume ratios; Hirshfeld-volume term with the occupied orbitals held fixed (AOs and proatoms follow the atoms, orthonormality term −½ Tr[V D Sˣ D], centroid-anchored lattice response); orbital relaxation from the KS Z-vector (ferric_scf::zvector_ks: closed-shell for RKS; coupled α/β for UKS, with orthonormality term −Σ_σ Tr[V D_σ Sˣ D_σ]; three-block closed/open/virtual for ROKS, with orthonormality term −Tr[Sˣ W_Q], W_Q = D_α V D_α + P_c V P_c + ½ (P_c V P_o + P_o V P_c)) | explicit: the 8 systems × 2 β above; SCF terms: H2O / STO-3G (HF and PBE), H2O / 6-31G (PBE, PBE0, HSE06, PBE + RI-J), NH3 / 6-31G (PBE); UKS: OH / STO-3G (PBE), NH2, OH (doublets) and O2 (triplet) / 6-31G (PBE, PBE0, HSE06), OH / 6-31G (PBE + RI-J, PBE0 + RI-JK); anchor: H2O / STO-3G RKS run through the UKS path (PBE, PBE0, HSE06); ROKS: HCO (doublet) and CH2 (triplet) / STO-3G (PBE), HCO, NH2 (doublets), CH2 and O2 (triplets) / 6-31G (PBE, PBE0, HSE06), HCO / 6-31G (PBE + RI-J); anchor: H2O / STO-3G RKS run through the ROKS path (PBE, PBE0, HSE06) | explicit vs libmbd 0.15.0 force=True (checked against libmbd's own finite differences to ≤ 4.2e-11) and vs central FD in every position and every α₀, C6, R_vdW input; volume term vs central FD of the volumes on a fixed lattice at fixed D; the unrelaxed gradient vs central FD of the pipeline with the reference occupied orbitals re-orthonormalized at each displaced geometry; the exact gradient vs central FD of the full SCF + MBD pipeline, and its relaxation term vs the difference of the two FDs | explicit 6.2e-16 abs vs libmbd; parameter derivatives ≤ 1.3e-6 rel. (FD); volume term 2.5e-8 abs (Slater proatom), 6.5e-9 (tabulated proatom), both at h = 1e-4; unrelaxed 3.4e-9 (H2O/STO-3G HF); exact 8.0e-10 (H2O/STO-3G PBE), ≤ 3.5e-9 (H2O/6-31G, all four), 2.0e-10 (NH3/6-31G) Hartree/Bohr at h = 1e-3; relaxation term (1.0e-5 H2O, 1.6e-6 NH3) vs FD ≤ 3.5e-9; UKS (h = 3e-5): unrelaxed 3.9e-11 and exact 2.9e-11 (OH/STO-3G, h = 1e-3), exact ≤ 1.9e-9 (6-31G, exact J/K), 6.0e-9 (RI-J), 5.0e-9 (RI-JK), relaxation term (2.7e-6–1.0e-5) vs FD ≤ 6.0e-9; the UKS path on a closed shell reproduces the RKS gradient to 3.0e-14; ROKS (h = 1e-3, re-orthonormalizing closed and open orbitals as one set for the unrelaxed FD): unrelaxed ≤ 2.2e-11 against a closed–open cross term of 7.1e-8–3.2e-7, exact ≤ 2.1e-11 (STO-3G), ≤ 2.1e-11 (6-31G, PBE and PBE0), ≤ 4.5e-10 (HSE06), 7.5e-9 (RI-J), relaxation term (2.7e-6–9.8e-6) vs FD ≤ 7.5e-9, every displaced SCF on the reference state (max|ΔD|/h ≤ 0.39 per Bohr); the ROKS path on a closed shell reproduces the RKS gradient to 2.7e-14 | 1e-14; 1e-5 rel.; 1e-6 rel. (Slater), 5e-8 rel. (tabulated); 5e-8; 5e-9; UKS 5e-10, anchor 1e-12; ROKS 5e-10, anchor 1e-12 | validation_mbd_rsscs.rs, mbd_scf_gradient.rs, mbd_scf_gradient_uks.rs, mbd_scf_gradient_roks.rs, unit tests in dispersion/mbd_rsscs.rs |
Harmonic frequencies with dispersion (harmonic_frequencies_with_scf_correction; CLI task = "frequencies" + [dft] dispersion, Python run_frequencies(dispersion=...)): central differences of the KS + dispersion analytic gradient, each from the SCF converged at that displaced geometry | H2O / STO-3G, PBE (D3(BJ), MBD@rsSCS); H2 / STO-3G HF with a synthetic harmonic-spring correction | D3: the dispersion Hessian vs 4-point second differences of the D3(BJ) energy, and the frequencies vs those of the KS Hessian plus that independent D3 Hessian; MBD: v·H·v along three fixed directions vs second differences of the full SCF + MBD energy; spring: the closed-form spring Hessian; a no-op correction reproduces the plain FD Hessian bit for bit | D3 5.3e-9 Hartree/Bohr² (largest element 1.9e-5), frequencies 9.8e-6 cm⁻¹; MBD 1.5e-6 (0.8% of 2.0e-4, limited by noise in the energy differences; without the orbital-relaxation term 3.2e-5); spring 6.6e-8 at a 1e-3 Bohr step (truncation, 25× smaller than at 5e-3) | 2e-8; 5e-5 cm⁻¹; 3e-6; 2e-7 | dispersion_frequencies.rs |
| Static α (direct RPA with a density-fitted Coulomb kernel, no exchange; not CPHF) | H2O / aug-cc-pVDZ; CH3OH / cc-pVDZ | numpy linear solve on PySCF int3c2e with the same aux basis | 4.8e-14 rel. same orbitals; 5.3e-10 rel. own SCF | 5e-13; 5e-9 | validation_static_alpha.rs, gen_properties.py |
Dynamic α(iω) and Casimir–Polder C6 (direct RPA, density-fitted Coulomb kernel, no exchange), molecular and Becke per-atom (molecular_dynamic_polarizability, pdep_polarizability_becke_dynamic, casimir_polder_c6); per-atom α is the Krishtal–Senet–Van Alsenoy intrinsic polarizability (atom-centred Becke dipole on the bra, analytic molecular dipole on the ket; JCP 125, 034312 (2006)) and the charge-transfer remainder α_CT = α_mol − Σ_A α^A (charge_transfer_remainder[_dynamic]); ω = 0 against the static α, molecular and per-atom | H2O, N2 / aug-cc-pVDZ (aug-cc-pvdz-rifit) | numpy sum over Casida excitations on PySCF int3c2e with the same aux basis, at ferric's 20 Gauss–Legendre nodes (rebuilt with leggauss); per-atom and α_CT on the copy of ferric's Becke grid, α_CT also as the independent charge-flow form 4 (Σ_A R_A q^A)ᵀ R μ | α(iω) 4.9e-14 rel. same orbitals; C6 6.2e-14; per-atom 3.4e-14; 5.3e-10 own SCF; α_CT,iso(0) is 27.0% (H2O) and 22.7% (N2) of α_iso; α_CT vs charge-flow form 1.1e-4 / 2.0e-5 (grid error of the lab dipole) | 1e-11; 1e-11; 1e-10; 5e-9; α_CT 1e-10, charge-flow 1e-3 | validation_pdep_c6.rs, gen_pdep_c6.py |
NPZ export ([rpa] export_npz) | water / STO-3G, CLI pdep-rpa | numpy.load of the CLI's file against the Python bindings | exact (keys, shapes, dtypes, C order, geometry); per-atom and molecular α origin-independent to 3.4e-13 rel.; alpha_ct = alpha_tensor − Σ_A alpha_atomic | exact; 1e-11 rel. under translation; 1e-13 | test_validation_npz_export.py |
| NPZ export against PySCF: all 30 keys for the default knobs plus the surface ESP, including the C6 block and the PDEP eigenpotentials; each knob turned off removes exactly its keys | water / cc-pVDZ, CLI pdep-rpa with exact J/K | numpy.load of the CLI's file against PySCF integrals contracted with the exported density and orbitals, and against PySCF RHF; α against the numpy dRPA-RI solve; PDEP eigenpotentials against PySCF's generalized dielectric eigenproblem; TS C6 recomputed from the exported α(iω) and the Tkatchenko–Scheffler free-atom table | integral level ≤2.8e-14; density/orbital-energy/property chain ≤5.9e-10; α 9.2e-11 rel.; PDEP metric 4.3e-12, projector 2.6e-7; C6 recomputed exactly | 5e-13; 1e-8 (density), 3e-9; 1e-9; 5e-11, 1e-6; 1e-12 | validation_npz.rs, gen_npz.py |
| KS-DFT energies: open-shell UKS and second-row closed shell | UKS: NH2, CH3, HO2, O2 (triplet) × PBE, B3LYP, ωB97X-V / 6-31G, def2-SVP; RKS: H2S, HCl, SiH4 × PBE, B3LYP, HSE06 / def2-SVP, def2-TZVP | PySCF UKS/RKS + stability(), same grid and density fitting; for UKS ωB97X-V both codes use exact J and range-separated DF-K, whose fitting metrics differ, which sets that functional's larger bar; for RKS HSE06 both use exact J and short-range DF-K in the attenuated metric | energy ≤3.1e-12 Ha (PBE, B3LYP), 4.2e-12 Ha (HSE06), 6e-6 Ha (ωB97X-V); ⟨S²⟩ ≤4.6e-9 (PBE, B3LYP), 1.3e-7 (ωB97X-V) | energy 1e-10 Ha (PBE, B3LYP, HSE06), 2e-5 Ha (ωB97X-V); ⟨S²⟩ 5e-8, 1e-6 | validation_ks_energies.rs, gen_ks_energies.py |
KS-DFT energies: ROKS (rohf with [dft] functional) | NH2, CH3, HO2, OH (degenerate π hole) × PBE, B3LYP / 6-31G, def2-SVP | PySCF ROKS, same grid and density fitting (RI-J; RI-K for B3LYP), six starts each polished by second-order SCF and checked with stability(); PySCF's own ROKS does not converge on OH without that polish, and its converged OH points spread by up to 1.3e-6 Ha (π-hole orientation on the grid) | 8.0e-13 Ha; OH 8.0e-7 Ha | 1e-11 Ha; OH 5e-6 Ha | validation_roks_energies.rs, gen_roks_energies.py |
| Meta-GGA energies (SCAN, r2SCAN) | RKS: H2O, NH3, H2S, CH4 / def2-SVP, def2-TZVP; RI-J (default) and exact J; UKS: NH2 / def2-SVP, def2-TZVP | PySCF RKS/UKS + stability(), same grid, density fitting and XC density floor | RKS energy ≤ 4.0e-12 Ha, UKS ≤ 2.4e-13 Ha; frontier orbitals ≤ 1.1e-8 Ha; ⟨S²⟩ ≤ 5.2e-10 | energy 5e-11 Ha; orbitals 1e-7 Ha; ⟨S²⟩ 5e-9 | validation_mgga_energies.rs, gen_mgga_energies.py |
RSH ω tuning (tune_omega): the objective J(ω) = ε_HOMO(N) + E(N−1) − E(N) (signed; the tuner minimizes |J|) and the tuned ω* | H2O, NH3 / def2-SVP, ωB97X-V: J at ω = 0.2, 0.3, 0.4, 0.5, 0.6 Bohr⁻¹ and ω*; N2 / def2-SVP: J at ω = 0.2–0.5 only, because the N2⁺ cation turns UKS-unstable (hole localization) between ω = 0.53 and 0.56, below J's root | PySCF RKS neutral and stability-checked doublet UKS cation with mf.omega overridden, same grid, exact J on both states and range-separated DF-K; ω* from brentq on J. Both states use exact J, as tune_omega does by default | ε_HOMO ≤6.7e-6 Ha (N2 4.8e-7); IP ≤8.8e-7 Ha; J ≤6.3e-6 Ha; ω* ≤2.8e-5 Bohr⁻¹ | 2e-5 Ha; 5e-6 Ha; 2e-5 Ha; 1e-4 Bohr⁻¹ | validation_rsh_omega.rs, gen_rsh_omega.py |
| Constrained DFT (Becke charge and spin constraints): E(N) − E_unconstrained, λ, and dE/dN = −λ | LiH (Li), HF (F), H2O⁺ (O; charge and spin) / 6-31G, def2-SVP, 3–4 targets each | NWChem 7.2.2 cdft ... pop becke, PBE, Becke-partitioned Treutler grid, fed ferric's basis; internal: natural-target limit (λ = 0) and dE/dN = −λ | unconstrained E 1.0e-8 Ha; E(N) − E_unc 2.0e-7 Ha; λ 1.1e-6 (NWChem, grid limit); dE/dN = −λ to 2.3e-12 Ha (Simpson, def2-SVP) | 5e-8 Ha; 1e-6 Ha; 5e-6; 5e-11 Ha | validation_cdft.rs, gen_cdft.py, NWChem inputs |
Constrained DFT state selection at an integer target: which constrained state ferric lands on, seeded from NWChem's orbitals (solve_cdft_uhf_seeded, CdftSeed) and unseeded with and without the stability descent | HeNe⁺ (N_He = 2, R = 2.0 Å), LiH⁺ (N_Li = 2.8, R = 3.0 Å) / def2-SVP, two states each | NWChem 7.2.2 cDFT (HF exchange), run both with its native Becke partition and with ferric's He/Ne radius ratio by relabelling the atoms; NWChem orbitals imported into ferric (AO order and the d(m=+1) sign mapped and checked) | one-shot energy of NWChem's orbitals ≤ 4.7e-10 Ha; seeded and unseeded states ≤ 7.7e-10 Ha after the quadrature correction; λ 3.2e-5 (HeNe⁺), 2.9e-7 (LiH⁺) | 1e-8 Ha; 1e-8 Ha; 1e-4 | validation_cdft_state.rs, gen_cdft_state.py |
cDFT-ET coupling (Wu–Van Voorhis, coupling_hab) and its ingredients: determinant overlap, one- and two-electron transition elements, |V|; KS-PBE diabats end to end | He₂⁺ at 2.50/3.00/3.50 Å / def2-SVP, aug-cc-pVDZ | NWChem 7.2.2 cDFT + et (its MO files recomputed in PySCF, every et number reproduced to ≤ 5.9e-11); the textbook form F = E + λN with its constraint-offset invariance | kernel ≤ 5.9e-11 Ha; coupling vs textbook ≤ 2e-18; E − E_unc ≤ 4.0e-7 Ha; λ ≤ 6.6e-6; |S| ≤ 2.8e-3 rel., |V| ≤ 8.3e-4 rel. (both largest at def2-SVP 3.50 Å, where |S_AB| = 3.9e-4 is the smallest of the six points; the absolute S offset is a flat 1.7e-7–1.1e-6 across the row, and V ∝ S so its relative error is smaller than S's everywhere); all six points converge end to end, deepest inner SCF 106 iterations (cap 150) | 2e-10 Ha; 1e-12; 2e-6 Ha; 3e-5; 4e-3 rel. (S); 2e-3 rel. (V) | validation_cdft_et.rs, gen_cdft_et.py |
| IEF-PCM solver and SCF on PySCF's cavity; ferric's own cavity | water, NH3 / STO-3G, cc-pVDZ; ε = 78.4, 4.7 | PySCF RHF.PCM() IEF-PCM; its SWIG cavity injected into ferric | charges 1.3e-17, E_pcm 3.5e-18 Ha (solver); total energy 4.8e-12 Ha (SCF); ferric's own cavity (modified-Bondi radii, 110-point spheres) 0.07–0.61% from PySCF | 1e-11 Ha (solver); 1e-10 Ha (SCF); own cavity ±2% | validation_pcm.rs, gen_pcm.py |
| Geometry optimization, RHF and RKS | H2O, NH3, CH2O from distorted starts / RHF and B3LYP 6-31G, PBE cc-pVDZ | PySCF analytic gradient (KS with grid response) driven to max abs gradient ≤ 1e-6 Ha/Bohr by scipy BFGS; exact J/K | distances ≤ 2.6e-6 Bohr; angles ≤ 1.1e-4°; optimized energies ≤ 9.3e-13 Ha | 2e-5 Bohr; 1e-3°; 1e-10 Ha | validation_geometry_optimization.rs, gen_geometry_optimization.py |
| Geometry optimization, UHF, ROHF and UKS | HO2, CH3, NH2 from distorted starts / UHF, ROHF, UKS-PBE 6-31G | PySCF analytic gradient driven to max abs gradient ≤ 1e-6 Ha/Bohr by scipy BFGS; stability() at start and end | distances ≤ 2.6e-6 Bohr; angles ≤ 1.1e-4°; optimized energies ≤ 9.3e-13 Ha; ⟨S²⟩ ≤ 4.9e-9 (UHF, UKS; ROHF is a pure spin state and is not checked) | 2e-5 Bohr; 1e-3°; 1e-10 Ha; 5e-8 (⟨S²⟩, UHF and UKS) | validation_geometry_optimization.rs, gen_geometry_optimization.py |
| G0W0@HF | H2O / cc-pVDZ | Published MOLGW IP (11.97 eV); PySCF gw_ac (IP 12.160 eV) | — | 0.30 eV (IP); 0.20 eV (PySCF LUMO and gap) | h2o_g0w0_cohsex.rs |
| MP3 (RI integrals) | H2O, NH3 / cc-pVDZ, def2-SVP; all-electron and frozen core | exact-integral PySCF RHF, then the same aux basis and DF factorization as ferric; two independent numpy MP3 constructions (spin-orbital textbook, closed-shell via PySCF's linear doubles residual), agreeing to 2e-17 | ≤ 7.6e-12 Ha | 1e-10 Ha | validation_cc.rs, gen_cc.py, reference data |
| RI-CCD | H2O, NH3 / cc-pVDZ, def2-SVP | exact-integral PySCF RHF, then the same aux basis and DF factorization as ferric; PySCF CCD on the DF integrals | ≤ 1.9e-11 Ha | 2e-10 Ha | validation_cc.rs, gen_cc.py, reference data |
| RI-CCSD, spin-orbital and spin-adapted | H2O, NH3 / cc-pVDZ, def2-SVP; HCN / cc-pVDZ; H2O / aug-cc-pVDZ; C2H6 / cc-pVDZ (spin-adapted only) | exact-integral PySCF RHF, then the same aux basis and DF factorization as ferric; PySCF CCSD on the DF integrals | ≤ 4.7e-11 Ha (both solvers) | 2e-10 Ha | validation_cc.rs, gen_cc.py, reference data |
| CCSD(T), spin-orbital and spin-adapted (T) | H2O / cc-pVDZ, aug-cc-pVDZ; HCN / cc-pVDZ; C2H6 / cc-pVDZ (spin-adapted only) | exact-integral PySCF RHF, then the same aux basis and DF factorization as ferric; PySCF ccsd_t on the DF integrals | (T) ≤ 6.9e-12 Ha; the two (T) codes agree to 8.9e-12 | 1e-10 Ha | validation_cc.rs, gen_cc.py, reference data |
CAS-CI (library only: ferric_ci::run_cas_ci, closed-shell RHF reference, lowest Ms = 0 root): total, core and active-space energies | N2 at r = 1.10 and 2.20 Å, CAS(6,6) / cc-pVDZ; H2O, CAS(4,4) / 6-31G; each also with the window moved down one orbital | PySCF mcscf.CASCI on an exact-integral RHF with the same orbital window, checked against a dense diagonalization of the full active-space Hamiltonian. At 2.20 Å both codes use the symmetric RHF, which is internally unstable toward a symmetry-broken RHF 0.19 Ha lower | E_CASCI ≤ 1.4e-11 Ha; e_core and the active-space energy ≤ 2.6e-10 Ha; E_RHF 2.2e-12 Ha | 3e-9 Ha (CAS-CI energies), 5e-11 Ha (E_RHF) | validation_casci.rs, gen_casci.py |
| G0W0 quasiparticle energies, HOMO−2 to LUMO+2, @HF and @PBE (and @HF with one frozen core orbital) | H2O, NH3, N2 / cc-pVDZ (cc-pvdz-ri), aug-cc-pVDZ (aug-cc-pvdz-rifit); @PBE: H2O / both bases, N2 / cc-pVDZ | PySCF gw_ac fed ferric's basis and aux, with the same 100-point frequency grid, Padé nodes, full quasiparticle equation and exact-integral SCF; @PBE references apply ferric's XC density floor (ρ ≤ 1e-10) and evaluate the Padé as the standard Thiele fraction, because PySCF's pade_thiele_ndarray applies its last coefficient twice (up to 7.1e-3 Ha at @PBE) | @HF ≤ 1.3e-7 Ha, @PBE ≤ 6.2e-8 Ha; Σc(ef + iω) at the Padé nodes ≤ 8.6e-11 Ha; Σx ≤ 4.9e-9 Ha | 1e-6 Ha (Σc(iω) 1e-9) | validation_gw.rs, gen_gw.py |
| G0W0@HF with ECPs | I2, Xe, Ag2 / aug-cc-pVDZ-PP (def2-tzvp-rifit) | PySCF gw_ac, same basis, inline ECP and aux | ≤ 2.5e-6 Ha (ε_mf 2.9e-6 from the ECP SCF offset) | 2e-5 Ha | ″ |
| U-G0W0@UHF | OH, CH3, NH2 / cc-pVDZ, aug-cc-pVDZ; O2 and CH2 triplets / aug-cc-pVDZ | PySCF ugw_ac on a stability-checked UHF, with ferric's per-spin Fermi level | ≤ 8.7e-7 Ha; OH/cc-pVDZ 7.0e-6 Ha (its π hole makes the UHF marginally stable) | 3e-5 Ha | ″ |
U-G0W0@UKS/PBE (gw with [rpa] xc and multiplicity > 1) | OH, CH3, NH2 / cc-pVDZ (cc-pvdz-ri) | PySCF ugw_ac Σc(ef + iω) on a stability-checked exact-J UKS/PBE with ferric's per-spin XC density floor and per-spin Fermi level; standard Thiele continuation and the quasiparticle equation solved in numpy with the density-fitted Σx, because PySCF's ugw_ac vhf_df exchange has the wrong sign | Σc(ef + iω) ≤8.7e-9 Ha, v_xc ≤7.1e-10 Ha, quasiparticle energies ≤2.6e-8 Ha on orbitals whose quasiparticle equation has one root (NH2's α HOMO and HOMO−1 have three within 1 Ha and are not compared); ferric solves each spin's quasiparticle equation with Σx − v_xc inside it, as the reference does; adding the shift after an unshifted solve lands 0.38–0.96 eV away, and the test requires ferric to miss that root | Σc(ef + iω) 1e-7 Ha; v_xc 1e-8 Ha; quasiparticle energies 3e-7 Ha | validation_gw.rs, gen_gw.py |
| COHSEX (@HF and @PBE), evGW₀, evGW (@HF) | COHSEX: H2O, N2 / cc-pVDZ; evGW₀, evGW: H2O / cc-pVDZ | numpy COHSEX on PySCF's density-fitted integrals; @PBE on the exact-J RKS/PBE orbitals with ferric's XC density floor, plus the static Σx − v_xc from PySCF's density-fitted exchange and v_xc; anchored to U-COHSEX on the same RKS orbitals as UKS (1.1e-15 Ha); evGW₀ and evGW by iterating PySCF's get_sigma with ferric's update rule | COHSEX@HF 9.4e-10 Ha; COHSEX@PBE 1.2e-9 Ha; evGW₀/evGW 5.7e-7 Ha | 1e-8 / 1e-8 / 5e-6 Ha | ″ |
| U-COHSEX@UHF (static, HF reference, spin-summed W) | OH, CH3, NH2 / cc-pVDZ (cc-pvdz-ri), aug-cc-pVDZ (aug-cc-pvdz-rifit); O2 and CH2 triplets / aug-cc-pVDZ; H2O / cc-pVDZ singlet UHF against the closed-shell COHSEX | numpy U-COHSEX on PySCF's density-fitted integrals with ferric's aux, W from ε = I + Π_α + Π_β, on the stability-checked UHF of the U-G0W0 row; the singlet UHF numpy reproduces the closed-shell COHSEX reference to 2.1e-9 Ha | ε_qp ≤ 3.3e-9 Ha (open shell); the singlet UHF through run_u_gw equals closed-shell COHSEX to 8.1e-10 | 3e-8 Ha (anchor 1e-8) | validation_u_cohsex.rs, gen_u_cohsex.py, reference data |
| U-RPA, U-G0W0 and U-RI-MP2 (doubles only) on a ROHF reference, semi-canonicalized per spin | OH, CH3 doublets / cc-pVDZ (cc-pvdz-ri) | PySCF URPA, ugw_ac and a numpy UMP2 (checked against DFUMP2) on the ROHF orbitals semi-canonicalized in numpy (each spin's Fock diagonalized in its occupied and virtual blocks); the ROMP2 singles term is not included on either side | U-RPA E_c ≤ 7.3e-12 Ha, U-MP2 E_c ≤ 8.7e-12, U-G0W0 QP ≤ 1.5e-5 (OH β) and ≤ 1.3e-6 (CH3); semicanonical orbital energies ≤ 6.4e-10 | 1e-10 Ha (E_c), 5e-5 Ha (QP) | validation_rohf_reference.rs, gen_rohf_semicanonical.py, reference data |
| BSE-TDA singlet excitation energies and oscillator strengths (G0W0@HF, static W, frozen core 0) | H2O / cc-pVDZ (cc-pvdz-ri), aug-cc-pVDZ (aug-cc-pvdz-rifit); NH3, CH2O / cc-pVDZ; lowest five singlets | numpy BSE-TDA on PySCF density-fitted integrals with ferric's aux, W from the static RPA dielectric on HF energies; the kernel is diagonalized on ferric's own quasiparticle energies, because G0W0 energies of core and high virtual orbitals move by up to 0.29 Ha under a 1e-10 relative change of Σc(iω); CIS limit (W replaced by the bare Coulomb interaction, HF energies) against the same numpy build and PySCF tdscf.TDA | Ω ≤ 1.8e-10 Ha and oscillator strengths ≤ 2.6e-9 against the kernel on ferric's QP energies; ≤ 2.2e-7 Ha with each side's own QP energies; CIS anchor ≤ 1.6e-9 Ha vs numpy DF-CIS | 2e-9 Ha (Ω), 3e-8 (f), 2e-6 Ha (own QP) | validation_bse.rs, gen_bse.py |
| TDA and Casida TDDFT excitation energies | water, formaldehyde, NH3 / 6-31G, aug-cc-pVDZ | PySCF tddft.TDA/TDDFT, same RI and grid | HF ≤ 2e-6 eV; LDA/PBE ≤ 2e-5 eV; B3LYP ≤ 6.5e-4 eV | 1e-3 eV | validation_tddft.rs, gen_tddft_refs.py |
| RI-MP2 analytic gradient (all electrons, exact-J/K RHF) | distorted H2O, bent HCN / cc-pVDZ (cc-pvdz-ri); distorted NH3 / def2-SVP (def2-svp-rifit) | ORCA RI-MP2 NoRI NoFrozenCore EnGrad with the same /C aux; PySCF DFMP2 5-point finite differences | ≤ 2.1e-9 Ha/Bohr (PySCF FD); ≤ 5.1e-8 Ha/Bohr (ORCA, its own floor); energies ≤ 1.3e-10 Ha | 2e-8 Ha/Bohr (FD), 2.5e-7 Ha/Bohr (ORCA); 1e-9 Ha | validation_rimp2_gradient.rs, gen_rimp2_gradient.py |
| COSMO solvation (RHF, UHF) | H2O, NH3, CH3OH, acetate(−) / STO-3G, cc-pVDZ × ε 4.7, 78.4; HO2 (UHF) / cc-pVDZ | PySCF pcm.py COSMO driver with ferric's radii, 110-point cavity and point-charge potential (ferric's model); stock PySCF COSMO for the formulation gap | solvated energy ≤ 1.9e-11 Ha, E_cosmo ≤ 9.7e-11 Ha (ferric's model); 0.05–0.51% from stock PySCF COSMO (point vs Gaussian surface charges) | 1e-10 Ha; 1e-9 Ha; 2% | validation_cosmo.rs, gen_cosmo.py |
| Attenuated RI-MP2 (erfc on 3-center and metric) | H2O, NH3 / aug-cc-pVDZ + aug-cc-pVDZ-RIFIT, ω 0.2, 0.222, 0.42, 1.0 Bohr⁻¹ | numpy RI-MP2 on PySCF int3c2e/int2c2e under with_range_coulomb(-ω) | E_corr ≤ 5.9e-12 Ha at every ω; ω → 0 reproduces Coulomb RI-MP2 to 1.6e-15 | 1e-10 Ha | validation_attenuated_mp2.rs, gen_attenuated_mp2.py |
| QM/MM electrostatic embedding (RHF): energy, embedding shift, QM gradient, MM forces | H2O + 10 charges / cc-pVDZ, aug-cc-pVDZ; CH3OH + 501 TIP3P charges / 6-31G | PySCF qmmm.mm_charge | energy and shift ≤ 4.8e-12 Ha; QM gradient ≤ 1.2e-10, MM forces ≤ 4.4e-12 Ha/Bohr (up to 501 charges) | 5e-11 Ha; 1e-9, 5e-11 Ha/Bohr | validation_qmmm.rs, gen_qmmm.py |
Gaussian-smeared MM charges (width in Bohr, ζ = 1/width², same as PySCF radii with unit="Bohr") | H2O + 10 charges / cc-pVDZ, widths 0.5, 1, 2 Bohr | PySCF qmmm.mm_charge(radii=) | energy ≤ 4.1e-12 Ha; QM gradient ≤ 1.2e-10 Ha/Bohr; width → 0 reproduces point charges to 3.0e-12 Ha | 5e-11 Ha; 1e-9 Ha/Bohr | ″ |
| KS QM/MM (exact J/K, matched (75,110) grid; gradient with grid response) | CH3OH + 20 charges / def2-SVP, B3LYP and PBE | PySCF qmmm.mm_charge on dft.RKS, grid_response=True | energy ≤ 4.1e-12 Ha; QM gradient ≤ 2.9e-9, MM forces ≤ 1.8e-10 Ha/Bohr | 1e-10 Ha; 3e-8, 2e-9 Ha/Bohr | ″ |
| Thole polarizable embedding (induced point dipoles, exponential Thole damping a = 2.1304): energy, E_pol, induced dipoles, QM gradient, MM rows | H2O + 4 TIP3P waters (α O 0.837, H 0.496 ų; with and without intramolecular exclusions) / cc-pVDZ, RHF; NH2 + 3 waters / cc-pVDZ, UHF; anchors: one site 30 Å away (classical limit −½α|E0|²), α → 0 (PySCF qmmm.mm_charge) | numpy induction model on PySCF point-dipole field integrals and qmmm.mm_charge, self-consistent in the SCF; gradients by 5-point finite difference | total energy ≤ 3.7e-12 Ha, E_pol ≤ 1.5e-9, induced dipoles ≤ 1.5e-9 a.u., QM and MM gradients ≤ 3.0e-9 Ha/Bohr; far-site E_pol within 7.7e-8 (relative) of −½α|E0|² | 5e-11 Ha (total), 1e-8 (E_pol, dipoles), 3e-8 Ha/Bohr | validation_thole.rs, gen_thole.py |
| MM force field (ferric-mm): bond, angle, torsion, Coulomb and LJ energies and gradients, exclusion and 1-4 pair sets | ALA-ALA, ACE-PHE-NME, TRP-PRO-ASP (charge −1), ACE-PHE-NME + 3 TIP3P waters, at the relaxed geometry and two random displacements; one extra case with every torsion phase shifted by 37° | OpenMM Reference platform (double precision), ff14SB and flexible TIP3P, no cutoff; Coulomb and LJ split by evaluating copies of the nonbonded force with epsilons or charges zeroed | energies ≤ 1.75e-12 relative, gradients ≤ 8.5e-11 relative (after OpenMM's Coulomb constant, which differs from ferric's by 6.6e-11 relative); pair sets identical | 1e-11 (energy), 1e-9 (gradient), relative | validation_mm.rs, gen_mm.py |
| External potential in the RI-MP2 analytic gradient | H2O + 10 charges / cc-pVDZ; CH3OH + 20 charges / 6-31G; aux cc-pVDZ-RI | 5-point finite difference of PySCF DFMP2 on qmmm.mm_charge RHF, same aux | energies ≤ 8.4e-12 Ha; RI-MP2 gradient ≤ 4.8e-9 Ha/Bohr vs PySCF FD | 1e-10 Ha; 3e-8 Ha/Bohr | validation_qmmm_mp2_gradient.rs, gen_qmmm.py |
| κ-regularized RI-MP2 (κ = 0.5, 1.1, 2.0 Eh⁻¹; opposite- and same-spin parts) | H2O, CH4 / cc-pVDZ (cc-pvdz-ri) | numpy (1 − exp(−κΔ))² sum on PySCF density-fitted integrals with the same aux basis; κ → ∞ checked against PySCF DFMP2 | E_corr (OS, SS, total) ≤ 3.3e-12 Ha at κ = 0.5, 1.1, 2.0; κ → ∞ equals RI-MP2 exactly | 3e-11 Ha | validation_kappa_mp2.rs, gen_kappa_mp2.py |
AO-Laplace RI-MP2 (compute_mo and compute_ao, n_quad 3/5/7, all electrons) | H2O / cc-pVDZ and aug-cc-pVDZ, CH4, s-trans-1,3-butadiene, n-octane / cc-pVDZ (cc-pvdz-ri, aug-cc-pvdz-rifit) | TWO numpy references on PySCF density-fitted integrals with the same aux basis: the dense (i,a,j,b) sum with the exact 1/Δ (equal to PySCF mp.dfmp2.DFMP2 to 6.7e-16), and the SAME sum with 1/Δ → Σ_k w_k e^(−t_k Δ) over the identical minimax nodes parsed from minimax.rs, which isolates quadrature error from implementation error | MO ≡ AO ≤ 3.4e-13 Ha; vs the quadrature-isolated reference (implementation error) ≤ 3.1e-11 Ha; vs exact DF-MP2 at n_quad = 7 (quadrature error) 8.0e-9 (CH4, R = 19.0), 4.0e-8 (octane, R = 24.5), 1.5e-7 (butadiene, R = 33.7), 8.3e-8 (H2O, R = 36.4), 2.2e-7 (H2O/aug, R = 45.7) — the error tracks R, and no case approaches the k = 7 table limit R ≤ 1000 | 1e-10 Ha (MO ≡ AO); 1e-9 Ha (vs quadrature reference); 2e-6 Ha (vs exact DF-MP2) | validation_laplace_mp2.rs, gen_laplace_mp2.py, reference data |
Local RI-MP2 (rimp2 with [local] scheme = "amplitude-threshold"), in-core (global and per-pair domain fit) and integral_direct, at ε = 0 with every locality map at its no-op limit; finite ε as a measured error map | H2O, n-butane / cc-pVDZ, 6-31G (cc-pvdz-ri), frozen core 0 and one per heavy atom; finite ε on n-butane / cc-pVDZ | PySCF DFMP2 with the same aux basis (canonical orbitals, closed-form denominators), checked against a dense numpy sum to 1e-12. ORCA 6.1.1 DLPNO-MP2 (NormalPNO, TightPNO) on n-butane and n-octane / cc-pVDZ is recorded as a ballpark only: it truncates by PNO occupation, not by an amplitude threshold, so the two recoveries are not compared | E_corr ≤ 1.1e-11 Ha at ε = 0 (24 comparisons). At ε = 1e-5, 1e-4, 1e-3 (n-butane, all electrons) ferric recovers 99.98%, 99.67%, 95.0% of DF-MP2 in-core and 99.98%, 99.65%, 95.0% integral-direct with its production maps; ORCA DLPNO-MP2 recovers 99.97% (NormalPNO) and 99.99% (TightPNO) of its own RI-MP2 | 1e-10 Ha (ε = 0); finite ε: under-correlation that grows with ε, no tolerance | validation_lmp2_amplitude.rs, gen_lmp2_amplitude.py |
| LinLCCD(hh) correlation energy | H2O, NH3 (RHF); OH (UHF, stability-checked) / 6-31G, cc-pVDZ (cc-pvdz-ri) | numpy exact linear solve of the hole–hole ladder equations on PySCF density-fitted integrals; ladder off checked against PySCF DFMP2/DFUMP2 | LinLCCD(hh) ≤ 4.4e-13 Ha closed shell, 1.2e-12 Ha OH UHF; ladder off equals RI-MP2 to 1.1e-16 | 1e-11 Ha | validation_linlccd.rs, gen_linlccd.py |
Amplitude-threshold LinLCCD at ε = 0, all three variants (drivers-only, hh, full), global and integral-direct paths, plus exact canonical LinLCCD of each variant | H2O, NH3 (RHF) / 6-31G, cc-pVDZ (cc-pvdz-ri) | numpy exact linear solves on PySCF density-fitted integrals: hh in the occupied-pair eigenbasis, full (hh + pp ladders) as a Sylvester equation in the joint eigenbasis, each in spin orbitals and spin-adapted (agree ≤ 1.1e-16); no ladder checked against PySCF DFMP2 | local ≤ 4.4e-13 Ha (drivers-only), 2.8e-13 (hh), 2.0e-13 (full); integral-direct ≤ 3.0e-13; exact canonical ≤ 4.4e-13; at finite ε (NH3/cc-pVDZ, hh) the error is +1.6e-13 at ε = 1e-6, +2.7e-9 at 1e-5, +1.07e-5 Ha at 1e-4 | 5e-12, 3e-12, 2e-12 Ha; 3e-12; 5e-12 | validation_linlccd_amplitude.rs, gen_linlccd.py |
| ωB97X-L-V components: E_KS (libxc ωB97X-V form with the paper's 18 parameters, VV10 b = 10, C = 0.01), λ·E_c = LinLCCD(hh) under λ·erfc(ωr)/r (λ = 0.6, ω = 0.1), total; Be₂ bond energy E(10 000 Å) − E(r_e) | H2O (RKS, exact J and RI-J), OH (ROKS → semicanonical → unrestricted) / def2-SVP (def2-svp-rifit, def2-universal-jkfit); Be₂ / def2-QZVPPD | PySCF KS with register_custom_functional_ ext params on ferric's (75,110) grid; numpy LinLCCD(hh) on PySCF density-fitted λ·erfc integrals; ladder off equals λ² × PySCF SR-MP2; Be₂: paper Table 4 (2.3 kcal/mol) | E_KS ≤ 1.05e-9 Ha; λ·E_c on the same orbitals 7.2e-14 Ha; total on ferric's orbitals 1.1e-7 Ha; Be₂ 2.299 kcal/mol | 1e-8; 1e-11; 5e-7 Ha; 0.3 kcal/mol | validation_wb97xlv.rs, wb97x_l_v_be2_bde.rs, gen_wb97xlv.py |
| OO-RI-MP2 energy and analytic nuclear gradient (all electrons, exact-J/K Fock, RI correlation) | distorted H2O, distorted NH3 (RHF, energy and gradient); CH3 doublet (UHF, energy) / cc-pVDZ (cc-pvdz-ri) | Energy: an independent numpy OO-RI-MP2 on PySCF integrals (exact J/K, the same aux, minimized to max orbital gradient ≤ 1e-10, anchored to PySCF SCF + DF-MP2 at zero rotation); cross-check: ORCA OO-RI-MP2 NoRI NoFrozenCore with the same /C aux, which stops 3.7e-8 to 7.0e-8 Ha above the minimum (reference/doubles split off by up to 1.5e-5 Ha). Gradient: 5-point finite difference of ferric's own OO energy; loose cross-checks against the finite difference of ORCA's OO energy and ORCA's analytic EnGrad (which misses that finite difference by up to 8e-6 Ha/Bohr) | total 7.5e-13 Ha, reference/doubles split 6.4e-10 Ha vs numpy; gradient 8.0e-9 Ha/Bohr vs own FD, 2.0e-7 vs the FD of ORCA's energy | 1e-11 Ha (total), 5e-9 Ha (split), 2e-7 Ha (vs ORCA); 1e-7 Ha/Bohr (own FD), 1e-6 Ha/Bohr (ORCA FD) | validation_oo_rimp2.rs, gen_oo_rimp2.py, ORCA inputs |
Unrestricted RI-MP2 (rimp2 with multiplicity > 1): E_corr and the αα, ββ, αβ blocks | OH, CH3, NH2, O2 (triplet), HO2 / cc-pVDZ (cc-pvdz-ri); HO2 also with frozen core 2 | PySCF DFUMP2 with the same aux on a stability-checked exact-integral UHF; αα and ββ split by an independent numpy build anchored to DFUMP2's same-spin and opposite-spin energies to 1e-11 Ha | E_UHF ≤2.8e-12 Ha; every MP2 energy ≤9.2e-10 Ha (HO2), ≤5.8e-11 Ha elsewhere | 3e-11 Ha; 1e-8 Ha | validation_u_rimp2.rs, gen_u_rimp2.py |
| OO-RI-MP2 with a def2 ECP: energy and analytic nuclear gradient (core Hamiltonian includes V_ECP; gradient includes the ECP derivative term) | HI at 1.75 Å (RHF) / def2-SVP (def2-svp-rifit), gradient on the I atom | Energy: the independent numpy OO-RI-MP2 extended with PySCF's ECP core Hamiltonian (ECP read from ferric's basis JSON), anchored to PySCF RHF + DF-MP2 at zero rotation; gradient: 5-point finite difference of ferric's own OO energy | OO total 1.5e-8 Ha (the ECP integral offset the RHF energy also carries); doubles 5.5e-11 Ha; gradient 2.3e-9 Ha/Bohr vs its own finite difference | 2.5e-7 Ha; 5e-8 Ha/Bohr | validation_oo_rimp2_ecp.rs, gen_oo_rimp2_ecp.py, zero-rotation anchors in oo_rimp2_ecp.rs |
| Open-shell PDEP-RPA correlation energy (UHF reference, full rank, spin-summed dielectric) | OH, CH3, NH2 (doublets), O2 (triplet) / cc-pVDZ (cc-pvdz-ri); OH / aug-cc-pVDZ (aug-cc-pvdz-rifit); H2O / cc-pVDZ through both the restricted and the unrestricted path | PySCF gw.urpa.URPA (and gw.rpa.RPA for H2O) on the same stability-checked exact-integral UHF, same aux basis and the same 40-point Gauss–Legendre frequency grid; cross-checked by numpy on PySCF's density-fitted integrals; truncation checked against a numpy emulation | ≤ 9.2e-11 Ha (OH/aug-cc-pVDZ); truncated 6.4e-11; U path vs R path at the closed-shell limit 3.2e-12 | 1e-9 Ha (U vs R 3e-11) | validation_urpa.rs, gen_urpa.py |
dRPA@HF by the drCCD Riccati solve (drpa, exact) and its local approximation ([local] amplitude threshold); closed shell, frozen core 0, 1 and (n-butane) 4 | H2 / STO-3G (STO-3G aux); H2O, n-butane / 6-31G, cc-pVDZ (cc-pvdz-ri); n-octane / 6-31G (cc-pvdz-ri), carbon cores frozen, ε = 0 to 1e-3 | numpy plasmon dRPA on PySCF density-fitted integrals with the same aux basis and an exact-J/K RHF, Fock semicanonicalized, Ω² from a symmetric eigensolve; the formula and its frozen cores match PySCF gw.rpa.RPA on the same integrals (≤ 3.6e-11 Ha at 160 frequency points) and the H2 value matches the proof notebook's −0.0126072623 (3.7e-11) | ε = 0: ≤ 3.0e-11 Ha on the CLI's exact route, the integral-direct route and the in-crate canonical plasmon reference. n-octane, ε = 1e-6 / 1e-5 / 1e-4 / 1e-3: error +6.7e-7 / +3.9e-5 / +5.5e-4 / +1.0e-2 Ha (less correlation) at 82 / 50 / 18 / 2.8% of amplitudes kept; there is no external finite-ε reference | 3e-10 Ha (ε = 0) | validation_drpa_amplitude.rs, gen_drpa_amplitude.py; references in testdata/reference/validation/drpa_amplitude/ |
| Attenuated PDEP-RPA correlation energy (erf and erfc on the 3-center integrals and the metric; closed shell, full rank) | H2O, NH3 / cc-pVDZ (cc-pvdz-ri); H2O / aug-cc-pVDZ (aug-cc-pvdz-rifit); ω 0.2, 0.222, 0.42, 1.0 Bohr⁻¹ | numpy dRPA on PySCF int3c2e/int2c2e under with_range_coulomb(±ω), the same metric factorization as ferric (eigh with a 1e-10 cutoff for erf, Cholesky for erfc), the same RHF and the same 40-point Gauss–Legendre grid; the Coulomb kernel matches PySCF gw.rpa.RPA to 1.6e-14 Ha; erfc(ω → 0) and erf(ω → ∞) reproduce Coulomb RPA | ≤ 5.8e-11 Ha (erf), 3.5e-11 (erfc), 4.5e-11 (Coulomb); the ω → 0 erfc and ω → ∞ erf limits equal Coulomb RPA to 4.9e-11 | 1e-9 Ha (erf), 5e-10 (erfc, Coulomb, limits) | validation_attenuated_rpa.rs, gen_attenuated_rpa.py |
RS-MP2-RPA correlation energy, formulations B (DeltaLr: E_MP2[Coulomb] + E_dRPA[erf] − 2·E_OS[erf]) and T (CoupledRings: E_MP2[Coulomb] + ΔdRPA[Coulomb] − ΔdRPA[erfc]); every reported component | H2O, NH3 / cc-pVDZ (cc-pvdz-ri); H2O / aug-cc-pVDZ (aug-cc-pvdz-rifit); ω 0.222 (= 0.420 Å⁻¹, the default) and 0.42 Bohr⁻¹ | numpy assembly on PySCF int3c2e/int2c2e under with_range_coulomb(±ω): RI-MP2 spin components and dRPA from the same fitted integrals ferric uses per operator (eigh with a 1e-10 cutoff for erf, Cholesky otherwise), 40-point Gauss–Legendre grid; Coulomb pieces match PySCF DFMP2 to 3.3e-16 Ha and gw.rpa.RPA to 1.7e-14 Ha; the frequency-integrated second-order ring term equals 2·E_OS to 3.2e-15 relative; exact limits B, T(ω → 0) = MP2 and B, T(ω → ∞) = MP2 + ΔdRPA[Coulomb] | every component ≤ 4.7e-11 Ha (MP2 pieces 4.2e-11, dRPA pieces 2.9e-11, B/T e_corr 4.3e-11); ω → 0 and ω → ∞ limits to 4.3e-11 | 5e-10 Ha | validation_rs_mp2_rpa.rs, gen_rs_mp2_rpa.py |
Closed-shell RPA nuclear gradient (total_rpa_gradient: central finite difference of E_RHF + E_c^RPA, exact-J/K RHF reference, full rank; all electrons and one frozen core orbital) | distorted H2O, distorted NH3 / cc-pVDZ (cc-pvdz-ri) | finite differences of PySCF exact-integral RHF + gw.rpa.RPA with the same aux basis and the same 40-point Gauss–Legendre frequency grid (5-point stencil step-converged to 7.4e-10 Ha/Bohr, and the 3-point stencil at ferric's step); 5-point finite difference of ferric's own energy; controls: RHF gradient, E_c-only gradient, all-electron vs frozen core, 6- vs 40-point grid | E_c ≤ 1.5e-13 Ha; gradient ≤ 1.9e-9 Ha/Bohr vs PySCF at the same 3-point step, ≤ 5.7e-8 vs a converged 5-point FD (the 3-point truncation); sum over atoms ≤ 4.8e-9 | 1e-12 Ha (E_c); 2e-8 (same step), 2e-7 (5-point) Ha/Bohr | validation_rpa_gradient.rs, gen_rpa_gradient.py |
| RI-MP2 size-extensivity | H2 dimer at large separation | 2 × monomer | 2e-12 Ha | 1e-7 Ha | rimp2_size_extensivity.rs |
| RHF/UHF/ROHF/KS gradients, including density-fitted J/K | water, OH, HO2 / cc-pVDZ, 6-31G | finite differences of the energy; PySCF df.grad | 1e-7 to 3e-7 Ha/Bohr (FD); ~1e-10 (PySCF) | 1e-6 Ha/Bohr | df_jk_gradient.rs |
| Analytic RHF Hessian (skeleton one- and two-electron, overlap/W and CPHF response terms) and its harmonic frequencies | H2O, NH3, CH2O / cc-pVDZ; distorted H2O / def2-SVP | PySCF hessian.rhf (analytic, and its skeleton partial_hess_elec + hess_nuc); PySCF finite differences of its analytic gradient; ferric's own gradient differenced | total Hessian ≤ 1.6e-7 Ha/Bohr² vs PySCF analytic (≤ 8.2e-8 at cc-pVDZ); skeleton ≤ 5.9e-10; frequencies ≤ 6.9e-4 cm⁻¹; each skeleton term vs a finite difference of its gradient piece ≤ 3.4e-8 | 1e-6 Ha/Bohr² (total), 1e-8 (skeleton), 1e-2 cm⁻¹ | validation_rhf_hessian.rs, rhf_hessian_fd.rs, gen_rhf_hessian.py |
| Analytic UHF Hessian (skeleton one- and two-electron, overlap/W and coupled α/β CPHF response terms) and its harmonic frequencies | OH (²Π), NH2 (²B1), CH2 (³B1) / cc-pVDZ; tilted OH and off-C2v CH2 / STO-3G, 6-31G | PySCF hessian.uhf on the lowest internally stable UHF (analytic, and its skeleton partial_hess_elec + hess_nuc); PySCF finite differences of its analytic gradient; ferric's own UHF gradient differenced; ferric's RHF Hessian for a closed-shell UHF | total Hessian ≤ 3.8e-7 Ha/Bohr² vs PySCF analytic (OH; ≤ 7.7e-8 for NH2 and CH2); skeleton ≤ 1.4e-10; frequencies ≤ 1.4e-4 cm⁻¹; on closed-shell water the UHF Hessian equals the RHF one term by term (response 2.8e-17) | 2e-6 Ha/Bohr² (total), 1e-8 (skeleton), 2e-3 cm⁻¹, 1e-12 (vs RHF) | validation_uhf_hessian.rs, uhf_hessian_fd.rs, gen_uhf_hessian.py |
| Harmonic frequencies (FD of analytic gradients; Cartesian Hessian and cm⁻¹) | H2O, NH3 × RHF, PBE, B3LYP / 6-31G, cc-pVDZ; UHF OH, CH3, HO2, UKS-PBE and ROHF CH3 / 6-31G | PySCF same-step FD of analytic gradients (KS with grid response); PySCF analytic hessian.rhf/uhf/rks/uks; thermo.harmonic_analysis with ferric's masses | same-step FD: 2.4e-7 Ha/Bohr², 7.5e-4 cm⁻¹; HF vs analytic 2.75e-5 Ha/Bohr², 0.10 cm⁻¹ (the 5e-3 Bohr step's truncation); KS vs PySCF's analytic Hessian differs by 5–35 cm⁻¹ because that Hessian has no grid response | 2e-6 Ha/Bohr², 5e-3 cm⁻¹ (same-step); 1e-4 Ha/Bohr², 0.5 cm⁻¹ (HF analytic) | validation_frequencies.rs, gen_frequencies.py |
| Meta-GGA gradient, closed shell (SCAN, r2SCAN) | H2O, NH3 / 6-31G, def2-SVP; RI-J (default) and exact J | PySCF RKS grid_response=True, same grid and density fitting; FD of ferric's own energy | ≤ 1.3e-9 Ha/Bohr (def2-SVP 5.0e-10); analytic vs own FD 1.0e-9 | 1e-8 Ha/Bohr | validation_mgga_gradients.rs, gen_mgga_gradients.py |
| Meta-GGA gradient, open shell (SCAN, r2SCAN) | UKS: HO2, NH2 / 6-31G; ROKS: NH2 / 6-31G | PySCF UKS grid_response=True + stability(); ROKS: central FD of PySCF ROKS energy; FD of ferric's own energy | UKS ≤ 6.2e-9 Ha/Bohr; ROKS 2.2e-10 vs the FD; energies ≤ 5.7e-13 Ha | 3e-8 Ha/Bohr (UKS); 1e-7 (ROKS) | validation_mgga_gradients.rs, gen_mgga_gradients.py |
| COSX exchange, dense-grid limit | water / cc-pVDZ | direct K | 3.3e-7 | — | cosx_k_anchors.rs; see SCF: choosing how exchange is built |
| COSX SCF energy, (50,110)+fit | water / cc-pVDZ | direct K | 4.9e-6 Ha | — | ″ |
| COSX SCF energy, (50,110)+fit | butane / def2-SVP | direct K | 1.7e-4 Ha | — | ″ |
| COSX SCF energy, (50,110)+fit | butane / def2-TZVP | direct K | 1.2e-4 Ha | — | ″ |
| COSX, open shell | CH3 doublet / cc-pVDZ | direct K | 1.96e-5 Ha (UHF), 1.97e-5 Ha (ROHF) | — | k_builder_open_shell.rs |
| COSX analytic gradient (RHF, RKS, UHF; default overlap fit for RHF/UHF) | water / STO-3G, 6-31G; HO2 / STO-3G | finite differences of the COSX energy | 1.6e-9 to 4.3e-9 Ha/Bohr | 1e-6 / 3e-8 Ha/Bohr | cosx_gradient.rs |
| COSX exchange against PySCF and against exact K: fit off with no screening on the identical grid; angular-grid convergence (75,110)→(75,590) with production knobs; analytic gradient with fit on (RHF) and off (B3LYP) | water / aug-cc-pVDZ (RHF, B3LYP); butane / def2-SVP (RHF); distorted water, NH3 for gradients | PySCF sgx on ferric's grid recipe (exact J, fit off, no screening); ferric exact-K energy; central FD of the COSX energy | same grid ≤ 1.2e-12 Ha at every grid; error shrinks 93x (butane) to 2576x (water) from 110 to 590 points; exact-K vs PySCF ≤ 2.1e-11 Ha; gradient ≤ 1.6e-8 Ha/Bohr | 1e-10 Ha; ≥ 30x; 1e-9 Ha; 2e-7 Ha/Bohr | validation_cosx.rs, gen_cosx.py |
| RIJCOSX energy (RI-J + COSX K): separation into RI-J error + COSX error | water / 6-31G (HF, B3LYP); HO2 / 6-31G (UHF) | the three other corners of (exact or RI) J × (exact or COSX) K, same grid | second-order cross term, 2.8–5.8 × e_cosx·e_rij (7.8e-10 Ha at (50,110), 2.3e-11 Ha at (75,302)) | 30 × e_cosx·e_rij, or 1e-10 Ha | cosx_rijcosx.rs |
| RIJCOSX analytic gradient (RI-J derivative + COSX derivative; flat and pruned grids; fit on and off) | water / STO-3G (RHF, B3LYP); HO2 / STO-3G (UHF) | central FD of the RIJCOSX energy | 1.7e-9 Ha/Bohr (RHF), 4.9e-10 (B3LYP, exchange-isolated), 3.6e-9 (UHF) | 1e-7 / 3e-8 Ha/Bohr | ″ |
Pruned COSX grid (prune = "sgx", peaks 194 and 302) against PySCF SGX with sgx_prune on the same radial grid and Becke partition, fit off, no screening | water / aug-cc-pVDZ; butane / def2-SVP (RHF) | PySCF 2.13.1 | ≤ 1.8e-12 Ha, identical point counts | 1e-10 Ha | validation_cosx.rs, gen_cosx_pruned.py |
| COSX final-grid pass | water / STO-3G, 6-31G; HO2 / STO-3G | the SCF-grid energy (final grid = SCF grid); SCF converged on the final grid | bit-identical; within 1.5e-7 Ha on eight molecules (site/src/methods/scf.md) | exact; — | cosx_rijcosx.rs, cosx_grid_sweep.py |
| Lebedev 194-point rule | unit sphere | exact monomial integrals; PySCF's rule | exact through degree 23; nodes and weights identical to PySCF's | 1e-12 relative | lebedev.rs |
A "—" means the repository states no number for that cell. It is left empty on purpose rather than filled with an estimate.
Benchmark sweeps (GW100 and others) are kept in the project's working notes and are not reproduced here. Quoting a benchmark statistic from memory rather than from the record is the kind of unchecked claim this page exists to prevent.
Known limits and negatives
Reported rather than omitted:
- Analytic Hessians: closed-shell RHF and UHF only (exact J/K, no ECP, no embedding or solvent, basis up to f functions). ROHF has none (PySCF has no ROHF Hessian either). Every other method's frequencies take central finite differences of the analytic gradient.
- Local MP2: the integral-direct local MP2 (
rimp2with[local] integral_direct = true) has its correlation stage measured at about N1.24 (erfc) and N1.4 (Coulomb) on n-alkanes C20–C48 (6-31G / cc-pVDZ-RI, ε = 1e-4, frozen carbon cores, a calibrated pair gate; fitted to three points). That is one family of molecules in one basis: not shown to be linear, and not measured on 3-D or diffuse systems. Local MP2 withoutintegral_directstill builds the global 3-index tensor and makes no scaling claim. See The MP2 family. - Exact dRPA by the Riccati solve is a small-system path: its ring-product
plan holds no³·nv² numbers,
notimes the amplitudes themselves (C12 thrashed, then was killed for memory). The CLI andrun_drparefuse a run that cannot fit before the SCF; full-rankpdep-rpagives the same energy at far lower memory. - Laplace SOS-MP2, AO-sparse variant: the domain truncation is accurate,
and the radius it needs grows far more slowly than the molecule (chemical
accuracy at 3 to 5 Bohr on n-alkanes C2 to C12, radius/diameter falling from
0.52 to 0.17; a 71-atom drug molecule is within 0.05% at 4 Bohr, about 13%
of its diameter). The algebra is still dense, so
no speedup is claimed. The regression test
sos_ao_sparse_truncation_radius_is_transferable_across_sizespins the STO-3G butane/octane comparison (12 Bohr exact on both; octane worse at 3 Bohr). The C2-C12 sweep and the drug-molecule figure are measurements, not regression tests. - TDHF/RPAx C6: ~63% low regardless of gap. Do not use it for dispersion; its static α is not established either (see the matrix).
- TDDFT / TDA: closed-shell references only. Functionals without an fxc kernel (meta-GGA, VV10, range-separated) are refused rather than run without it. B3LYP at aug-cc-pVDZ agrees with PySCF to 6.5e-4 eV, 40× worse than PBE in the same basis; the cause is not yet identified.
- COSX wins at high angular momentum, not at large system size.
Measured on one thread at the flat
(50,110)grid with the overlap fit:- Against LinK on n-alkanes at def2-SVP it is slower at every size measured: 1.59× (C20), 1.09× (C32) and 1.22× (C48), with no trend toward parity. At def2-TZVP on C20 it is faster (0.67×); that is the only triple-zeta size measured.
- Against exact direct exchange on butane it is 3.7× slower at def2-TZVP (full SCF). At def2-QZVP its K build takes 90 s against about 400 s for the direct build's single J+K sweep, at a relative K error of 5.4e-5.
- Its K build grows as N1.29–N1.32 between C20 and C48 at def2-SVP.
- It applies to the Coulomb operator only: a range-separated functional
takes its exchange from density-fitted short- and long-range fitters and
ignores
k_builder = "cosx", with a warning. - Its analytic gradient is exact for RHF, RKS and UHF with the overlap fit
off, and for RHF and UHF with the default overlap fit, on flat and pruned
(
sgx) COSX grids. Fitted COSX with a KS functional, UKS and ROHF/ROKS are refused for gradient tasks, before the SCF runs.
Why the distinction is drawn so sharply
A quantum chemistry code can produce a plausible number in many ways that are wrong:
- a non-converged SCF returned as an ordinary result, because convergence is a flag rather than an error
- a method missing a physical term it does not mention (for example, TDDFT excitations computed without the fxc kernel)
- a fallback model silently substituted for one atom in a molecule, changing a partitioning without changing the shape of the output
- a screening or truncation threshold that happens to be safe for the test system and not for yours
None of these look like failures, and every one of them has occurred in this codebase. The remedy is to grade each capability separately and say which ones are checked against ground truth.
Testing discipline
Some properties are pinned by tests rather than asserted in prose:
- Bit-identity across thread counts for reductions and permutations:
results do not depend on
RAYON_NUM_THREADS - ERI 8-fold permutational symmetry: verified against the engine, not assumed, since the MP2 code relies on it to compute only ~1/8 of quartets
- Size-extensivity and rotational invariance of total energies
- Memory guards in both directions: a starved budget must be refused and an ample budget must still run, because an over-estimating guard is also a bug
New guards are mutation-tested: a deliberate defect is injected and the test confirmed to fail before the guard is trusted. This has caught guards that passed while proving nothing.
Related pages
- Input reference: every TOML key
- Examples: every shipped input file
- Python bindings