Reports
Every score card is canonical JSON with a SHA-256 content hash, so any change to a published result is detectable. Cards are also Ed25519-signed; the demo runs below use a development key published in the repository, so their signatures show integrity, not authorship. Certification runs will be signed with a key held by the maintainers.
Score cards
| Case | Solver | Result | Claims | Observed order | Content hash | File |
|---|---|---|---|---|---|---|
| A1P-001 Darcy–Weisbach single pipe | EPA EPANET 2.2 | Pass | A-V | – | b457b0b2e5… | JSON |
| A1P-010 Todini multi-loop network | EPA EPANET 2.2 | Pass | A-V | – | 67039e08cc… | JSON |
| A1P-020 Joukowsky instant valve closure | demo | Pass | A-V | 0.493 | bdddd3b78e… | JSON |
| A1P-030 Advection–dispersion tracer (Ogata–Banks) | EPA EPANET 2.2 | Pass | – | -0.00164 | 149a730590… | JSON |
| A1F-001 MacDonald M1 subcritical backwater | demo | Pass | A-V | 1.992 | af6d510ff9… | JSON |
| A1F-010 Ritter dry-bed dam break | demo | Pass | A-V | 0.946 | cc48e0d56e… | JSON |
| A1F-011 Stoker wet-bed dam break | demo | Pass | – | 0.947 | 1bdb48df0f… | JSON |
| A1F-020 Bélanger hydraulic jump | demo | Pass | A-V | 1 | 4192b6c917… | JSON |
| A2A-001 Thacker parabolic bowl | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | A-V | 0.909 | ce20ee1fdf… | JSON |
| A2A-010 MacDonald 2D manufactured channel | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | A-V | 1.021 | c7e1369e9f… | JSON |
| A2A-020 Oblique hydraulic jump | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | – | 0.907 | a8d3ef0297… | JSON |
| A2C-EA1 EA Test 1 — flooding a disconnected water body | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | A-C | – | 5ac3873ad9… | JSON |
| A2C-EA2 EA Test 2 — filling of floodplain depressions | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | A-C | – | a742f7453c… | JSON |
| A2C-EA4 EA Test 4 — speed of flood propagation over an extended floodplain | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) at 10 m (spec alternative resolution) | Pass | A-C | – | f033a69034… | JSON |
| A2C-EA5 EA Test 5 — valley flooding | demo-swe2d (first-order FV, HLL + hydrostatic reconstruction) | Pass | A-C | – | 9df94b0c73… | JSON |
| B-EPANET-001 EPANET Net1 parity against EPANET 2.2 | WNTR 1.5.0 WNTRSimulator | Pass | B-1% | – | ba29ba26d3… | JSON |
| B-EXTRAN-001 EXTRAN Manual Example 1: parity against SWMM 5.2.4 | OpenSWMM Engine v6 finite volume (6.0.0a4.dev1) | Fail | – | – | 0d58715798… | JSON |
| B-RTC-001 Control-rule parity: pump stations switched by wet-well level | OpenSWMM Engine v6 finite volume (6.0.0a4.dev1) | Fail | – | – | 951d742e0a… | JSON |
Download every score card (.zip). Check one with benchmark1d2d verify-card path/to/card.json.
Second build of the reference engine
The official EPA SWMM 5.2.4 Windows binaries run on each SWMM catalog input and are scored against the reference built from the same source in swmm-toolkit. Agreement shows a parity reference does not depend on the compiler.
| Case | Build | Result | Worst element per criterion |
|---|---|---|---|
| B-EXTRAN-001 | EPA SWMM 5.2.4 official win64 | Pass | peak_depth 0 %; volume 0 % |
| B-RTC-001 | EPA SWMM 5.2.4 official win64 | Fail | peak_depth -3.689 %; link_volume 1.235 %; peak_timing -92,400 s |
Audit log
End-to-end reviews found the following defects. Each is fixed, covered by tests, and recorded here because earlier results published from this repository were affected.
Second review, 14 October 2026
Six exact-solution cases had never been scored, and their specifications could not be met
Found: Darcy–Weisbach, Todini network, Ogata–Banks tracer, Bélanger jump, MacDonald 2D and oblique jump had references but no runs. The pipe cases asked for grid convergence of a steady closed-form solution, and their "1 %" tolerances were compared against absolute errors in pascals.
Now: Each case is re-specified for its physics: relative norms when a tolerance is in %, a head-loss metric, element-keyed network references, and "convergence not applicable" where nothing is discretised. EPA EPANET 2.2 passes both pipe cases (head loss 0.60 % high, the Swamee–Jain offset theory predicts); new demo solvers pass the tracer (order 1.67), the jump (1.00), MacDonald 2D (1.02) and the oblique jump (0.91).
The MacDonald 2D reference was not a solution of the shallow-water equations
Found: It held the free surface flat while water flowed at 0.2 m²/s without friction, which momentum forbids; the module's docstring admitted that a solver copying the field would pass.
Now: Rebuilt by MacDonald's method: A1F-001's profile on a 2D grid with Manning friction and a bed constructed so the steady equations hold exactly (momentum residual tested). Case version 2.0.0.
The oblique-jump reference used the wrong jump relation and the wrong side
Found: It solved the gas-dynamics θ–β–M relation (jump at 34.0° instead of the shallow-water 39.6° for Fr₁ = 2.5, θ = 15°) and labelled the region between wall and jump as upstream.
Now: Rewritten from the exact shallow-water Rankine–Hugoniot conditions, with tests for mass, normal momentum and tangential velocity across the jump. Case version 2.0.0.
The Joukowsky "continuity" check measured front smearing, not mass
Found: Mean |u| where p exceeds half the rise grows with the smeared zone, so accurate first-order schemes failed (1.87 %) while a non-conserving sharp scheme could pass.
Now: Replaced by an exact storage balance: the packed volume ∫Δp dx must equal ρa²V₀t. The method-of-characteristics demo conserves it to round-off. Case version 3.0.0.
Two builds of SWMM 5.2.4 disagree on the control-rule case
Found: The official win64 binaries and the swmm-toolkit build match EXTRAN Example 1 exactly, but on B-RTC-001 differ by −3.7 % peak depth and move a pump-cycle peak by 92,400 s.
Now: Reported every run by the cross-build job; B-RTC-001 cannot be frozen until its tolerances or timing metric are revised (decision recorded in the case README).
The PR corpus tier tested one collection only
Found: All 38 PR-tier models were legacy EXTRAN examples, on which SWMM 5.1.15 and 5.2.4 give bit-identical output, so the gate could not see most engine changes.
Now: The PR tier is now 40 models picked to cover feature tags (9 collections, ≥ 5 control-rule models). A corpus parity runner scores any SWMM build against 5.2.4 across a tier; a self-check requires exactly zero against itself on every PR run.
Nothing said how a case becomes frozen
Found: Only frozen cases count, but there was no rule for getting there, so no case could ever be frozen on evidence.
Now: Eight promotion rules, seven computed from the manifest and score cards; every case page shows its checklist and the catalog lists what each case still needs.
First review, 13 October 2026
Track B parity compared results with themselves
Found: Every non-analytic case (all of Track B, every measured case) was scored by comparing the solver's output with itself, so any output passed and earned a B-1 % claim.
Now: Parity now compares per element against the pinned engine's reference results; a case without its reference is not scored rather than passed. Regression tests cover pass, perturbed-fail and missing-reference.
Error norms inflated every observed order by one
Found: L1 was computed as mean(|e|) × dx, adding a power of dx; reported orders were +1 (L1) and +0.5 (L2) too high.
Now: Norms are domain-normalised. True orders: Ritter 0.95, Stoker 0.95, MacDonald 1.99, Joukowsky 0.49.
Two of four 1D 'passes' never solved anything
Found: The demo MacDonald and Joukowsky solvers returned the analytical solution; zero error was then reported as order 1.0 and passed.
Now: Real solvers: Heun integration of the gradually-varied-flow equation and a method-of-characteristics water-hammer solver. Convergence now refuses round-off errors on every mesh.
The Thacker reference violated mass conservation
Found: The bowl solution used ω = √(8gh₀)/L and omitted a cos² term; continuity residual was 83 % of ∂h/∂t, so every correct solver would fail.
Now: Corrected solution (ω = √(2gh₀)/L) with pointwise PDE-residual tests. A real 2D finite-volume solver now passes with order 0.91.
The Joukowsky convergence target was unreachable
Found: A minimum order of 0.8 cannot be met by any first-order fixed-grid scheme on a linear discontinuity (theory gives 0.5).
Now: Target set from theory to 0.5 / 0.4 minimum; case version bumped to 2.0.0 because scores are not comparable.
EA Tests 1, 2, 4, 5 were filed as laboratory validation
Found: These are code inter-comparison tests with no measured truth; inputs were empty placeholders.
Now: Reclassified as A2C code inter-comparison with real inputs from the official archive (by hash) and objective expected states: settled pond level and mass conservation.
Placeholder and mis-licensed inputs
Found: Most inputs were 0-byte files; Weber, Bergant and Rubinato data were labelled Unlicense; Bellinge rain-gauge data is CC BY-NC.
Now: Real case definitions or explicit pending inputs that block promotion; journal-only data marked TBD-confirm; the CC BY-NC item is excluded.
Two Track B cases did not test what they claimed
Found: B-EXTRAN-001 was a 2-conduit synthetic network presented as EXTRAN Example 1; in B-RTC-001 the rule's condition never changed, so no control switch was ever exercised.
Now: B-EXTRAN-001 now runs the real EXTRAN Example 1; B-RTC-001 is a pump-station network whose rules switch one pump 74 times in 36 h.
Gauges on cell faces mixed two cells
Found: A probe exactly between cells took depth from one cell and bed from another, producing ±4 cm level errors in a flat pond.
Now: Ties resolve to a single cell; regression test added.
The PR tier contained models that cannot serve as references
Found: 11 of its 49 corpus models were unfit: 4 do not run on SWMM 5.2.4 (input errors) and 7 run with continuity errors of 6.6 % to 100 %. The PR gate could never have passed, and agreeing with a non-conserving reference proves nothing.
Now: A full census runs every corpus model on SWMM 5.2.4; tiers admit only models that run cleanly with |continuity| ≤ 5 %. The PR tier is now 38 corpus models (7 with control rules) plus the 3 catalog cases.
Signatures implied authorship
Found: All published cards were signed with development keys hard-coded in the repository, and the documented verify command checked manifests, not cards.
Now: benchmark1d2d verify-card checks the content hash and says when a card carries a public development key; the site no longer presents those signatures as proof of origin.
Every pass was labelled A-V
Found: Validation and parity passes received verification or fixed B-1 % claims.
Now: Claims follow the case class (A-V, A-C, A-L, A-F) and the gating tolerance (B-x %).