Choosing a method

Start from what you want to compute. Each row names a method that ferric implements for that task, where to run it (CLI method.kind or Python only), how far it is validated, and a shipped example to copy. Grades, and the anchors behind them, are on Capabilities and validation. Cost is given as formal scaling with system size N, not as timings.

This page only recommends what the code and its tests support. Where ferric has no validated option for a task, the row says so.

By task

TaskRecommendedWhereGradeScalingExample
Geometry optimizationKS-DFT (e.g. PBE, B3LYP) or RHF, task = "optimize"CLI, Python (run_optimize is RHF)ProvenN⁴h2-lda-opt.toml, h2_opt.toml
Harmonic frequenciesKS-DFT or RHF/UHF/ROHF, task = "frequencies" (analytic Hessian for RHF/UHF/ROHF with exact J/K, and for RHF, UHF and ROHF with RI-J and/or RI-K; the analytic moving-grid Hessian for closed-shell KS LDA/GGA, pure or global hybrid; both under the default hessian = "auto"; otherwise finite differences of the analytic gradient, 6N gradients)CLI, Python run_frequenciesenergies Proven; check the printed Hessian asymmetry6N × N⁴water-frequencies.toml
Transition staterun_saddle (P-RFO), then run_irc to confirm which minima it connectsPython only, closed shellsee Capabilities and validation~2(6N+1) gradients + steps—
Conformer or reaction energies, routineKS-DFT + D3(BJ)CLI ksdft + [dft] dispersion = "d3bj", Python run_dft(dispersion=...)DFT Proven; D3(BJ) (with or without ATM) matches simple-dftd3 to <1e-12 HaN⁴ (DFT)water-pbe-d3bj.toml
Correlated energies, small to mediumRI-MP2CLI rimp2, Python run_rimp2ProvenN⁵water-rimp2.toml
Correlated energies, benchmark quality, smallCCSD(T) (closed shell)Python run_ccsd_t only; CCSD also CLI ccsdCCSD Proven; (T) matches PySCF ~1e-6 Ha on H2O/cc-pVDZN⁶ / N⁷water-ccsd.toml (H2)
Non-covalent interaction energiesAttenuated MP2 in the basis its parameters were fitted for: SCS-MP2(2terfc) or MP2-V in aug-cc-pVTZ, erfc att-MP2 in aug-cc-pVDZ (the basis of the 2012 paper); or KS-DFT + D3(BJ)CLI scs-mp2-2terfc, mp2-v, att-rimp2, ksdftatt-MP2, 2terfc and MP2-V Proven (narrow) as implementations; the MP2-V parameterization is unbenchmarkedN⁵water-scs-mp2-2terfc.toml, water-mp2v.toml, water-attmp2.toml
Long-range correlation from responseRS-MP2 + LR-RPA, or PDEP-RPACLI rs-mp2-rpa, pdep-rpaRS-MP2+RPA Smoke; PDEP-RPA ProvenN⁵ (MP2 part); N⁴ (RI-RPA)water-rs-mp2-rpa.toml, water-pdep-rpa.toml
Ionization potentials / electron affinitiesG0W0@PBE (or @HF); U-GW for open shellsCLI gw, Python run_gw, run_u_gwSmoke, about ±0.3 eV—water-g0w0-pbe.toml, oh-ugw.toml
Excitation energiesBSE-TDA on G0W0@HF; or TDA/TDDFT (CIS/TDHF on an HF reference)CLI bse-tda, tda, tddft; Python run_bse_tda, run_tddftBSE-TDA Smoke; TDA/TDDFT Proven (narrow, closed shell)—water-bse-tda.toml, water-tda.toml
Static polarizabilityPDEP-RPA properties, or RPAx@KS (static α only)CLI pdep-rpa with compute_polarizability, tdhf-static-polarizabilityPDEP-RPA Proven (energy); RPAx SmokeN⁴ (RI)h2o-pdep-rpa-props.toml, water-tdhf-static-alpha.toml
\( C_6 \) dispersion coefficientsPDEP-RPA dynamic α (c6_source = "pdep") or TS/MBD, in an augmented basis. Not RPAx: its \( C_6 \) is ~63% lowCLI pdep-rpa + [rpa] compute_c6which source is better is not establishedN⁴ (RI)water-c6-pdep.toml, argon-c6-rpa-pbe.toml
Implicit solvationIEF-PCM (CLI [pcm], Python solvent=) or COSMO (CLI [cosmo])see SCF and DFTboth cross-checked against PySCF on waterSCF cost—
Embedding in a protein or solventQM/MMPython run_qmmm; CLI [qmmm] (point charges)see QM/MMSCF costwater-qmmm.toml
Electron-transfer couplingconstrained DFT + Wu–Van Voorhis \( H_{ab} \)Python run_cdft, cdft_coupling (no CLI)no external referenceSCF cost × outer λ loop—
Atomic charges, ESPLöwdin, Hirshfeld, CHELPG, RESP; ESP at nuclei or on the surfacePythonsee Capabilities and validationSCF cost—

