Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

epanet-rs 0.2.3 reconnaissance

Date: 2026-07-30. This gate was completed against the exact source selected by Cargo.lock, before the tutorial driver was implemented.

Required surfaceResultConfirming API or decision
Stepwise extended-period simulationyesSimulation::initialize_hydraulics, run_hydraulics, next_hydraulic_timestep, and public time
Pump status and relative speedyesindependent candidate state in SolverState::statuses and settings
PRV setpointyesValveType::PRV; settings are pressure in internal feet
Heads, flows and delivered demandyespublic SolverState vectors
Velocityderivedpipe flow divided by the pipe’s circular area
Tank levelderivedtank head minus tank elevation
Typed hydraulic failureyesSolverError; MaxIterations does not carry a usable trial-limited result
Pressure-driven demandyesDemandModel::PDA, minimum/required pressure and exponent
EPANET ENERGY reportnoENERGY is listed as unsupported; the tutorial integrates ρgQH/η explicitly
RULESnothe generated network has no CONTROLS or RULES; one tested Rust function owns precedence
LEAKAGEnothe MO formulation uses an “excess-pressure proxy”, not invented leakage physics
Water qualitynooutside this tutorial’s scope
.inp input/outputyesNetwork::from_file and io::inp::write_inp
Candidate thread safetyyescompile-time Send + Sync assertions for Network and Simulation
Internal parallel EPSconditionalonly legal without tanks and pressure controls; measured on a separate legal variant

Unit boundary

The high-level result collector converts back to user units, but public stepwise SolverState remains in EPANET’s internal feet and cubic-feet-per- second representation. driver.rs therefore has one explicit conversion boundary:

head/pressure: ft × 0.3048
flow:          ft³/s × 0.028316846592
PRV pressure:  m ÷ 0.3048 before assigning state.settings

Pump relative speed is dimensionless.

Consequences

  • The pure-Rust backend is sufficient; no C binding or native build dependency is required.
  • A solver failure is a typed finite constraint. Failed steps never produce fabricated pressure or energy values.
  • Power arithmetic is checked against a checked-in offline oracle. Trace replay separately verifies stored-power accumulation; it is not described as an independent power calculation.
  • Numerical validation in this tutorial is internal. It does not claim upstream EPA EPANET equivalence.

Lockfile licence result

epanet-rs itself is dual MIT/Apache-2.0. Its enabled simplelog feature pulls in unmodified paris = 1.5.15 under MPL-2.0. The tutorial records a crate-specific cargo-deny exception and a DEPENDENCY_NOTICE.md; MPL-2.0 is not generally allowed.