Skip to content

Remaining schema blocks — field reference

Six TOML blocks that had only partial documentation before 2026-08-03. Each one is a knob surface a user has to touch to do real work — [[controller]] and [cylinder.combustion] are among the first blocks anyone edits — and an undocumented knob is a knob nobody outside this repo can find.

Coverage before this page, measured across every *Spec in aeolus1d.io.schema (a field counts as documented if its name appears in backticks anywhere under docs/):

Spec Block Was Now
ShaftSpec [[shaft]] 1/6 6/6
ThermalWallSpec [pipe.thermal_wall] 1/16 16/16
RegenSpec [pipe.filter.regen] 1/13 13/13
UreaSpec [pipe.urea] 5/13 13/13
ControllerSpec [[controller]] 9/34 34/34
WiebeSpec [cylinder.combustion] 8/33 33/33

tests/unit/test_schema_block_reference_coverage.py fails CI when a field lands on any of these specs without a row here, and checks the Default column against the dataclass. That pairing is the point: of the reference pages audited on 2026-08-01, the one page that had a coverage guard was the one that had not rotted, and every unguarded number in the others was wrong.

For [case] see run settings; for [[cylinder]] see the cylinder reference; for the aftertreatment thermal blocks see aftertreatment thermal & catalytic blocks.


[[shaft]] — turbocharger shaft

Couples a [[turbo]] compressor and turbine through I·dω/dt = (Ẇ_T − Ẇ_C)/ω. eta_mech and bearing_friction both default to the loss-free shaft, so adding them to an existing case and leaving the defaults is bit-identical.

Field Type Default Meaning
id str required Unique shaft identifier.
inertia float 1e-05 Shaft polar moment of inertia I. Drives the integrator: I·dω/dt = (Ẇ_T − Ẇ_C) / ω. Units: kg·m². Typical: 1e-5 (turbocharger).
omega_init float 1000.0 Initial shaft speed at t = 0. Units: rad/s.
omega_min float 50.0 Minimum shaft speed. The integrator clamps ω to this floor to avoid singularities in Ẇ / ω at near-zero speed. Units: rad/s. Default: 50.
eta_mech float 1.0 Phase v0.5-turbo-robust — bearing/seal mechanical efficiency (debits net driving power) + viscous windage coefficient k (friction power k·ω² opposing rotation). Defaults reproduce the loss-free shaft.
bearing_friction float 0.0 Viscous windage coefficient k; friction power k·ω² opposes rotation. 0 = loss-free shaft (pre-feature default).

[pipe.thermal_wall] — per-pipe dynamic wall

Gives a pipe a wall with heat capacity, so it lags rather than tracking the gas. kind = "none" (default) keeps the original static-T_wall HEAT closure and carries no extra state.

Three ways to close the outside of the wall, in increasing fidelity:

  1. Nothing (h_ext = eps_rad = 0) — adiabatic outside. The wall soaks up gas heat forever; only meaningful for warm-up transients.
  2. Ambient BC (h_ext and/or eps_rad) — the wall sheds to T_amb and reaches a steady balance.
  3. Coolant coupling — a matching [[coolant_coupling]] ties the wall to a CoolantPipe through h_cool.

Setting layers switches to the radial multi-layer solver, and the single-layer mass fields (m_wall_per_cell, cp_wall) stop being consulted.

