This page records numerical choices visible in audited Arrhenius.jl and Cantera source paths, the reasons available in source history, and tests identified by the audits. It is a source comparison, not a claim that the solvers produce identical solutions.
Scope. Arrhenius.jl refers to audited source snapshot 78ab438, flame mode discretization=:finite_difference, except where point APIs/reactors are named. Cantera refers to 4.0 development source at commit 726522be4e2a13454d8415b7ef799d621f665cf3, with mixture-averaged transport and no Soret/radiation by default. Cross-code survey: 2026-10-16. “Identical” means same rule/constants in the audited mode, not bitwise equality; “different” describes implementation, not merit. All comparison code references below are public.
Many original Cantera constants predate surviving issue/PR records. Where motivation cannot be established, it is stated as unknown rather than inferred. Cantera's original 1-D solver cites Kee, Coltrin, and Glarborg’s Chemically Reacting Flow (publisher record). Cantera line links are pinned to the source SHA. Tests are those identified in the audits; “none found” means no dedicated test was located.
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Flow unknown, temperature | Free/burner FD uses mass flux mdot; temperature is kK. | Velocity u, temperature K; continuity uses rho*u. | PREMIX and Zero-RK use mass flux (PREMIX, Zero-RK). | Cantera continuity; native Flames.jl. | Different; changes Jacobian couplings, bounds, and norm weights. | Flame initial-state/residual tests; no exact parity test found. |
| Unknowns and row order | T, Y₁…Yₖ, mdot; no trivial components. | U,V,T,Lambda,E,Uo,Y₁…Yₖ; trivial components have identity residual rows. | OpenSMOKE++ implementation. | Cantera offsets; native Flames.jl. | Different; bandwidth, pivot order, and norm denominator differ. | Layout/residual tests; no cross-code matrix test. |
| Fixed-temperature anchor | Nearest existing node to 0.75 T_in + 0.25 T_eq; no insertion. | May snap or insert the target node by interpolation, then relocates after regridding. | PREMIX accepts/inserts user location (source). | Cantera initialization, Sim1D insertion; native Flames.jl. | Different rule; same anchor on audited default grids only. | Default-grid fixtures; arbitrary-grid parity not found. |
| Row/variable scaling | Species rows scaled 1e-4; temperature uses kK and 1e-4 scaling. | Physical-unit residuals; step weights rtol*mean(abs(x))+atol. | TWOPNT family uses row scaling/componentwise tests (Zero-RK). | Cantera weighted norm; native Flames.jl. | Different; exact Newton step invariant, FP and residual stopping are not. | Residual tests; no saved-state cross-code norm fixture. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Convection stencil | Backward difference, assumes positive flow. | First-order upwind by velocity sign for species, temperature, enthalpy. | Ember sign-aware upwind (source); Zero-RK centered/upwind options (source). | Cantera stencil; native Flames.jl. History records a stability rationale; origin predates GitHub. | Different for nonpositive iterates; native flow bound usually keeps mdot positive. | No dedicated reversed-flow stencil test found. |
| Diffusion divergence/conduction | Centered face-flux differences. | Same centered divergence; equivalent two-face conduction form. | PREMIX/OpenSMOKE++ use face fluxes (PREMIX, OpenSMOKE++). | Cantera energy/species rows, diffusion; native Flames.jl. | Same math; FP operation order differs. | Flame residual/transport tests; no global lockstep claim. |
| Diffusion basis/correction velocity | Mole-fraction gradients; correction uses left-node Y_k. | Same gradient basis and left-node correction. | PREMIX/OpenSMOKE++ commonly use face-averaged mass fractions (PREMIX, OpenSMOKE++). | Cantera diffusion flux; native Flames.jl. | Identical formula in this mode. | Flame transport/flux tests; no dedicated symmetry test. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Full residual property refresh | Thermo/rates at nodes, transport at nodes/faces. | Same for full residual. | Public implementations vary: Cantera, Zero-RK. | Cantera update; native Flames.jl. | Identical sequence in audited mode. | Flame residual tests. |
| FD perturbation | Full FD; positive `h=1e-7*max( | x | , floor)` (T in kK). | One-sided `dx=1e-5 | x | +1e-10`, divided by representable increment. |
| Default Jacobian mode | FD path builds full FD Jacobian; analytic option is for conservative mode. | auto may use analytic species columns at interior nodes if available. | Zero-RK has banded FD and iterative options (source; Lapointe et al.). | Cantera auto/analytic fill; native Flames.jl. | Different unless caller selects Cantera FD; caller selection unknown. | Jacobian tests; mode-matched comparison open. |
| Frozen transport in Jacobian | Recomputes perturbed thermo/rates, reuses base transport. | Local Jacobian eval reuses transport; trial residual refreshes it. | Modified Newton/Broyden vary; OpenSMOKE++. | Cantera local eval; native Flames.jl. | Same frozen quantities in audited FD mode. | Jacobian/property tests; no lockstep test. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Damping schedule | Seven trials, factor sqrt(2), accept `s1<1 | | s1<s0`. | Same schedule and predicate. | TWOPNT halves ≤5 times and requires non-increasing max norm; Zero-RK may use no line search (TWOPNT, Zero-RK). | MultiNewton. Constants date to 2003; original rationale did not survive. Method reference: Kee et al. (Wiley). |
| Bounds | Small negative Y allowed; native T and positive bounded mdot. | T [200,6000] K, Y [-1e-7,1e5]; velocity unbounded. | PREMIX/OPPDIF differ; OpenSMOKE++ reflects at zero (PREMIX, OpenSMOKE++). | Cantera bounds, step bound; native Flames.jl. | Different; Cantera bound tightened in 2016; motivation/test not found. | Indirect flame coverage; no dedicated edge-bound test. |
| Norm weights/denominator | Weight uses component mean magnitude plus atol; denominator counts native unknowns. | Same weights; denominator counts all unknowns including trivial variables. | TWOPNT/Chemkin use componentwise max-like criteria (TWOPNT, Chemkin manual). | Cantera norm; native Flames.jl. | Different denominator; can shift decisions. | No saved-step cross-code norm fixture found. |
| Steady convergence/cap | Continues Newton after small correction; exits primarily on scaled residual <1e-8 with floor fallback; cap 35. | Accepted damped correction norm <1; no matching 35-step cap. | Other codes use their own scales (Zero-RK, OpenSMOKE++). | Cantera loop; native Flames.jl. | Different; can change fallback cadence. | Flame convergence tests; no single-step parity test. |
| Tolerances | Defaults match Cantera values; residual scaling differs. | rtol=1e-4; steady atol=1e-9, transient atol=1e-11. | PREMIX similar relative/absolute scale (source). | Cantera defaults; history says defaults loosened for typical convergence while retaining resolved results. | Values identical; stopping meaning differs. | Solver option and flame tests. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Hybrid path | Steady Newton, backward-Euler fallback, Newton retry; most cadence defaults match. | Same hybrid architecture. | PREMIX uses longer batches; OpenSMOKE++/Zero-RK premixed paths may start transient-first (PREMIX, OpenSMOKE++, Zero-RK). | SteadyStateSystem; hybrid lineage Grcar et al.. | Architecture/constants mostly same; steady-success and retry sequence differ. | Time-step/flame tests; decision-trace test not found. |
| Step size, batches, Jacobian age | dt=1e-5, batches of 10, growth 1.5 only if no new factorization, halve on failure, 500-step cap. | Same cadence; Jacobian age 20 and bounded forced reevaluations. | PREMIX has distinct batches/growth (source). | Cantera stepping; PR #1907 refactored; PR #2074 added timestep regridding/strategies. Earlier constants predate surviving issue records. | Core cadence same; regrid retry policy varies. | Cantera timestep-regrid tests; native indirect coverage. |
| Failure recovery | Separate clipped-species retry path. | Reduces dt; after repeated failures resetBadValues clips and renormalizes species. | Policies differ in Zero-RK, Ember, and PREMIX. | Cantera failure handling, Flow1D reset. | Different sequence; relevant near negative/trace species. | No dedicated native retry-sequence test found. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Refinement defaults | Ratio 3, slope .06, curve .12. | Ratio 10, slope .8, curve .8, value-range gate and midpoint insertion. | PREMIX/Zero-RK commonly use tighter gradient/curvature (PREMIX, Zero-RK). | Cantera criteria, defaults; native Flames.jl. | Different; grids/accuracy need separate comparison. | Cantera refine tests and native refinement tests. |
| Point changes and limits | May re-solve prune-only passes; checks proposed grid against max. | Stops when no additions; checks current count against limit. | PREMIX/OpenSMOKE++ surveyed paths are add-only (PREMIX, OpenSMOKE++). | Cantera refine loop; native Flames.jl. | Different termination/check timing; prune cases differ. | Cantera refine/max-grid tests; native refine tests. |
| Auto stages/domain | Native retry/final stages; free flame can expand domain outside auto. | Auto staged retries; free-flame edge-gradient check doubles domain in auto mode. | Ember adjusts domain for transient flame solution (source). | Cantera auto solve, domain check; native Flames.jl. | Different solve paths; comparisons must match driver. | Cantera auto/domain tests; native free-flame tests. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Flame bounds/recovery | Signed species in ordinary residual; clipping only on retry. | Newton allows Y to -1e-7; repeated timestep failure triggers clip/renormalize. | Zero-RK signed residual with Jacobian floors; OpenSMOKE++ reflects at zero (Zero-RK, OpenSMOKE++). | Cantera bounds, recovery; native Flames.jl. | Ordinary residual similar; recovery/bounds differ. | Edge tests should include 0, 1e-25, -1e-25, -1e-7; missing-species restart parity not found. |
| Point transport/thermo floors | Transport X floor 1e-20; thermo log floor 1e-300. | Same floors in audited ideal-gas paths. | Cantera transport source public. | MixTransport, IdealGasPhase; native Transport.jl, Thermo.jl. | Identical floors in these point paths. | Point tests; exact-zero tests not found. |
| Reactor kinetics composition | Ideal-gas reactor clips negative Y before concentrations; flame RHS stays signed. | Signed, unnormalized composition reaches thermo/kinetics. | Cantera reactor source public. | Cantera reactor; native Reactors.jl. | Different; creates a kink at zero and changes trace rates. | Reactor RHS tests; signed-state cross-code fixture not found. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Rate coverage/arithmetic | Exported Arrhenius, falloff, PLOG, Blowers–Masel, LinearBurke; some reverse/negative-state handling differs. | Broader native rate implementation. | OpenSMOKE++ detailed-kinetics framework (paper, code). | Cantera kinetics; native Kinetics.jl. | Different for unsupported formats, negative-state rules, arithmetic order. | Point tests by rate family; chemically activated/negative-input gaps remain. |
| Thermo polynomials/reference pressure | NASA7/NASA9/Shomate; arithmetic may differ; entropy reference shifted to 1 atm on load. | NASA polynomials and standard-state evaluation in thermo classes. | OpenSMOKE++ thermo code public. | Cantera NASA7, IdealGasPhase; native IdealGasThermo.jl. | Mostly equivalent equations; arithmetic, region, and reference-pressure details differ. | Thermo point tests; no blanket parity claim. |
| Mixture transport/pure state | Wilke rules and mixture-averaged diffusion; some pure-state fallback/sum details differ. | Same broad model with pure-species guards. | Zero-RK alternative source. | Cantera MixTransport, GasTransport; native Transport.jl. | Different pure-dominant fallback/floored sums; ordinary cases mostly same formulas. | Transport tests; pure/trace edge parity tests not found. |
| Choice | Arrhenius.jl (mode) | Cantera | Other public codes | Why / source | Status | Test that pins it |
|---|
| Reactor state and integrator | Ideal-gas state [Y;T]; example uses OrdinaryDiffEq QNDF; core accepts integrators. | Constant-volume state [m,V,T,Y]; CVODES BDF in audited network path. | OpenSMOKE++ framework (paper, code); Ember transient splitting (paper, code). | Cantera state, network integrator; native Reactors.jl, example. | Different state/integrator; error norms and counts are not directly comparable. | Validation uses nominal common tolerances; no same-integrator test. |
| RHS, energy, negative species | Species/energy equations algebraically equivalent for nonnegative ideal-gas states; negative Y clipped before kinetics. | Signed composition reaches kinetics; mass/volume variables are part of state. | OpenSMOKE++ framework paper (DOI). | Cantera RHS; native Reactors.jl. | Same algebra in ordinary states; negative species and integrated variables differ. | Reactor RHS/case tests; no negative-state cross-code fixture. |
| Equilibrium algorithm | One native method with its own initialization and bounded outer temperature solve. | auto dispatch tries ChemEquil, then VCS, then Gibbs minimization. | Cross-code equilibrium was outside the 1-D survey. | Cantera dispatch; native Equilibrium.jl. | Different algorithms/stopping criteria; no general equivalence claim. | Native equilibrium tests; Cantera's multiple paths complicate comparison. |
Publication records below are linked to DOI/publisher records and transcribed from DOI metadata. Code and PR links above evidence implementation; these papers provide algorithm lineage or software context.
@article{Grcar1988,
author={Grcar, Joseph F. and Kee, Robert J. and Smooke, Mitchell D. and Miller, James A.},
title={A hybrid {Newton}/time-integration procedure for the solution of steady, laminar, one-dimensional, premixed flames},
journal={Symposium (International) on Combustion}, publisher={Elsevier BV}, year={1988},
volume={21}, number={1}, pages={1773--1782}, doi={10.1016/S0082-0784(88)80411-9},
url={https://doi.org/10.1016/S0082-0784%2888%2980411-9}
}
@article{Cuoci2015,
author={Cuoci, A. and Frassoldati, A. and Faravelli, T. and Ranzi, E.},
title={{OpenSMOKE++}: An object-oriented framework for the numerical modeling of reactive systems with detailed kinetic mechanisms},
journal={Computer Physics Communications}, publisher={Elsevier BV}, year={2015}, volume={192}, pages={237--264},
doi={10.1016/j.cpc.2015.02.014}, url={https://doi.org/10.1016/j.cpc.2015.02.014}
}
@article{Long2018,
author={Long, Alan E. and Speth, Raymond L. and Green, William H.},
title={Ember: An open-source, transient solver for {1D} reacting flow using large kinetic models, applied to strained extinction},
journal={Combustion and Flame}, publisher={Elsevier BV}, year={2018}, volume={195}, pages={105--116},
doi={10.1016/j.combustflame.2018.05.001}, url={https://doi.org/10.1016/j.combustflame.2018.05.001}
}
@article{Lapointe2019,
author={Lapointe, Simon and Whitesides, Russell A. and McNenly, Matthew J.},
title={Sparse, iterative simulation methods for one-dimensional laminar flames},
journal={Combustion and Flame}, publisher={Elsevier BV}, year={2019}, volume={204}, pages={23--32},
doi={10.1016/j.combustflame.2019.02.030}, url={https://doi.org/10.1016/j.combustflame.2019.02.030}
}
@book{Kee2003,
author={Kee, Robert J. and Coltrin, Michael E. and Glarborg, Peter},
title={Chemically Reacting Flow: Theory and Practice}, publisher={Wiley}, year={2003},
isbn={9780471461296}, doi={10.1002/0471461296}, url={https://doi.org/10.1002/0471461296}
}