Input reference (TOML)

Every key the ferric CLI accepts, section by section.

Unknown keys are a hard error. The config structs in crates/ferric-cli/src/config.rs are #[serde(deny_unknown_fields)], so a misspelled key or section aborts the run before anything is computed. That includes [external_potential], its point charges, and each [[scf.ladder]] rung.

String values go through strict parsers, where an unknown value is an error at load time rather than a default. Most accept any capitalisation; the exceptions are noted per key.

This page is hand-maintained against crates/ferric-cli/src/config.rs at commit 4b64e6ce. Where a default is applied at the point of use rather than in config.rs, it was read from crates/ferric-cli/src/lib.rs at the same commit. If the code and this page disagree, the code wins. For which method.kind values exist and what each supports, see Capabilities and validation.

Units follow the code: [molecule] geometries are Å (XYZ), point charges and cutoffs named *_bohr are Bohr, keys named *_angstrom or documented as Å are Å, and energies are Hartree.

A minimal file:

[molecule]
xyz = "testdata/molecules/water.xyz"
[basis]
name = "cc-pvdz"
[method]
kind = "rimp2"
[mp2]
auxbasis = "cc-pvdz-ri"

[molecule] (required)

KeyTypeDefaultAllowed valuesNotes
xyzstringrequiredpathStandard XYZ in Å, relative to the working directory. Not read when [qmmm] is present (the PQR supplies the geometry).
chargeinteger0With [qmmm], applies to the QM region.
multiplicityinteger1≥ 1Read by uhf, rohf and ksdft (UKS) for every task, and for task = "energy" only by rimp2/oo-rimp2 (UHF + unrestricted RI-MP2 / OO-RI-MP2) and the open-shell path of pdep-rpa/gw/mp2-v: UHF, or UKS when [rpa] xc is set (pdep-rpa, gw), or ROHF/ROKS for gw with [gw] reference = "rohf"; mp2-v stays UHF. Every other kind refuses > 1. See open shells.

[basis] (required)

KeyTypeDefaultAllowed valuesNotes
namestring—a bundled name (case-insensitive)sto-3g, 6-31g, cc-pvdz, cc-pvtz, aug-cc-pvdz, aug-cc-pvtz, aug-cc-pvqz, aug-cc-pvdz-pp, aug-cc-pvtz-pp, def2-svp, def2-tzvp, def2-qzvp, cc-pvdz-f12.
pathstring—path to a Gaussian-94 fileUsed only if name is absent. One of name/path is required.

Auxiliary basis names used elsewhere (auxbasis, df_*_aux) come from the same table: cc-pvdz-ri, cc-pvtz-rifit, aug-cc-pv{d,t,q}z-rifit, def2-svp-rifit, def2-tzvp-rifit, def2-tzvpp-rifit, def2-qzvp-rifit, def2-qzvpp-rifit, def2-universal-jkfit, cc-pvdz-f12-optri. cc-pvdz-rifit is an alias of cc-pvdz-ri; both names load the same set.

[method] (required)

KeyTypeDefaultAllowed valuesNotes
kindstringrequiredrhf uhf rohf ksdft rimp2 mp3 oo-rimp2 att-rimp2 mp2-v scs-mp2 scs-mp2-2terfc laplace-mp2 laplace-sos-mp2 pdep-rpa rs-mp2-rpa gw bse-tda tdhf-static-polarizability ccsd ccd ccsd(t) linlccd drpa wb97x-l-v b2plyp dsd-pbep86 tda tddftAny other value is an error. Smoke- and Spike-grade kinds print a [warning] grade line on stderr; Proven kinds and the ungraded laplace-sos-mp2 print none. rimp2, drpa and linlccd name the method and are computed exactly unless [local] sets a local approximation (see Capabilities and validation).
taskstring"energy"energy optimize frequenciesoptimize: rhf ksdft uhf rohf rimp2 pdep-rpa only. frequencies: rhf ksdft uhf rohf only.

[scf]

Read by every kind, because every kind runs an SCF first.