Notes on the table:

  • "Proven" for an attenuated MP2 method means the implementation reproduces its reference, not that the method is accurate on your system. Its parameters are fitted to interaction-energy benchmarks in one basis (the aug-cc-pVTZ sets without counterpoise, with frozen core); in another basis, with counterpoise correction, or with frozen_core = 0 (the default), you are extrapolating. See The MP2 family.
  • KS-DFT uses density fitting by default (def2-universal-jkfit), and the fitting error grows with system size. Turn it off or match it before comparing with an exact-Coulomb code; see SCF and DFT.
  • CC results are sensitive to the aux basis: at CC accuracy the RI error depends on the auxiliary set. See Coupled cluster.

Pairing an orbital basis with its auxiliary basis

Every correlated method needs an RI auxiliary basis ([mp2] auxbasis or [rpa] auxbasis; the auxbasis argument in Python). Use the set built for your orbital basis. The bundled pairs are:

Orbital basisRI (correlation) auxJK aux (for df_j_aux / df_k_aux)
cc-pVDZ / TZ / QZcc-pvdz-rifit (alias cc-pvdz-ri), cc-pvtz-rifit, cc-pvqz-rifitdef2-universal-jkfit; cc-pvtz-jkfit / cc-pvqz-jkfit (H, B-F, Al-Cl, Ga-Br only)
aug-cc-pVDZ / TZ / QZaug-cc-pvdz-rifit, aug-cc-pvtz-rifit, aug-cc-pvqz-rifitaug-cc-pvdz-jkfit, aug-cc-pvtz-jkfit, aug-cc-pvqz-jkfit (H, B-Ne, Al-Ar, Ga-Kr; Ne/Ar/Kr extrapolated), else def2-universal-jkfit
cc-pVXZ-PP, aug-cc-pVXZ-PP<orbital>-pp-rifit (H-Ar, without Li and Na in the aug sets; Sc-Ni at TZ and QZ only; Y-Pd; Hf-Pt. K-Ni at DZ, K and Ca at TZ/QZ, Cu-Sr, Ag-Lu and Au-Rn error)def2-universal-jkfit
def2-SVP(D), TZVP(P)(D), QZVP(P)(D)def2-<x>-rifit for eachdef2-universal-jkfit

Each RIFIT set in the table also loads under ORCA's <orbital>/c name (for example def2-tzvp/c), each JKFIT set under <orbital>/jk (for example aug-cc-pvtz/jk), and def2-universal-jkfit as def2/jk. STO-3G, the Pople sets and the pcseg family have no matching RI set; pair them with a def2 or cc RIFIT set of similar quality. Any other orbital set goes in through [basis] path as a Gaussian-94 file (orbital basis only). def2-universal-jkfit is the default JK set for KS-DFT.

When nothing here fits

  • Analytic Hessians cover RHF, UHF and ROHF (exact J/K, or RI-J / RI-K with no external potential; an ECP is fine; basis up to f functions; RHF and UHF with exact J/K also allow an external potential, ROHF allows none on any route), and closed-shell KS LDA/GGA (pure or global hybrid, moving-grid Hessian). Other KS-DFT (UKS, ROKS, meta-GGA, range-separated hybrids) and correlated methods' frequencies are by finite differences of the analytic gradient.
  • Open-shell coupled cluster and open-shell TS search are not available (the one open-shell CC-type method, LinLCCD(hh), is library-only). Open-shell KS-DFT is available from the CLI: ksdft with multiplicity > 1 runs UKS, and uhf/rohf with [dft] functional run UKS/ROKS. See Capabilities and validation: open shells in the CLI.
  • TDDFT with the XC kernel exists only as a library-only spike; the CLI and Python TDDFT omit it. See RPA, GW and excited states.