4 Configuration reference
4.1 Configuration layers
The supported entry point is scripts/run_pmf.jl CONFIG.toml --output=RUN_DIR. The facade validates TOML tables, applies safe wrapper defaults, resolves named keys to MHD_* options, sets output paths, and finally applies [environment] overrides. The child process does not inherit unrelated shell MHD_* variables. Read resolved-environment.toml, not just your input file, when reviewing a run. function run_environment
--backend=cpu|metal|cuda overrides the named run.backend; use the matching active project. A conflicting low-level [environment] MHD_BACKEND override comes later, so avoid expressing the same choice in both places.
Unknown sections, named options, and unrecognized low-level option names are errors. Validation is not a science certification and does not replace review of units, mode support, or the runner’s additional runtime checks.
4.2 Shipped experiments
| File | Purpose | Boundary |
|---|---|---|
examples/smoke.toml |
16^3, four-step MHD plus lattice gravity |
Noncosmological, chemistry off |
examples/cosmology-smoke.toml |
Small full-physics installation check | Very short redshift interval, not converged |
examples/pmf-recombination.toml |
Editable recombination research setup | Requires the validation matrix; not a certified production prescription |
examples/convergence-suite.toml |
Serialized grid/timestep cases sharing a base config | Case definition, not measured certification |
4.3 Named tables
These keys map to the public environment interface. The authoritative mapping and validation are in CONFIG_KEYS. CONFIG_KEYS
| Table | Common keys | Meaning |
|---|---|---|
[run] |
n, backend, precision, steps, max_cycles, cfl |
Grid, device, numerical budget; cfl must be in (0, 0.25] for GLM and (0, 0.30] for CT (measured limit) |
[run] |
reconstruction, riemann, print_every, check_every |
Scheme and log/health cadence |
[run] |
checkpoint_every, checkpoint_final, resume |
Checkpoint write/resume policy |
[run] |
mhd_solver |
Divergence treatment: "glm" (default) or "ct" (constrained transport) |
[cosmology] |
zstart, zend, h, omega_m, omega_b, omega_lambda, omega_r |
Expansion history |
[cosmology] |
box_ckpc_h, max_dln_a |
Physical comoving box in ckpc/h, expansion step cap |
[magnetic] |
initial_condition, b0_ng, brms_code, seed |
IC family, comoving nG or code amplitude |
[magnetic] |
kmin, kcut, kmax, mode_lock_n, curl_symbol, curl_reference_n |
Band, discrete operator, shared modes |
[magnetic] |
normalization, reference_kmax, reference_kcut, minimum_cells_per_wavelength |
Explicit amplitude band and resolution requirement |
[magnetic] |
fixed_mode_power, mode_realization, realization_box |
Gaussian/fixed realization and physical hashing |
[chemistry] |
mode, helium, coupling, expansion |
Network and operator split |
[chemistry] |
smoothing, smoothing_sigma_cells, dt_fraction, hydrogen_storage |
Mixing approximation and integration controls |
[chemistry] |
ionized_fast_zmin, velocity_unit_cms, x_hii_initial, x_h2_initial, nonlocal_table |
Ionized shortcut, physical conversion, initial abundances, table input |
[physics] |
gravity, gas_gravity, compton_drag, drag_mode, photon_response |
Coupled physical model |
[physics] |
fft, pressure, scaling, photon_max_dln_a, nonlinear_cfl |
Transforms, thermal normalization, clocks, response caps |
[physics] |
glm_project_every, glm_ch_factor, particle_max_displacement_cells |
Divergence projection and trajectory controls |
[diagnostics] |
redshifts, every, adaptive_fraction |
Requested outputs and adaptive histories |
[diagnostics] |
spectrum_bins, angle_bins, pdf_bins, energy_ledger_every |
Estimator resolution and energy sampling |
n must be even and at least 8. The facade requires finite zstart > zend >= 0, a positive physical box, and a positive comoving b0_ng for cosmological configs. Some transform paths impose additional size/factorization restrictions.
4.4 Selecting the MHD solver
run.mhd_solver = "glm" | "ct" (environment MHD_SOLVER) selects how \nabla\cdot\mathbf B is controlled. "glm" is the default and the research baseline; leaving the key out gives exactly the previous behavior. "ct" selects the face-staggered constrained-transport scheme of the physics chapter, for example examples/cosmology-smoke-ct.toml as the counterpart of examples/cosmology-smoke.toml. The choice is recorded in metadata.toml (mhd_solver, plus ct_initial_* numbers for CT), in the CONFIG log line, in performance.tsv (mhd_solver), and in the checkpoint fingerprint.
For CT the facade changes these defaults and rejects options that cannot work, before any state is allocated (both in the TOML validation and again in the driver):
| Option | With mhd_solver = "ct" |
|---|---|
MHD_INTEGRATOR |
Default ref on every backend; an explicit cube is an error |
physics.drag_mode |
terminal and hybrid are supported (face-staggered terminal induction, still MHD_ALLOW_UNCERTIFIED_TERMINAL=1). Errors: MHD_TERMINAL_INDUCTION=ssprk2, and MHD_TERMINAL_PRESSURE_IMPLICIT=1 with an induction other than ct (cell-centred B writers) |
physics.glm_project_every |
Default 0 (GLM radiation runs default to projecting every cycle); a value above zero is an error |
physics.glm_ch_factor, MHD_GLM_CR |
The explicit step is not limited by the GLM speed ch; dt is the plain CFL step. glm_ch_factor only scales the radiation positivity wave-speed limit (next rows); MHD_GLM_CR is unused |
backend |
CPU and Metal; CUDA is not run |
MHD_RADIATION_MAGNETIC_COMPENSATION |
1 also makes the radiation-coupled steps sum the CT face updates with Kahan compensation (GLM: cell B); the face remainders are checkpointed as ct_residual_1..3. Use it for strong-guide-field, Float32 cases (the native-mode case sets it) |
MHD_RADIATION_POSITIVITY_*, MHD_RADIATION_CHECKPOINT_FALLBACK |
Honoured for CT as for GLM cube (trial check, restore, minmod-PLM/HLL retry, subdivision, checkpoint error), at the cost of 6 extra N^3 face-snapshot arrays. MHD_RADIATION_POSITIVITY_WAVE_GROWTH_LIMIT is multiplied by MHD_GLM_CH_FAC for CT (so the absolute limit equals GLM’s); GLM ref has no such protection |
| Checkpoints | A checkpoint without an mhd_solver key is a GLM checkpoint. GLM and CT checkpoints cannot be resumed as one another; CT checkpoints store the face fields (and, with compensation, the face remainders) |
Consequently a CT and a GLM run at equal cfl do not take identical steps whenever the CFL step, rather than a cosmological or source cap, is the limit. See comparing CT and GLM runs.
4.5 Defaults are context-dependent
The facade’s short-run defaults differ intentionally from invoking the extracted runner directly:
| Choice | Facade behavior |
|---|---|
| Device / precision | CPU / Float32 unless specified |
| Grid / fixed-time budget | n=16, four steps, cfl=0.2 |
| Warmup | Zero, including cosmological runs |
| Restart / final checkpoint | Disabled unless requested |
| FFT | auto, selected per backend |
| Cosmological pressure / magnetic clock | pressure="auto", scaling="jedamzik" |
| Cosmological drag / photons | Full-MHD radiation, moments_exponential |
| Cosmological chemistry | Full mixing with helium, centered H storage, expansion on, Strang half-steps |
| Ionized shortcut | Off: MHD_CHEM_IONIZED_FAST_ZMIN=0 |
| Gaussian smoothing | Eight cells unless configured |
| Nonlinear response CFL | 0.1 for cosmological facade defaults |
The recombination example sets some of these explicitly and can differ from wrapper defaults, including GLM projection cadence. Inspect the resolved run before comparing experiments. A smoothing width in cells changes physically when n changes; scale it for fixed-physical-width convergence tests.
4.6 Escape hatch
[environment]
MHD_PK_KMAX = 100.53096491487338
MHD_RADIATION_FREE_STREAM_TOL = 0.0
MHD_PMF_NORMALIZATION_Z = 10000.0
MHD_PMF_HIGH_MODE_LOCK_N = 128These override named mappings and facade defaults. Paths are resolved by the launched process, so use explicit paths for imported initial states and response tables. Keep runs launched from the repository root. Numerical options with special encodings should follow their parser, not a guessed boolean conversion. MHD_GRAVITY, for example, uses true/false.
Do not enable terminal or hybrid as an automatic speed optimization. They require MHD_ALLOW_UNCERTIFIED_TERMINAL=1 and remain legacy comparisons. Neither a larger source cadence nor a nonzero free-streaming tolerance is a free accuracy improvement; validate them against a tighter reference.
4.7 Complete driver option index
This index is generated from get(ENV, "MHD_...", ...) calls in the actual extracted driver. Each link opens its parsing/default logic in the local source snapshot. A default can depend on other options; the curated tables above and the resolved environment describe the public facade.
| Environment variable | Parsing and defaults |
|---|---|
MHD_ADAPTIVE_DIAG_REL |
runner source |
MHD_ADAPTIVE_DIAG_ZMAX |
runner source |
MHD_ADAPTIVE_DIAG_ZMIN |
runner source |
MHD_ALFVEN_BGUIDE |
runner source |
MHD_ALFVEN_BPERT |
runner source |
MHD_ALFVEN_BPERT_FRAC |
runner source |
MHD_ALLOW_NON_MPS_FFT |
runner source |
MHD_ALLOW_UNCERTIFIED_TERMINAL |
runner source |
MHD_BACKEND |
runner source |
MHD_BOXSIZE |
runner source |
MHD_CFL |
runner source |
MHD_CHECKPOINT_ALLOW_CFL_CHANGE |
runner source |
MHD_CHECKPOINT_ALLOW_NONLOCAL_TABLE_CHANGE |
runner source |
MHD_CHECKPOINT_AT_CYCLE |
runner source |
MHD_CHECKPOINT_DISABLE_WRITES |
runner source |
MHD_CHECKPOINT_EVERY |
runner source |
MHD_CHECKPOINT_FINAL |
runner source |
MHD_CHECKPOINT_PATH |
runner source |
MHD_CHECKPOINT_READ_PATH |
runner source |
MHD_CHECKPOINT_RESET_ENERGY_LEDGER |
runner source |
MHD_CHECKPOINT_RESUME |
runner source |
MHD_CHECKPOINT_WRITE_PATH |
runner source |
MHD_CHECK_EVERY |
runner source |
MHD_CHEM |
runner source |
MHD_CHEM_ADVECT_SPECIES |
runner source |
MHD_CHEM_ALLOW_LOCAL_MIXING |
runner source |
MHD_CHEM_COUPLING |
runner source |
MHD_CHEM_DENSITY_UNITS |
runner source |
MHD_CHEM_DTFRAC |
runner source |
MHD_CHEM_EXPANSION |
runner source |
MHD_CHEM_FALPHA |
runner source |
MHD_CHEM_FH |
runner source |
MHD_CHEM_FUSED_ANALYTIC |
runner source |
MHD_CHEM_FUSED_MIXING |
runner source |
MHD_CHEM_HELIUM |
runner source |
MHD_CHEM_H_STORAGE |
runner source |
MHD_CHEM_IONIZED_FAST_ZMIN |
runner source |
MHD_CHEM_ITCAP |
runner source |
MHD_CHEM_LENGTH_UNITS |
runner source |
MHD_CHEM_MEAN_EVERY |
runner source |
MHD_CHEM_NONLOCAL_SCALE |
runner source |
MHD_CHEM_NONLOCAL_TABLE |
runner source |
MHD_CHEM_NSMEAN |
runner source |
MHD_CHEM_PROFILE |
runner source |
MHD_CHEM_RATE_TABLES |
runner source |
MHD_CHEM_RECFAST_FUDGE |
runner source |
MHD_CHEM_RECFAST_HSWITCH |
runner source |
MHD_CHEM_SMOOTH |
runner source |
MHD_CHEM_SMOOTH_SIGMA_CELLS |
runner source |
MHD_CHEM_TIME_UNITS |
runner source |
MHD_CHEM_VUNIT |
runner source |
MHD_CHEM_XE_MEAN |
runner source |
MHD_COMPTON_DRAG |
runner source |
MHD_COSMOLOGICAL_MHD_SCALING |
runner source |
MHD_CYCLE_PRINT_EVERY |
runner source |
MHD_DEBUG_DIV_EVERY |
runner source |
MHD_DEBUG_PHASE_CYCLE_MIN |
runner source |
MHD_DEBUG_PHASE_FINITE |
runner source |
MHD_DEBUG_PHASE_RHO_MIN |
runner source |
MHD_DEBUG_PHASE_ZMAX |
runner source |
MHD_DEBUG_RADIATION_CORRECTION_CFL |
runner source |
MHD_DEBUG_RADIATION_CYCLE_MIN |
runner source |
MHD_DEBUG_RADIATION_RHO_MIN |
runner source |
MHD_DEBUG_RECON_OVERRIDE |
runner source |
MHD_DEBUG_RIEMANN_OVERRIDE |
runner source |
MHD_DEBUG_STOP_CYCLE |
runner source |
MHD_DENSITY_FRAME_DIR |
runner source |
MHD_DENSITY_FRAME_FIELD |
runner source |
MHD_DENSITY_FRAME_ZS |
runner source |
MHD_DIAG_CLEAR_FFT |
runner source |
MHD_DRAG_DT_BOOST |
runner source |
MHD_DRAG_DT_MODE |
runner source |
MHD_DRAG_HELIUM_ELECTRONS |
runner source |
MHD_DRAG_MAX_IMPULSE |
runner source |
MHD_DRAG_RATE_CODE |
runner source |
MHD_DRAG_VX0 |
runner source |
MHD_DRAG_VY0 |
runner source |
MHD_DRAG_VZ0 |
runner source |
MHD_DRAG_XE |
runner source |
MHD_FB |
runner source |
MHD_FFT |
runner source |
MHD_FINAL_B_DIR |
runner source |
MHD_FINAL_DIAG |
runner source |
MHD_GLM_CH_FAC |
runner source |
MHD_GLM_CR |
runner source |
MHD_GLM_PROJECT_EVERY |
runner source |
MHD_GRAVITY |
runner source |
MHD_GRAVITY_1BUF |
runner source |
MHD_GRAVITY_DRAG_MAX_IMPULSE |
runner source |
MHD_GRAVITY_DT_BOOST |
runner source |
MHD_GRAVITY_GAS_KICK |
runner source |
MHD_GRAVITY_MIDPOINT_SOURCE |
runner source |
MHD_GRAVITY_PHI_INTERP |
runner source |
MHD_GRAVITY_SOURCE |
runner source |
MHD_GRAVITY_SUBCYCLES |
runner source |
MHD_H |
runner source |
MHD_HISTORY_TSV |
runner source |
MHD_HYBRID_AWARE_DT_FACTOR |
runner source |
MHD_HYBRID_CHECK_EVERY |
runner source |
MHD_HYBRID_CONFIRM_CHECKS |
runner source |
MHD_HYBRID_ENTER_DRAG_OVER_OMEGA |
runner source |
MHD_HYBRID_EXIT_DRAG_OVER_OMEGA |
runner source |
MHD_HYBRID_HANDOFF_ALPHA |
runner source |
MHD_HYBRID_HANDOFF_DIAG_EVERY |
runner source |
MHD_HYBRID_HANDOFF_DISPLACEMENT_TOL |
runner source |
MHD_HYBRID_HANDOFF_ERROR_TOL |
runner source |
MHD_HYBRID_HANDOFF_STEPS |
runner source |
MHD_HYBRID_MIN_DRAG_OVER_OMEGA |
runner source |
MHD_HYBRID_MIN_VA_CS |
runner source |
MHD_HYBRID_REENTER_TERMINAL |
runner source |
MHD_INITIAL_B_DIR |
runner source |
MHD_INITIAL_B_IMPORT_DIR |
runner source |
MHD_INITIAL_B_RESCALE_TO_PMF |
runner source |
MHD_INITIAL_HISTORY |
runner source |
MHD_INITIAL_PK |
runner source |
MHD_INITIAL_STATE_DIR |
runner source |
MHD_INIT_TERMINAL_MOMENTA |
runner source |
MHD_INTEGRATOR |
runner source |
MHD_LLF_DMIN |
runner source |
MHD_LLF_PMIN |
runner source |
MHD_MAXEXP |
runner source |
MHD_MAX_CYCLES |
runner source |
MHD_MEANFIELD_BGUIDE |
runner source |
MHD_MEANFIELD_BPERT |
runner source |
MHD_MEANFIELD_PERT_FRAC |
runner source |
MHD_MEANFIELD_POLARIZATION |
runner source |
MHD_MEANFIELD_THETA |
runner source |
MHD_MEMPROBE |
runner source |
MHD_MODE_HISTORY_TSV |
runner source |
MHD_OB |
runner source |
MHD_OL |
runner source |
MHD_OM |
runner source |
MHD_OR |
runner source |
MHD_OUT_TSV |
runner source |
MHD_P0 |
runner source |
MHD_PARTICLE_LATTICE_DISPLACEMENTS |
runner source |
MHD_PARTICLE_MAX_DISP_CELLS |
runner source |
MHD_PARTICLE_WRAP |
runner source |
MHD_PDF_LOGRHO_MAX |
runner source |
MHD_PDF_LOGRHO_MIN |
runner source |
MHD_PDF_NBINS |
runner source |
MHD_PDF_TSV |
runner source |
MHD_PFLOOR |
runner source |
MHD_PK_AXIS |
runner source |
MHD_PK_EVERY |
runner source |
MHD_PK_KMAX |
runner source |
MHD_PK_NBINS |
runner source |
MHD_PK_NMU |
runner source |
MHD_PK_TSV |
runner source |
MHD_PK_ZS |
runner source |
MHD_PMF_B0_NG |
runner source |
MHD_PMF_B0_ZREF |
runner source |
MHD_PMF_BRMS |
runner source |
MHD_PMF_COMOVING_CLOCK |
runner source |
MHD_PMF_CURL_REFERENCE_N |
runner source |
MHD_PMF_CURL_SYMBOL |
runner source |
MHD_PMF_FIXED_MODE_POWER |
runner source |
MHD_PMF_HIGH_MODE_LOCK_N |
runner source |
MHD_PMF_INIT |
runner source |
MHD_PMF_INVARIANT_AXIS |
runner source |
MHD_PMF_KCUT |
runner source |
MHD_PMF_KMAX |
runner source |
MHD_PMF_KMIN |
runner source |
MHD_PMF_KMODE |
runner source |
MHD_PMF_MIN_CELLS_PER_WAVELENGTH |
runner source |
MHD_PMF_MODE_LOCK_N |
runner source |
MHD_PMF_MODE_REALIZATION |
runner source |
MHD_PMF_N |
runner source |
MHD_PMF_NORMALIZATION_KIND |
runner source |
MHD_PMF_NORMALIZATION_Z |
runner source |
MHD_PMF_PRESERVE_LOW_KCUT |
runner source |
MHD_PMF_PRESERVE_LOW_KMAX |
runner source |
MHD_PMF_REALIZATION_BOX |
runner source |
MHD_PMF_SEED |
runner source |
MHD_PMF_SINGLE_MODE_NORMALIZATION |
runner source |
MHD_PMF_TILE_BOXSIZE |
runner source |
MHD_PMF_TILE_N |
runner source |
MHD_PRECISION |
runner source |
MHD_PRINT_EVERY |
runner source |
MHD_PROFILE_SKIP_CYCLES |
runner source |
MHD_RADIATION_BRIDGE_Q2 |
runner source |
MHD_RADIATION_CHECKPOINT_FALLBACK |
runner source |
MHD_RADIATION_ENERGY_LEDGER_EVERY |
runner source |
MHD_RADIATION_FREE_STREAM_TOL |
runner source |
MHD_RADIATION_HIGHZ_MAX_DLNA |
runner source |
MHD_RADIATION_HIGHZ_ZMIN |
runner source |
MHD_RADIATION_LONG_VISCOSITY |
runner source |
MHD_RADIATION_MAGNETIC_COMPENSATION |
runner source |
MHD_RADIATION_MAX_DLNA |
runner source |
MHD_RADIATION_NONLINEAR_CFL |
runner source |
MHD_RADIATION_NYQUIST_GUARD |
runner source |
MHD_RADIATION_PHOTON_ADIABATIC |
runner source |
MHD_RADIATION_PHOTON_COMOVING |
runner source |
MHD_RADIATION_POSITIVITY_FALLBACK |
runner source |
MHD_RADIATION_POSITIVITY_MAX_FALLBACK_PASSES |
runner source |
MHD_RADIATION_POSITIVITY_MAX_SUBDIVISIONS |
runner source |
MHD_RADIATION_POSITIVITY_WAVE_GROWTH_LIMIT |
runner source |
MHD_RADIATION_RESPONSE_MODEL |
runner source |
MHD_RECON |
runner source |
MHD_RIEMANN |
runner source |
MHD_SOLVER |
runner source |
MHD_SOURCE_MAX_DT_FACTOR |
runner source |
MHD_STEPS |
runner source |
MHD_STREAMING_TSV |
runner source |
MHD_TERMINAL_ACCURACY_CFL |
runner source |
MHD_TERMINAL_ACCURACY_PRESSURE |
runner source |
MHD_TERMINAL_B_REL_LIMIT |
runner source |
MHD_TERMINAL_DEDICATED_SCRATCH |
runner source |
MHD_TERMINAL_DIFF_CFL |
runner source |
MHD_TERMINAL_GAMMA_CODE |
runner source |
MHD_TERMINAL_GAMMA_SCALE |
runner source |
MHD_TERMINAL_IMPLICIT_DIFFUSE |
runner source |
MHD_TERMINAL_IMPLICIT_DIFFUSE_FAC |
runner source |
MHD_TERMINAL_INDUCTION |
runner source |
MHD_TERMINAL_INDUCTION_CFL |
runner source |
MHD_TERMINAL_INDUCTION_DISSIPATION |
runner source |
MHD_TERMINAL_INDUCTION_DISSIPATION_ORDER |
runner source |
MHD_TERMINAL_INDUCTION_MAX_SUBCYCLES |
runner source |
MHD_TERMINAL_KEFF |
runner source |
MHD_TERMINAL_LBOX_CKPC |
runner source |
MHD_TERMINAL_LBOX_CM |
runner source |
MHD_TERMINAL_MAX_DISP_CELLS |
runner source |
MHD_TERMINAL_PRESSURE_COEFF |
runner source |
MHD_TERMINAL_PRESSURE_IMPLICIT |
runner source |
MHD_TERMINAL_PROJECT_B |
runner source |
MHD_TERMINAL_RHO_REL_LIMIT |
runner source |
MHD_TERMINAL_SPLIT |
runner source |
MHD_TERMINAL_VCAP |
runner source |
MHD_TERMINAL_VSMOOTH |
runner source |
MHD_TFINAL |
runner source |
MHD_WARMUP |
runner source |
MHD_XH2_INIT |
runner source |
MHD_XHII_INIT |
runner source |
MHD_ZEND |
runner source |
MHD_ZSTART |
runner source |