KeyTypeDefaultAllowed valuesNotes
max_iterinteger100
energy_convfloat1e-3Sanity bound, not a target. Convergence requires ΔP_rms < density_conv, ΔP_max < 10·density_conv and ΔE < energy_conv. ΔE floors on the RI noise, so tightening this can make a density-fitted run hit max_iter.
density_convfloat1e-6The real convergence signal.
diis_sizeinteger8
diisstring"pulay"pulay adiis ediis (case-insensitive)An unknown value is an error when the file is loaded.
diis_switch_threshfloat1e-1Error level at which ADIIS/EDIIS hand over to Pulay. Ignored for pulay.
smearing_sigmafloatnoneHartreeFermi–Dirac smearing width. Absent means integer occupations.
guessstring"minao"minao sad hcore (case-insensitive)"sad" is an alias of "minao" (the MINAO projection guess); the free-atom-SCF SAD guess is not selectable from config. Any other value is an error.
soscfboolfalseEnables the second-order (Newton) step in the SCF tail.
integral_threshfloat1e-12Integral screening threshold.
eri_precisionfloat1e-200 to 1e-8libint primitive-screening precision for the SCF J/K integrals. Omitted: FERRIC_ERI_PRECISION if set, else 1e-20. 1e-14 costs up to 6e-9 Ha in E_J for atoms past Ne; 0 disables primitive screening (1.8–5.7× slower per J/K build).
screeningstring"schwarz"schwarz csb csamcsb is rigorous and never looser than schwarz. csam is not a bound. It is refused for erfc (short-range) operators. See SCF: screening.
k_builderstring"direct"direct link cosxExchange builder. cosx with RI-J active (named, or the Kohn-Sham default) is RIJCOSX: J from RI-J, K from COSX, and the RI-K default is not applied; cosx next to an explicitly named df_k_aux is an error. link is ignored with a warning when DF-J/DF-K is active. Both are ignored with a warning for functionals with no exact exchange and for range-separated functionals. See SCF: choosing how exchange is built.
cosx_gridinline table{ radial = 35, angular = 194, prune = "sgx" }angular ∈ 6/14/26/50/110/194/302/434/590; prune ∈ none sgx nwchemThe COSX SCF grid. A table without prune is flat; with prune = "sgx", angular is the peak order of the pruned rows (50/110/194/302/434/590). Only with k_builder = "cosx"; otherwise it is an error. The inner table is strict.
cosx_final_passbooltrueRe-evaluate exchange once on a larger grid at the converged density and report that energy (the SCF-grid energy is printed and logged too). Without cosx_final_grid the grid is { radial = 50, angular = 302, prune = "sgx" }. Gradient tasks run without it; ROHF/ROKS skips it with a note (an explicit true there is an error). Only with cosx.
cosx_final_gridinline tablenoneas cosx_gridThe final-pass grid; setting it turns the pass on (cosx_final_pass = false with it is an error). RHF/RKS and UHF/UKS only. Only with cosx.
cosx_overlap_fitbooltrueOnly with cosx; otherwise it is an error.
cosx_backendstring"md3c1e"md3c1e cosx-aOnly with cosx; otherwise it is an error. cosx-a is the slower cross-check kernel.
cosx_screen_threshfloat1e-7≥ 0Only with cosx and md3c1e. 0 disables the screen.
cosx_half_transformstring"sparse"sparse denseOnly with cosx.
df_j_auxstringnone; def2-universal-jkfit for ksdft, pdep-rpa, rs-mp2-rpa, gw, bse-tda, tdhf-static-polarizability, tda, tddftaux basis name, or ""RI-J. With neither key set, rhf/uhf/rohf use exact 4-index J/K. df_j_aux = "" selects exact J for the kinds that default to RI-J (the SCF J/K log line then reads RI-JK via with a blank name). Unlike Python's run_dft, the CLI does not accept "exact", "none" or "off": any non-empty value is looked up as a basis name, and an unknown one fails the SCF.
df_k_auxstringas df_j_auxaux basis name, or ""RI-K. Use a JK-fit set. "" selects exact K.
level_shiftfloat0.0HartreeVirtual-block shift. Left at 0 with a meta-GGA functional, the library applies 0.5.
mom_after_iterinteger0Maximum-overlap occupation pinning after this many iterations. 0 = aufbau throughout.
verboseboolfalseOne line per SCF iteration. The CLI's --verbose/-v flag ORs into this.
df_guessboolonTwo-stage SCF: DF first, then exact. It applies only on the closed-shell, non-laddered path (rimp2 and the other correlated kinds). rhf/ksdft use the convergence ladder, which does not compose with it, and lib.rs prints a warning there whenever it is enabled, including by default. Mutually exclusive with an explicit df_increments = true.
df_guess_auxstringdef2-universal-jkfitaux basis nameIt is an error when df_guess is off.
df_incrementsboolfalseDF-corrected incremental Fock SCF. Same scope as df_guess, and warned and ignored on rhf/ksdft.
df_increments_auxstringdef2-universal-jkfitaux basis nameIt is an error when df_increments is off.
check_stabilityboolfalseDiagnostic only: warns if the solution is a saddle point and never fails the run. On an RHF/HF run it reports TWO verdicts — internal (the singlet channel, is this RHF solution an RHF minimum?) and external RHF→UHF (the triplet channel, does breaking spin symmetry lower the energy?) — because a stretched geometry is routinely internally stable and externally a saddle: water / 6-31G at r(OH) = 2.0 Å gives +1.97e-2 and −3.07e-1. An external instability's remedy is to run kind = "uhf", not to re-converge RHF. RKS gets the internal verdict only (no triplet XC kernel, printed as a skip); UHF/UKS get the internal verdict, which already spans the independent α/β rotations. ROHF/ROKS, range-separated and meta-GGA are skipped entirely with a printed reason.
stability_descentboolfalseState selection: at a saddle of the orbital Hessian (UHF, or the RHF singlet channel), follow the downhill eigenvector and re-converge, keeping the lowest state. Turns check_stability on as well. Same as Python run_uhf(stability_descent=True). Only kind = "rhf", "uhf" or "ksdft" with task = "energy"; any other kind or task is an error. A KS functional with no stability verdict (range-separated, meta-GGA) skips the descent with a printed reason. Costs one Davidson per converged solve plus one SCF per descent. See examples/o2-uhf-stability-descent.toml.
ladderarray of tablesbuilt-in laddersee below[[scf.ladder]] rungs. Read only by rhf and ksdft.