Field Type Default Meaning
kind Literal['none', 'dynamic'] 'none' "none" uses the static T_wall from the HEAT closure and carries no wall state. "dynamic" gives the pipe a per-cell T_wall(x) ODE advanced by m·c·dT/dt = q̇_gas − q̇_cool.
m_wall_per_cell float 0.0 [kg per cell] Wall thermal mass. Single-layer only — superseded by layers when that is non-empty.
cp_wall float 900.0 [J/(kg·K)] Wall specific heat (aluminium default). Single-layer only.
h_gas float 400.0 [W/(m²·K)] Gas-side film coefficient.
h_cool float 2000.0 [W/(m²·K)] Coolant-side film coefficient. Used only when a matching [[coolant_coupling]] points at this pipe.
A_wall_per_cell float 0.0 [m² per cell] Gas-side wetted wall area. Multiplies h_gas; 0 leaves the wall thermally disconnected from the gas.
T_wall_init float 300.0 [K] Initial wall temperature at t = 0.
h_ext float 0.0 external convection, W/(m²·K)
T_amb float 300.0 [K] Ambient sink temperature for the external convection / radiation BC.
eps_rad float 0.0 outer-surface emissivity (0 ⇒ off)
A_ext_per_cell float 0.0 [m² per cell] External (outer-surface) area for h_ext / eps_rad. 0 reuses A_wall_per_cell.
k_wall float 0.0 [W/(m·K)] Wall thermal conductivity for axial conduction (steel ≈ 45, Al ≈ 200). Paired with A_cross_wall.
A_cross_wall float 0.0 [m²] Wall-material cross-section (an annulus) carrying axial conduction. Paired with k_wall; both 0 ⇒ axial conduction off.
gas_coupled bool False v0.4 — opt-in two-way gas coupling for a coolant-coupled wall. Default false keeps the historical read-only-gas behaviour (the gas-side loss is modelled by a separate HEAT closure); true wires the energy-conservative gas↔wall py_heat tie (and overrides the HEAT closure). No effect on standalone walls (always two-way).
layers list[WallLayerSpec] [] v0.4 multi-layer radial wall. When non-empty (and kind="dynamic"), the build uses the radial multi-layer solver: the gas couples to the first (inner) layer via h_gas / A_wall_per_cell and the external BC (h_ext / eps_rad) acts on the last (outer) layer. The single-layer mass fields (m_wall_per_cell / cp_wall) are unused.
axial_conduction bool False Opt-in axial conduction along the pipe within each radial layer (multi-layer walls only; per-layer conductance derived from each layer's k / thickness). Off by default.

[pipe.filter.regen] — DPF regeneration kinetics

Two soot-oxidation pathways run in parallel: the active O₂ route (C + ½O₂ → CO/CO₂, lights off above ~550 °C) and the passive NO₂ route (C + NO₂ → NO + CO₂), which ticks along at ordinary exhaust temperatures.

Three refinements are off by default and each is bit-identical when left off: k_mt (mass-transfer cap), frac_fast (two-population soot), and hrr_clamp (per-step heat-release stability clamp).

Field Type Default Meaning
A_o2 float 100000000.0 Active (O₂) regeneration pre-exponential factor. Soot oxidation pathway C + ½ O₂ → CO + CO₂; first-order in soot loading and O₂ concentration. Rate per cell (kg-soot / m³-filter / s): A_o2 · (ρ · Y_O2 / M_O2) · soot · exp(-Ea_o2 / RT). Pathway lights off above ~550 °C exhaust gas temperature. Units: m³ / (mol · s). Typical: 1e8 (Konstandopoulos & Kostoglou, 2000).
Ea_o2 float 150000.0 Active (O₂) regeneration activation energy. Sets the temperature gate for O₂-driven oxidation; below ~500 °C exhaust temperatures the rate is effectively zero. Units: J/mol. Typical: 150 000 (150 kJ/mol, Konstandopoulos & Kostoglou).
A_no2 float 5500.0 Passive (NO₂) regeneration pre-exponential factor. Soot oxidation pathway C + NO₂ → NO + CO₂; far lower activation energy than the O₂ pathway, so it ticks along at typical exhaust temperatures (~250–400 °C). Rate per cell: A_no2 · (ρ · Y_NO2 / M_NO2) · soot · exp(-Ea_no2 / RT). Units: m³ / (mol · s). Typical: 5.5e3.
Ea_no2 float 100000.0 Passive (NO₂) regeneration activation energy. Lower than the O₂ pathway — NO₂ is an aggressive oxidiser, so the passive route runs at exhaust temperatures. Units: J/mol. Typical: 100 000 (100 kJ/mol).
K_NO_inh float 0.0 [m³/mol] Langmuir NO back-inhibition constant on the NO₂ pathway — NO produced by the reaction competes for the same sites. 0 = no inhibition (pre-feature default, bit-identical).
dH float 32800000.0 Heat of reaction released per kg of soot oxidised. Both pathways pour this into the gas energy residual R_E per cell at rate dH · |d_soot/dt| (W/m³). Positive = exothermic. Phase 8f.5 lacks a solid-phase thermal mass for the cake — Phase 8g (backlogged) adds it. At realistic loadings the released heat dumps directly into the gas, which can run away if soot is high; tune the example with low loadings until 8g lands. Units: J/kg-soot. Typical: 32.8e6 (C + O₂ → CO₂, lower if CO is the major product).
k_mt float 0.0 [m³/(mol·s)] Volumetric mass-transfer coefficient capping the burn rate where O₂ supply, not kinetics, limits. Composed as a serial resistance 1/r_eff = 1/r_arrhenius + 1/r_mt, so low-T behaviour is unchanged and the high-T "Arrhenius cliff" is removed. 0 = disabled.
frac_fast float 0.0 Fraction (0..1) of the initial soot loading assigned to the fast-burning population. The rest burns with A_o2/Ea_o2. 0 = single-fraction (bit-identical).
A_o2_fast float 100000000.0 [m³/(mol·s)] Pre-exponential for the fast soot fraction. Only consulted when frac_fast > 0.
Ea_o2_fast float 120000.0 [J/mol] Activation energy for the fast soot fraction — lower than Ea_o2, which is what makes it light off earlier.
heater_power_w float 0.0 [W] Electrical heater power for active regeneration, applied once soot_trigger_kg_m3 is exceeded. 0 = passive regeneration only.
soot_trigger_kg_m3 float 8.0 [kg/m³] Soot-loading threshold at which the active heater switches on.
hrr_clamp bool False Phase 8n — opt-in per-step soot-oxidation HRR stability clamp. Bounds the regen rate so its explicit heat release can't overshoot the gas / cake temperature in one step (cap = ρ·cp·T/(dH·dt) direct, Ω_cake·T_cake/(dH·dt) thermal). False (default) = no clamp, bit-identical; True hardens active regen / high-soot-load runs against forward-Euler T overshoot.

[pipe.urea] — SCR urea-water doser

Injects urea-water solution (AdBlue) that decomposes to the NH₃ the SCR brick needs. control picks the strategy: "fixed" follows the mdot_t/mdot_v schedule, "anr_feedforward" closes the loop on a target ammonia-to-NOx ratio from the live NOx flow at the brick inlet and ignores the schedule entirely.

The mdot_t abscissa must ascend; it is checked at load and at build.

Field Type Default Meaning
kind Literal['none', 'urea_spray'] 'none' "none" disables the doser. "urea_spray" injects urea-water solution, which decomposes to NH₃ for the downstream SCR.
mdot_t list[float] [] time schedule (s)
mdot_v list[float] [] UWS rate (kg/s)
uws_conc float 0.325 urea mass fraction in UWS (AdBlue default)
x_frac float 0.1 normalised injection location [0, 1]
n_spray_cells int 1 cells to spread source over
eta_conv float 1.0 urea → NH₃ conversion efficiency
hnco_frac float 0.0 Phase 7b-3 — when > 0, a fraction hnco_frac of the urea is injected as HNCO intermediate rather than being instantly converted to 2NH₃+CO₂. The HNCO species must appear in pipe.species_extras for tracking.
control Literal['fixed', 'anr_feedforward'] 'fixed' Dosing strategy. "fixed" (default) drives the dose from the mdot_t / mdot_v schedule. "anr_feedforward" closes the loop: each step the dose is computed to hit a target Ammonia-to-NOx Ratio (NH₃ : NOx molar) from the live engine-out NOx flow at the brick inlet (mirrors the AVL Cruise M SCR dosing controller). Under anr_feedforward the mdot_t/mdot_v schedule is ignored.
anr_target float 1.0 target NH₃ : NOx molar ratio (ANR)
nox_species list[str] [] NOx species summed for the ANR denominator (molar flow). Standard diesel SCR feed is NO + NO₂.
light_off_T float 0.0 [K] Inlet-temperature gate below which dosing is suppressed (urea deposits rather than decomposing). 0 = no gate.
max_mdot_uws float 0.0 kg/s UWS dose clamp (0 = no clamp)
charge_cooling bool False AdBlue evaporation / decomposition enthalpy sink on the gas — sensible heat warming the liquid to gas temperature, latent heat of the carrier water, and the endothermic urea decomposition. Off by default; every existing case is bit-identical.
T_liquid float 300.0 [K] injected UWS temperature, for the sensible-heat term
cp_liquid float 4180.0 [J/(kg·K)] specific heat of the aqueous urea solution
L_water float 2260000.0 [J/kg] latent heat of the carrier water
water_mol_ratio float 6.9 mol H₂O evaporated per mol urea decomposed (32.5 wt-% AdBlue)
dH_decomp float -100000.0 [J/mol urea] decomposition enthalpy, +ve = exothermic (urea decomposition is endothermic, hence negative)

[[controller]] — closed-loop actuators

One block per controller. kind selects the arm, and each arm consults a different subset of the fields — fields belonging to another arm are ignored rather than rejected, so a misspelled kind silently gives you a different controller. id, kind and Kp are always required.

kind actuates controlled variable key fields
boost_pressure VGT vane manifold pressure turbine_id, manifold_pipe_id, p_target, vane_min/max
wastegate waste-gate bypass manifold pressure turbine_id, manifold_pipe_id, p_target, bypass_min/max
dpf_heater electrical heater DPF temperature dpf_pipe_id, T_target, P_min/max
doc_sulfur — (storage model) DOC sulphur loading doc_pipe_id, Y_SO2_in, A_store, Ea_store, A_reduce, Ea_reduce
egr_valve EGR valve species fraction at a probe egr_pipe_id, egr_end, probe_pipe_id, species_name, Y_target, open_min/max
fuel_injector injected fuel mass species fraction at a probe cylinder_id, probe_pipe_id, species_name, Y_target, m_fuel_min/max
spark_timing spark angle knock margin cylinder_id, knock_margin_target, theta_min_deg, theta_max_deg

fuel_injector deliberately reuses probe_pipe_id / species_name / Y_target from the egr_valve arm: both are PI-on-species-fraction at a probe pipe and the semantics are identical.

Field Type Default Meaning
id str required Unique controller identifier.
kind Literal['boost_pressure', 'dpf_heater', 'wastegate', 'doc_sulfur', 'egr_valve', 'fuel_injector', 'spark_timing'] required Which controller to build. Each arm consults a different subset of the fields below; fields belonging to other arms are ignored.
Kp float required Proportional gain. Sign convention is per-controller — see the arm's section.
Ki float 0.0 Integral gain. 0 = pure proportional (steady-state offset remains).
turbine_id Optional[str] None Turbine whose vane (boost) or waste-gate (bypass) this controller actuates.
manifold_pipe_id Optional[str] None Pipe whose pressure is the controlled variable (the boost/manifold probe).
p_target Optional[float] None [Pa] Target manifold pressure. Required by boost_pressure and wastegate.
vane_min float 0.05 Lower clamp on VGT vane position (0 = fully closed). Kept above 0 so the turbine never fully chokes.
vane_max float 1.0 Upper clamp on VGT vane position (1 = fully open).
bypass_min float 0.0 Lower clamp on waste-gate bypass fraction (0 = fully closed).
bypass_max float 1.0 Upper clamp on waste-gate bypass fraction (1 = fully bypassed).
dpf_pipe_id Optional[str] None DPF pipe whose temperature the heater controls.
T_target Optional[float] None [K] Target DPF temperature for the dpf_heater arm.
P_min float 0.0 [W] Lower clamp on heater power.
P_max float 5000.0 [W] Upper clamp on heater power.
doc_pipe_id Optional[str] None DOC pipe carrying the sulphur-storage state.
Y_SO2_in float 5e-05 Inlet SO₂ mass fraction feeding the DOC sulphur-storage model.
A_store float 100.0 Pre-exponential for sulphur storage on the DOC washcoat.
Ea_store float 20000.0 [J/mol] Activation energy for sulphur storage.
A_reduce float 1000000000.0 Pre-exponential for sulphur release (de-sulphation).
Ea_reduce float 180000.0 [J/mol] Activation energy for sulphur release — high, so de-sulphation needs a deliberate high-temperature excursion.
egr_pipe_id Optional[str] None Pipe terminated by the EGR-valve BC this controller actuates.
egr_end Literal['left', 'right'] 'left' Which end of egr_pipe_id the EGR valve BC is attached to.
probe_pipe_id Optional[str] None Pipe where the controlled species fraction is measured.
species_name str 'O2' Species whose mass fraction is the controlled variable (O2 for EGR-rate control).
Y_target Optional[float] None Target mass fraction of species_name at the probe.
open_min float 0.0 Lower clamp on valve opening fraction.
open_max float 1.0 Upper clamp on valve opening fraction.
cylinder_id Optional[str] None Cylinder this controller actuates (fuel injector or spark timing).
m_fuel_min float 0.0 [kg/cycle] Lower clamp on injected fuel mass.
m_fuel_max float 0.0001 [kg/cycle] Upper clamp on injected fuel mass.
knock_margin_target Optional[float] None Target knock margin the spark_timing controller holds by retarding spark.
theta_min_deg float 300.0 [°CA] Most-retarded spark angle the controller may command.
theta_max_deg float 420.0 [°CA] Most-advanced spark angle the controller may command.

[cylinder.combustion] — combustion models

This block carries three alternative models rather than one parameter set, which is why it needs sections rather than a flat table. kind picks which, and the other models' parameters are inert.

m_fuel and LHV scale the total released energy for every model.

kind = "wiebe" (default) — prescribed burn shape

Uses theta_start_deg, duration_deg, a, m. Set stages to a list of [[cylinder.combustion.stage]] blocks for a multi-stage profile (HCCI / RCCI / diesel), which replaces the single-stage shape above.

kind = "si_turbulent" — predictive SI

Computes the burn rate from the in-cylinder state via the turbulent-flame entrainment model, using the si_* fields. Nothing is prescribed except the spark timing.

Multi-pulse diesel

The diesel_* fields drive the Watson-correlation multi-pulse diesel model (premixed spike + diffusion tail). Note diesel_premixed_duration_deg / diesel_diffusion_duration_base_deg are in crank angle, while diffusion burn is mixing-limited and takes roughly constant time — see BACKLOG.md for the measured consequence on the EPW suite's MFB50 speed trend.

Two-zone diagnostics

two_zone, gamma_burnt, gamma_unburnt, burnt_dissociation and caloric_zone_split are diagnostic layers only — they do not change the bulk volume integration or add a conservation law. They feed the burnt-zone temperature the Zeldovich NOx post-processor reads.

Field Type Default Meaning
theta_start_deg float 360.0 [°CA] Crank angle at which combustion starts (kind = "wiebe" only).
duration_deg float 60.0 [°CA] Total burn duration Δθ (kind = "wiebe" only).
a float 5.0 Wiebe completeness coefficient. a = 5 (default) gives ~99 % burnt by the close of the window (the textbook convention). Units: dimensionless.
m float 2.0 Wiebe shape exponent. m ≈ 2 is a typical SI shape; CI engines tend higher (longer ignition-delay tail). Units: dimensionless.
m_fuel float 5e-05 [kg/cycle] Fuel mass injected per cycle. Scales total released energy together with LHV, for every kind.
LHV float 44000000.0 [J/kg] Fuel lower heating value. With m_fuel this sets the total energy released per cycle, for every kind.
two_zone bool False When true, the cylinder maintains separate burnt-zone and unburnt-zone temperatures (Phase 25j) for diagnostic output. The bulk volume integration is unchanged — these are layered diagnostics, not a new conservation law. Default: false.
gamma_burnt Optional[float] None Optional per-zone γ for the burnt-zone temperature diagnostic (Phase 25k two-zone). Typical value 1.27 for hot polyatomic-rich combustion products. Leave unset to fall back to the cylinder's single γ. Units: dimensionless.
gamma_unburnt Optional[float] None Optional per-zone γ for the unburnt-zone temperature diagnostic. Typical value 1.40 for cold diatomic-rich fresh charge. Leave unset to fall back to the cylinder's single γ. Units: dimensionless.
burnt_dissociation bool False Chem audit 2026-07 — dissociation-aware burnt-zone T diagnostic. When True the two-zone burnt-zone energy balance adds the endothermic dissociation energy of the combustion products, capping the unphysically-high peak T a frozen constant-γ back-solve gives at high load (which inflates the Zeldovich NOx post-processor). Default False = bit-identical to the constant-γ behaviour. Diagnostic-only.
caloric_zone_split bool False P2 (2026-08-08) — evaluate BOTH zones with the volume's own caloric model instead of two heat capacities frozen from a constant γ and the cylinder's nominal R_gas. The unburnt zone uses e_cal(T_u); the burnt zone is the Newton inverse T_from_e. Both frozen terms bias the solved T_b up, and T_b feeds the Zeldovich NOx post-processor whose rate is exponential in it. MEASURED on EPW: frozen c_v = 838.3 vs caloric 938 @ 1500 K / 1339 @ 2400 K, and R_eff = 288.17 vs 287.05 — so the correction scales with the temperature reached and is self-limiting. T_b fell 2.24 % at peak pressure. Requires a volume carrying a caloric evaluator; a species-less cylinder keeps the legacy path. Default False = bit-identical. Diagnostic-only.
stages list[WiebeStageSpec] [] CP12-2 — Optional multi-stage Wiebe profile for HCCI / RCCI / diesel. When non-empty, the per-stage (theta_start_deg, duration_deg, a, m, mass_fraction) tuples replace the single-stage shape above. m_fuel + LHV still scale total energy. TOML form: [cylinder.combustion] m_fuel = 8e-5 LHV = 43e6 [[cylinder.combustion.stage]] theta_start_deg = 360 duration_deg = 10 mass_fraction = 0.4 a = 6.5 m = 3.0 [[cylinder.combustion.stage]] theta_start_deg = 365 duration_deg = 60 mass_fraction = 0.6 a = 4.0 m = 1.2
kind str 'wiebe' C1 — combustion-model selector. "wiebe" (default) = the prescribed-shape burn above; "si_turbulent" = the PREDICTIVE SI turbulent-flame entrainment model (aeolus1d.closures.si_turbulent_combustion), which COMPUTES the burn rate from the in-cylinder state via the si_* parameters below (plus the shared m_fuel / LHV). Default keeps every existing case bit-exact.
si_spark_timing_deg float 340.0 spark crank angle [° in 0..720)
si_fuel str 'gasoline' laminar-flame-speed fuel preset
si_phi float 1.0 equivalence ratio
si_dilution float 0.0 residual + EGR fraction (lowers S_L)
si_c_u float 0.5 u' = c_u · mean piston speed
si_c_l float 0.5 integral length = c_l · chamber height; also absorbs the model's fixed lumped viscosity (it enters only as ν·c_l), so it is a calibration constant, not a pure geometric ratio
si_kernel_radius float 0.001 seeded spark-kernel radius [m]
si_gamma_unburnt float 1.35 γ for the adiabatic unburnt-zone T_u
diesel_soi_deg float 348.0 start of injection [° CA]
diesel_inj_duration_deg float 20.0 injection duration [° CA]
diesel_cetane_number float 50.0 #2 diesel ~48–52
diesel_phi float 0.0 equivalence ratio; ≤0 ⇒ from charge
diesel_afr_stoich float 14.5 stoichiometric air/fuel
diesel_comb_efficiency float 1.0 burnt fraction of injected fuel
diesel_premixed_duration_deg float 8.0 premixed-spike Wiebe duration
diesel_diffusion_lag_deg float 4.0 diffusion start after SOC
diesel_diffusion_duration_base_deg float 12.0 dur = base + k·inj_dur
diesel_diffusion_duration_k float 1.6 Slope of the diffusion-burn duration on injection duration: dur = base + k·inj_dur.
diesel_watson_a float 0.7 premixed-fraction coefficients
diesel_watson_b float 0.35 Watson premixed-fraction coefficient b (exponent on ignition delay).
diesel_watson_c float 0.4 Watson premixed-fraction coefficient c (exponent on equivalence ratio).
mz_c_tan_alpha float 0.26 Spray spreading-angle coefficient in tan(α/2). Calibrate through this, not through mz_c_xchar — a wider cone and a shorter x⁺ are the same knob, so tuning both double-counts.
mz_c_xchar float 0.66 Geometry correction on the characteristic length x⁺. Normally held fixed at the published value.
mz_m_bmf float 0.3 Exponent on the burnt-mass-fraction slowdown of entrainment — a zone surrounded by burnt charge entrains less fresh air.
mz_eps_bmf float 0.25 Shift keeping that slowdown finite as BMF → 1. Without it late-cycle zones stop entraining entirely, which they do not.
mz_c_tau_vap float 0.00015 Evaporation time-scale [s] at the 900 K reference; τ ∝ T⁻³.
mz_c_tau_mix float 0.0008 Mixing time-scale [s] at the 1200 rpm reference; τ ∝ rpm^-0.6.
mz_k_mix float 2.0 Mixing slowdown once the spray reaches the bowl rim and then the bore — the crude stand-in for wall impingement.
mz_c_liftoff float 622500000.0 Lift-off length constant, in the correlation's own mixed units. Calibrated value since 2026-08-25; the published SAE 2005-01-3843 constant is 7.04e8, and this is 0.884× it. Not 1.0 — the correlation has no natural scale without it.
mz_c_tau_id float 16.7 Ignition-delay prefactor [s·Pa]. Calibrated value since 2026-08-25; the previous default 25.14 was derived by anchoring to 1.0 ms at 60 bar / 900 K / air, which this gives as 0.67 ms. Pairs with mz_ea_over_r = 3242.0 — change both together or neither.
mz_ea_over_r float 3242.0 Apparent activation temperature [K] for the ignition delay.
mz_u_swirl float 0.0 Swirl velocity [m/s]. Zero reproduces the reference implementation.
mz_bowl_diameter float 0.0 Piston-bowl diameter [m]. ≤ 0 resolves to 0.6·bore; passing 0 through would divide by zero in the mixing ramp.
mz_packet_duration_s float 5e-05 Injection slice that seeds one zone. Smaller means more zones and a finer (λ,T) distribution.
mz_tzone_mode int 2 Zone-temperature closure. 2 = mixing + first law (no fitted coefficients). 1 (adiabatic-flame jump) is refused at build since 2026-09-29: advance_zones has no path for it, so it used to be accepted and silently ran mode 2. Modes 3/4/11/22 are rejected and refused at build.
inj_a_holes_geometric_m2 float 1e-07 Geometric nozzle-hole area [m²]. Sets exit velocity; the discharge coefficient is already in the mass flow, so using the effective area here would count it twice.
inj_a_holes_m2 float 7e-08 Effective (discharge-corrected) hole area [m²].
inj_a_gain_m2 float 0.0 Effective inlet/gain restriction area [m²]. ≤ 0 means absent, not closed — a zero area would give zero flow.
inj_a_seat_m2 float 0.0 Effective seat area [m²]. ≤ 0 means fully lifted / absent.
inj_rail_pressure_pa float 180000000.0 Common-rail pressure [Pa].
inj_rail_volume_m3 float 8e-05 Rail volume [m³]. A starting value, not a calibration. Not read yet: the multi-zone model holds a regulated rail.
inj_rail_bulk_modulus_pa float 1800000000.0 Fuel bulk modulus [Pa]. Sets how fast the rail droops when injection outruns the pump. Not read yet: the multi-zone model holds a regulated rail.
inj_rho_fuel float 820.0 Liquid fuel density [kg/m³].
inj_n_holes int 8 Nozzle hole count for multizone_diesel: one hole's diameter, sqrt(4·A_geo/(π·n)), sets the spray length and the flame lift-off. Hardware, not a calibration.