Skip to content

aeolus1d

aeolus1d is a 1D compressible-Euler pipe-network solver designed for engine intake / exhaust / fuel-rail simulation, refrigerant / cryogenic / CO2 pipework, and chemistry-coupled combustion / catalysis benches. Numba-JIT inner kernels run within ~3× of hand-tuned Fortran on uniform-mesh cases.

Headline features

Solver core

  • HLLC flux + 1st-order Godunov, MUSCL (van-Leer / minmod), or MP5 (Suresh-Huynh, 5th order) reconstruction
  • SSP-RK2 / SSP-RK3 explicit time integration plus Implicit Euler / BDF2 / Radau IIA(3) implicit solvers (Phases I-1 → I-9) with block-tridiagonal Newton, adaptive Δt, Picard outer iteration on network coupling (Phase I-Y), and closed-form analytic Jacobians for every shipped closure kind (Phases B16 → B22 — friction, heat, porous, all kinds × ideal/real-gas combinations)
  • Quasi-1D Euler with variable area, friction (Darcy-Weisbach + Colebrook), wall heat transfer, Darcy-Forchheimer porous (constant μ + Sutherland μ(T)), and a two-phase catalyst with Nusselt h·a_v·(T_s − T_g) coupling
  • Real-gas EOS: ideal, Redlich-Kwong, Peng-Robinson, and CoolProp- backed tabulated lookup. Plumbed through the HLLC kernel + the network timeloop's MUSCL path; closed-form first AND second-derivative Jacobian helpers (Phase B20) for the cubic EOS Newton path
  • Network mode: arbitrary pipes coupled through 0-D volumes, with plenum / Corberán-CP+h / Extended-Helmholtz-Resonator port BCs, and a Phase-23 LODI characteristic port BC for non-reflecting outflows
  • Strang-split chemistry: scipy LSODA per cell, or a hand-tuned Bader-Deuflhard semi-implicit Bulirsch-Stoer solver inside a Numba @njit kernel

Components

  • Reciprocating cylinders with slider-crank kinematics, Wiebe combustion (TOML-exposed via [cylinder.combustion]), two-zone burnt / unburnt diagnostic with per-zone γ tracking, continuous lift schedules on every port, Livengood-Wu knock prediction + closed-loop θ_spark retard controller (TOML-exposed via the flat knock_* fields)
  • Quasi-steady map-driven compressors / turbines coupled through a shaft-inertia ODE; 3-D TurboMap (vane_open axis) for VGT; bypass_open actuator on Turbine for wastegate use; sequential / twin-turbo topology template (60_twin_sequential_turbo.toml); surge / choke / idle / backflow regime diagnostics on Compressor; learned-NN port-state and turbo-map surrogates via the py_junction_bc / py_turbo_map seams
  • Aftertreatment depth: DOC (with optional sulfate-poisoning + active-regen via DOCSulfurController), DPF (passive + active regen with closed-loop heater PI), SCR, SCRF, two-stage SCR, urea-water injector with HNCO hydrolysis, TWC (Voltz-Morgan- Liederman 3-pathway and Brinkmeier 11-reaction with Ce O₂ storage, plus opt-in passive-SCR NH₃ generation + C₃H₆ oxidation channels)
  • Closed-loop controllers (aeolus1d.control): BoostController (VGT vane → manifold p), WastegateController (sign-inverted PI on bypass_open), DPFHeaterController (heater power → cake T), DOCSulfurController (lumped sulfate storage / reduction integrator). All velocity-form PI; pluggable as on_step= callbacks or wired via [[controller]] blocks in TOML
  • Variable-γ stack: cell-averaged scalar, per-cell γ in the HLLC kernel, and per-cell γ in MUSCL / MP5 reconstruction

Tooling

  • TOML case format with full schema validation; HDF5 output
  • Python-API access to every internal field for custom integrators, optimisation loops, and ML closures
  • Visual editor + post-processor (aeolus1d_gui): drag-and-drop palette, auto-generated inspector forms, run-as-subprocess controller, and a network-view that auto-loads HDF5 traces into a tube-coloured 3D scene
  • ~4600 unit + integration tests, ruff-clean, 212 bundled example cases + matching plot scripts under examples/, plus a benchmark suite (examples/benchmarks/) of canonical literature cases with closed-form pass criteria

Where to next