[[scf.ladder]] rungs

Each rung overrides the flat [scf] settings. The rungs are walked in order, and the ladder stops at the first converged rung. Unknown keys are an error, as elsewhere.

KeyTypeDefaultAllowed valuesNotes
guessstring"minao"minao sad hcoreAs [scf] guess: "sad" is an alias of "minao", and any other value (including sad-smallbasis) is an error.
level_shiftfloatinherits
max_iterintegerinherits
df_j_aux, df_k_auxstringinherits
stall_windowintegernone
divergence_tolfloatnone
restartboolfalsetrue discards the incoming density.

[dft]

KeyTypeDefaultAllowed valuesNotes
functionalstring"LDA" (for ksdft)an XC name (LDA, PBE, B3LYP, wB97X-V, SCAN, r2SCAN, …) or a libxc nameRead by ksdft. wb97x-l-v ignores it with a warning. RPA/GW use [rpa] xc and TDDFT uses [tddft] xc instead.
grid_prunestring"none"none off flat; nwchem nwchem-like nwchem_likePrunes the main grid only. Accepted only with task = "energy".
grid_radialinteger75> 0Radial points per atom on the main grid. Only on a run with a Kohn–Sham grid, only with task = "energy" (the XC gradient uses the default grid), and not with kind = "gw". Same as Python grid_radial=.
grid_angularinteger1106 14 26 50 110 302 434 590Lebedev order on the main grid. Same scope as grid_radial. An unsupported order is an error. Same as Python grid_angular=.
dispersionstringabsentd3bj, d3(bj), d3bj(<functional>), mbd, mbd(<functional>) (case-insensitive)Only on a Kohn–Sham SCF (kind = "ksdft", or rhf/uhf/rohf with functional). task = "optimize" runs on RKS, UKS and ROKS references; task = "frequencies" is closed-shell only and uses finite differences of the KS + dispersion gradient, so [frequencies] hessian = "analytic" is an error. There is no "off" value; omit the key instead. A functional with no published D3(BJ) fit or MBD@rsSCS β (PBE, PBE0, HSE06) is an error.
lambdafloat0.6Only for wb97x-l-v.
omegafloat0.1Bohr⁻¹Only for wb97x-l-v. Note the unit differs from [mp2] omega.

[mp2]

This section is shared by the whole MP2 family, ccsd, ccd, ccsd(t), linlccd, drpa, the double hybrids and tda/tddft, all of which read auxbasis and frozen_core from here. drpa, linlccd and a local rimp2 read nothing else from it (plus linlccd_variant for linlccd); any other [mp2] key on them is an error.

KeyTypeDefaultAllowed valuesNotes
auxbasisstring"cc-pvdz-ri"; "cc-pvdz-rifit" for tda/tddftaux basis nameThe two defaults name the same bundled set (cc-pvdz-rifit is an alias of cc-pvdz-ri).
frozen_coreint, string or bool0integer ≥ 0, "auto", "none", true (= auto), false (= 0)"auto" gives the standard small core for this molecule after the ECP is applied, and the run prints the resolved count.
omegafloat0.420Å⁻¹att-rimp2 (erfc), rs-mp2-rpa. Ignored with a warning when attenuator = "terf". An error on att-rimp2 with att_operator = "terfc".
kappafloatnoneκ > 0, Hartree⁻¹κ-regularized MP2 for the exact rimp2; an error with [local]. Absent = plain MP2.
c_osfloat1.2 (scs-mp2), 1.27 (scs-mp2-2terfc), 1.3 (laplace-sos-mp2)
c_ssfloat1/3 (scs-mp2), 4.05 (scs-mp2-2terfc)laplace-sos-mp2 warns and ignores it.
n_quadinteger73 5 7laplace-mp2, laplace-sos-mp2. Any other value is an error.
sos_formulationstring"mo"mo ao ao-sparselaplace-sos-mp2. mo and ao are exact and agree to round-off. ao-sparse is approximate and requires domain_cutoff_bohr.
domain_cutoff_bohrfloatnone> 0, BohrRequired by ao-sparse. An error with the other formulations.
formulationstring"delta-lr"delta-lr coupled-ringsrs-mp2-rpa.
attenuatorstring"erf"erf terfrs-mp2-rpa. terf needs FERRIC_TERF_TABLE_DIR. An error on att-rimp2 (use att_operator).
r0float1.6828 (= 3.18 Bohr)Års-mp2-rpa with terf only. An error on att-rimp2 (use att_r0).
terf_omegafloatlinked, ω = 1/(r0√2)Å⁻¹, > 0rs-mp2-rpa with attenuator = "terf" only (an error elsewhere). Sets the terf/terfc sharpness independently of r0. Same as Python run_rs_mp2_rpa(terf_omega=).
att_operatorstring"erfc"erfc terfc (case-insensitive)att-rimp2 only (an error on any other kind). The short-range operator on the MP2 correlation; the SCF stays Coulomb. terfc is the Python run_terfc_rimp2 and needs FERRIC_TERF_TABLE_DIR.
att_r0float1.05Å, > 0att-rimp2 with att_operator = "terfc" only; an error with erfc.
r0_sweeparray of floatsnoneÅ, > 0rs-mp2-rpa with terf only. Reuses one SCF for several r0 values. r0 is then ignored with a warning.
r0_bondedfloat0.75Åscs-mp2-2terfc.
r0_nonbondedfloat1.05Å, > r0_bondedscs-mp2-2terfc.
linlccd_variantstring"hh"hh drivers-only fulllinlccd only (an error on any other kind), exact and local alike: it selects the method. drivers-only equals RI-MP2; full adds the pp ladder (CCD-like VVVV memory). Any other value is an error.
mp2v_r0float1.00Å, > 0mp2-v. Also sets the VV10 damping r0. It is correlated with mp2v_b in the published fit.
mp2v_bfloat11.0mp2-v.
mp2v_cfloat0.0089mp2-v. Fixed in the paper. Changing it leaves the published parameterization.
mp2v_attenuatorstring"terfc"terfc erfcmp2-v. terfc needs FERRIC_TERF_TABLE_DIR. erfc is an unparameterized control.
mp2v_omegafloatlinked, ω = 1/(r0√2)Å⁻¹, > 0mp2-v with terfc only. Setting it leaves the fitted parameterization.
mp2v_vv10_dampingstring"terfc"terfc nonemp2-v. none double-counts short-range correlation.
mp2v_nlc_n_radialinteger50> 0mp2-v VV10 grid.
mp2v_nlc_n_angularinteger50> 0mp2-v VV10 grid (unpruned).
oo_max_iterinteger100≥ 1oo-rimp2 only (closed and open shell). Orbital-optimization iterations.
oo_grad_convfloat1e-4> 0oo-rimp2 only. Convergence threshold on the orbital-gradient norm.
oo_level_shiftfloat0.1Hartree, ≥ 0oo-rimp2 only. Level shift on the approximate diagonal orbital Hessian.
oo_diis_sizeinteger6≥ 1oo-rimp2 only. DIIS subspace for the orbital rotations. The four oo_* keys match Python run_oo_rimp2(max_iter=, grad_conv=, level_shift=, diis_size=); on any other kind they are an error.

[local]

The local approximation of a correlated method. method.kind names the method (rimp2, drpa or linlccd); this section says whether and how its amplitudes are truncated. Without it (or with scheme = "none") the method is computed exactly. On any other kind the section is an error. The local runs are closed shell and task = "energy" only, and every printout and run-log result carries the model: "<method> (exact)" with "local": null, or the scheme, eps and kept fraction. See The MP2 family and Exact and local correlation.

KeyTypeDefaultAllowed valuesNotes
schemestring"none"none amplitude-thresholdamplitude-threshold: drop pair amplitudes whose localized integral is at or below eps (single threshold). Any other value is an error.
epsfloatrequired with amplitude-threshold≥ 0, finiteThe threshold is part of the model and has no default. 0 keeps every amplitude and reproduces the exact method. An error with scheme = "none".
eps_sweeparray of floatsnoneeach ≥ 0drpa only. Several ε on one SCF and one localized assembly; sorted and de-duplicated, one result block per point. Instead of eps, not with it.
referenceboolfalseAlso compute the exact method (canonical RI-MP2, canonical plasmon dRPA, exact LinLCCD) and print the local error against it. Costs the full exact calculation. An error with scheme = "none".
integral_directboolfalserimp2 only. The integral-direct local MP2: never forms the global 3-index tensor.
aux_radiusfloat10.0Bohr, > 0Integral-direct only (an error otherwise). Aux fit-domain radius.
virt_radiusfloat12.0Bohr, > 0Integral-direct only. Virtual domain radius.
ao_tailfloat1e-3≥ 0Integral-direct only. 0.0 keeps every shell.
schwarz_skipfloat1e-5≥ 0Integral-direct only. Must be 0.0 for terfc operators, or the run errors.
batch_mergeinteger4≥ 1Integral-direct only.
gate_calfloatnone (gate off)> 0Integral-direct only. Pair-gate calibration (~0.7 Coulomb, ~0.02 erfc ω = 1).
virt_schwarz_kappafloatnone (off)> 0Integral-direct only. ε-linked Schwarz virtual-candidate screen.

[rpa]

Read by pdep-rpa, gw, bse-tda, tdhf-static-polarizability, and, for trunc_thresh only, rs-mp2-rpa.

KeyTypeDefaultAllowed valuesNotes
auxbasisstring"cc-pvdz-ri"aux basis name
frozen_coreint, string or bool0as [mp2]
xcstringnone (HF reference)XC nameSwitches the reference to RKS, or to UKS when open shell. Required by tdhf-static-polarizability. bse-tda ignores it. pdep-rpa with task = "optimize" uses an RHF reference; xc applies only to task = "energy".
n_quadinteger20 (energy runs); 16 (task = "optimize")The Python run_pdep_rpa uses 40. Set it explicitly for reproducibility.
quadraturestring"gauss-legendre"gauss-legendre gauss_legendre gl; minimax mini-max mm; chebyshev-tan chebyshev_tan chebyshev ct
u0float0.5Warn-and-ignore under minimax, which derives its own u₀.
trunc_threshfloat1e-4; 0.0 (full rank) for rs-mp2-rpaPDEP truncation.
eigensolver_conv_threshfloat1e-6 (energy); 1e-8 (optimize)Alias: davidson_conv_thresh.
chi0_sparsitystring"dense"dense, boys, boys:<thresh>, auto, auto:<cutoff>, auto:<cutoff>:<thresh>, each boys/auto form optionally suffixed @<radius_bohr>
run_diagnosticsboolfalse
export_eigpot_prefixstringnoneWrites <prefix>_eigpot_NNN.cube.
export_eigpot_countinteger10Capped at the number of eigenpotentials.
cube_spacingfloat0.2Bohr
cube_marginfloat4.0Bohr
export_npzstringnonepathTurns on the NPZ property bundle. The compute_* keys below default to true only when this is set.
compute_espbooltrueESP at the nuclei.
compute_esp_surfaceboolfalseESP on a vdW shell.
esp_surface_vdw_scalefloat1.4
esp_surface_n_angularinteger110Lebedev order
compute_polarizabilitybooltruealpha_tensor, the molecular static α.
compute_alpha_atomicbooltruealpha_atomic: the Krishtal–Senet–Van Alsenoy intrinsic per-atom α (JCP 125, 034312 (2006)), always Becke-partitioned; c6_partition does not affect it. Charge transfer between atoms is excluded; with compute_polarizability also on, the remainder alpha_ct = alpha_tensor − Σ_A alpha_atomic is exported.
compute_electric_fieldbooltrue
compute_density_matrixbooltrue
compute_dipolebooltrue
compute_hirshfeld_chargesbooltrueProatoms are free-atom SCF densities in the molecule's basis and SCF settings, as in Python's hirshfeld_charges.
compute_lowdin_chargesbooltrue
compute_mulliken_chargesbooltrue
compute_chelpg_chargesbooltrue
compute_resp_chargesbooltrue
compute_c6booltrueWith c6_source = "pdep", also exports alpha_ct_dynamic (nfreq, 3, 3): molecular α(iω) − Σ_A α^A(iω).
allow_partial_npzboolfalseBy default a bundle missing a requested property fails the run.
c6_sourcestring"ts"ts pdep mbd
c6_partitionstringhirshfeld for pdep, becke for ts/mbdbecke hirshfeld

[gw]

Read by gw. bse-tda and tdhf-static-polarizability read frozen_core, and tdhf-static-polarizability also reads scissor. The [rpa] section supplies the screened interaction.

KeyTypeDefaultAllowed valuesNotes
methodstring"g0w0"g0w0 cohsex evgw0 evgw (case-insensitive)
qp_mos[lo, hi]HOMO−2 … LUMO+2absolute MO indices, half-open
max_ev_iterinteger20evGW/evGW0 outer loop.
ev_conv_threshfloat1e-4Hartree
pade_nptsinteger0 (= [rpa] n_quad)
qp_newton_dampfloat1.0
frozen_coreint, string or boolfalls back to [rpa] frozen_coreas [mp2]Also overrides the PDEP frozen core, so W and Σ agree.
scissorfloat0.0Hartreetdhf-static-polarizability only. At 0.0 some molecules hit a negative α diagonal and the run errors. The remedy is about 0.3–0.4 Ha.
referencestring"uhf"uhf rohf (case-insensitive)gw on an open-shell molecule only: the reference is UHF or ROHF (UKS or ROKS with [rpa] xc). An error on a closed-shell molecule or another kind. Same as Python run_u_gw(reference=).

[tddft]

Read by tda and tddft. Also set [mp2] auxbasis (see above).

KeyTypeDefaultAllowed valuesNotes
n_rootsinteger3
xcstringnone (HF reference: CIS or TDHF)XC nameSelects the reference functional and the f_xc kernel. Meta-GGA, VV10 and range-separated functionals are refused.
c_hffloatthe functional's short-range exact-exchange fraction; 1.0 with no xc

[optimize]

Read when task = "optimize".

KeyTypeDefaultAllowed valuesNotes
max_stepsinteger100
g_max_threshfloat4.5e-4Hartree/Bohr
g_rms_threshfloat3.0e-4Hartree/Bohr
e_convfloat1e-6Hartree
trust_radiusfloat0.1Initial step size.
coordinatesstring"cartesian"cartesian cart; internal internals redundant-internal redundant_internal

[frequencies]

Read when task = "frequencies".

KeyTypeDefaultAllowed valuesNotes
hessianstring"auto"auto; analytic; fd finite-differenceauto uses the analytic Hessian for RHF (closed shell) and UHF (aufbau occupations) with the Coulomb operator and exact four-centre J/K (no RI or COSX), a basis up to f functions and a libint2 with second derivatives; no ECP, external potential, implicit solvent, polarizable embedding, fractional occupations, MOM or constraints. Anything else uses finite differences. analytic is an error where it does not apply. The output prints Hessian = analytic or finite-difference.
deltafloat5e-3Bohr, finite and > 0Central-difference step, finite-difference Hessians only. Check the printed Hessian asymmetry: it is zero in exact arithmetic.

[memory]

KeyTypeDefaultAllowed valuesNotes
budget_gbfloatautofinite and > 0Precedence: this key, then FERRIC_MEM_BUDGET_GB, then the legacy FERRIC_OOC_BUDGET_GB/FERRIC_ERI3_BUDGET_GB, then 0.8 × available RAM, then 2 GiB. A value of 0, a negative value or NaN is an error; omit the key for auto. It bounds the ledgered allocations, not total process memory.
three_index_budget_gbfloat—Deprecated alias. budget_gb wins if both are set.

[output]

KeyTypeDefaultAllowed valuesNotes
jsonstring or bool<input-stem>.ferric.jsonl beside the inputa path, true (the default path), false (off)On by default. See Run logs. --json <path> and --no-json override it.

[qmmm]

When present, the PQR supplies both the geometry and the MM charges. It cannot be combined with [external_potential]; doing so is an error.

KeyTypeDefaultAllowed valuesNotes
pqrstringrequiredpathGeometry in Å and charges in e. The element is read from the atom name.
qm_indicesinteger array[]zero-basedUse this, or qm_seeds + qm_radius_angstrom, but not both.
qm_seedsinteger array[]zero-based
qm_radius_angstromfloatnoneÅ, > 0Requires qm_seeds.
link_bondsarray of [qm, mm][]Required when the cut crosses a covalent bond.
boundary_schemestring"delete-host"keep delete-host rc rcdSetting a non-default value without link_bonds is an error.

See QM/MM. Smeared PQR charges, polarizable sites and MM force fields are Python only. (Smeared charges outside QM/MM are available through [external_potential] with width.)

[pcm]

IEF-PCM implicit solvent (ferric-pcm). Absent means vacuum. Honoured on task = "energy" by rhf, uhf, rohf, ksdft and pdep-rpa (for pdep-rpa the RPA correlation is evaluated on the solvated reference). Any other kind, a gradient task (no gradient has a PCM term), [cosmo] in the same file, or pdep-rpa with [rpa] export_npz is an error. The solvent table and checks are shared with Python run_rhf(solvent=...). See examples/water-pcm.toml.

KeyTypeDefaultAllowed valuesNotes
epsilonfloat—finite and > 1Dielectric constant. Give exactly one of epsilon and solvent.
solventstring—water (78.4) dmso (46.7) methanol (32.6) ethanol (24.9) acetone (20.7) dichloromethane/dcm (8.93) thf (7.43) chloroform (4.71) toluene (2.38) hexane (1.88), case-insensitiveDielectric constants at 298 K. An unknown name is an error.
lebedev_orderinteger1106 14 26 50 110 302Tesserae per atomic sphere.

[cosmo]

Conductor-like implicit solvent, applied to every SCF variant. It cannot be combined with [pcm].

KeyTypeDefaultAllowed valuesNotes
epsilonfloatrequired when the section is presentfinite and > 1Default in code is 78.39, but serde has no default for this key.
radius_scalefloat1.17> 0Multiplies Bondi radii.
lebedev_orderinteger1106/14/26/50/110/302
s_matrix_kindstring"GaussianSmeared"GaussianSmeared PointChargeSerde variant names, case-sensitive.

[external_potential]

Strict, like every other section: an unknown key here or inside a point charge is an error.

KeyTypeDefaultAllowed valuesNotes
point_chargesarray of { q, x, y, z, width }[]q in e; x, y, z in Bohr; width in Bohr, finite and > 0Written as [[external_potential.point_charges]] tables. width is optional: with it the charge is Gaussian-smeared, density ∝ exp(−r²/width²) and potential q·erf(r/width)/r (the Python smeared_charges=); without it the charge is a point. See examples/water-rhf-smeared-charge.toml.
field[Ex, Ey, Ez]noneatomic unitsUniform electric field.

With both empty, the run is identical to a vacuum run.