OpenHydro Bench
Compared with a pinned engine1D · mixedCandidate

Pump station switched by rules

Do pumps switch on and off at the same moments as in SWMM 5.2.4?

Test B-RTC-001
HydroCouple (2026)
Version 2.0.0
Right answer
A pinned reference engine · HydroCouple (2026)
Results
4 models · closest under 0.01 % off · see them ↓
Must
match peak depths within 2 % at every node
Sketch, not to scale.

The model file

Every engine runs this EPA SWMM 5 input file unchanged. Open it in EPA SWMM 5, or in any engine that reads the format, and you are running exactly what was scored.

On the map: click any element to see its line in the file and every engine's result there over time, or colour the network by how far each engine is from the reference.

Wet well PP_U433 against the rule thresholds (first 12 h, SWMM 5.2.4)024024681012Time (h)Wet-well depth (m)all pumps OFF ≤ 0.30 mpump 1 ON ≥ 1.78 mpump 2 ≥ 2.03 m
Pump flows as the rules switch them050100150200024681012Time (h)Flow (L/s)Pump 1 (U433_Psan_1_ou_2)Pump 2 (U433_Psan_1_et_2)Pump 3 (U433_Psan_1_et_2_et_3)
  • Pump 1 (U433_Psan_1_ou_2)
  • Pump 2 (U433_Psan_1_et_2)
  • Pump 3 (U433_Psan_1_et_2_et_3)

Each step is a rule firing. A candidate that evaluates the rules at different moments moves these steps, which shows up in pumped volume and peak timing.

What happens

A 90-node sewer with two pump stations whose pumps are switched by control rules on wet-well level; one pump switches 74 times in 36 hours.

Why it matters

Control rules decide overflows and energy use; a rule evaluated at a different moment changes both.

A good model must

  • match peak depths within 2 % at every node
  • match pumped volumes within 2 %
  • switch pumps within two minutes of SWMM

How models did

In rank order: by each model's percent difference from the right answer, the largest over the test's accuracy checks (lower is better; results within 10 % of each other share a rank). Mass error, timing and NSE are shown beside it, not folded in. Each model runs the same inputs.

RankModelDifferenceLargest difference inTimingRun time
1SWMM 5.1.15 previous release<0.01 %Peak depths0 s–
2OpenSWMM 6 vs SWMM 5.2.451 %Peak depths180 s–
3Hydra urban drainage90 %Peak depths101,460 s–
4OpenSWMM 6 finite volume3e4 %Volumes101,220 s–
SWMM 5.1.15
EPA SWMM 5.1.15, the release before 5.2: on the parity tests compared with SWMM 5.2.4, on the exact tests scored like any other engine
#1 under 0.01 % off

Settings: swmm5 (swmm-toolkit 0.10.0)

Peak depths
• 0 % off
Volumes
• 0 % off
Timing
· 0 s off
timing, reported beside the score, in seconds

Scored with method 3.0 · Score card: EPA SWMM 5.1.15

OpenSWMM 6
OpenSWMM Engine v6 (HydroCouple's SWMM 6, pre-release), compared with SWMM 5.2.4
#2 51 % off

Settings: openswmm (v6 engine, SWMM binary output)

Peak depths
• 51 % off
Volumes
• 5.1 % off
Timing
· 180 s off
timing, reported beside the score, in seconds

Pumps switch the same 74 times, but one node peaks 50 % higher than in SWMM 5.2.4, at a different time; worth a look by the OpenSWMM developers.

Scored with method 3.0 · Score card: OpenSWMM Engine 6.0.0a4.dev1

Hydra
Hydra 17 (NEER AI, Rust): its urban-drainage engine on the SWMM data model, run through its CLI with default settings
#3 90 % off

Settings: hydra CLI 4.1.1 (uds engine, SWMM-format binary output)

Peak depths
• 90 % off
Volumes
• 66 % off
Timing
· 101,460 s off
timing, reported beside the score, in seconds

Scored with method 3.0 · Score card: Hydra 17.0.0 urban drainage

OpenSWMM 6
OpenSWMM Engine v6 with its new explicit finite-volume routing (FLOW_ROUTING FV): one cell per conduit on the channel tests, its default cells per pipe on the drainage networks
#4 3e4 % off

Settings: openswmm (v6 engine, FLOW_ROUTING FV, SWMM binary output)

Peak depths
• 7,490 % off
Volumes
• 25,761 % off
Timing
· 101,220 s off
timing, reported beside the score, in seconds

Scored with method 3.0 · Score card: OpenSWMM Engine v6 finite volume (6.0.0a4.dev1)

Status of this test

Candidate. To become frozen it needs: reference reproduced by a second build; maintainer review recorded.

Technical details for reviewers Checks, reference, inputs, sources

Checks and why each limit was chosen

CheckDifference measured as a percentage ofLatestDifferenceWhy this check
peak_depth
relative_peak of h · in the score
already a percentage–Architecture parity band (±2 % peak) at every node, wet wells included.
link_volume
relative_volume of Q · in the score
already a percentage–Pumped and conveyed volume within ±2 % in every link: a rule that fires at the wrong level changes how much each pump moves.
peak_timing
timing_error of Q · timing, beside the score
not a percentage: reported in seconds–Four 30 s reporting steps; a rule evaluated at a different moment shifts pump-on times.

Second build of the reference. The official EPA SWMM 5.2.4 official win64 binaries, run on this input and scored against the reference: fail (Peak depths 3.7 %; Volumes 1.2 %; Timing 92,400 s). The two builds of the same version disagree beyond this test's limits.

Reference

SWMM 5.2.4, run on the test's own input.

Promotion checklist

Only frozen tests have fixed inputs and answers. This list is computed from the manifest and the published score cards; the rules are in the method.

  • ✓Data licence verifiedfor candidateUnlicense
  • ✓All inputs availablefor candidateall committed or fetched by SHA-256
  • ✓Reference (truth) availablefor candidatecommitted reference results
  • ✓Every tolerance justifiedfor candidateeach gating criterion has a rationale
  • ✓A published run passesfor frozen1 passing score card(s)
  • ✓Order of accuracy shownfor frozennot a verification case
  • ✗Reference reproduced by a second buildfor frozenthe official EPA build differs from the reference beyond tolerance
  • ✗Maintainer review recordedfor frozenno maintainer review recorded

Inputs

FileRoleFormatSHA-256Get it
inputs/network.inpnetworkinp6756016d98e6…Fetched by hash from source

About this test

Two pump stations (wet wells PP_U433, PP_U435) are run by level rules, for example:

RULE U433_R2
IF NODE PP_U433 DEPTH >= 1.778
AND NODE PP_U433 DEPTH < 2.032
AND PUMP U433_Psan_1_et_2 STATUS = OFF
AND PUMP U433_Psan_1_et_2_et_3 STATUS = OFF
THEN PUMP U433_Psan_1_ou_2 STATUS = ON

On SWMM 5.2.4 pump U433_Psan_1_ou_2 switches 74 times in the 36 h run, so a candidate that evaluates rules late, early or with different hysteresis shows up in pumped volumes and peak timing.

Source: HydroCouple openswmm.engine.benchmarks, epa/221-h-h-si-units-elements, commit 63eb8bc5b4e741c82195ed65c4d7d146b86da1cc (fetched by hash with python scripts/fetch_inputs.py B-RTC-001). Reference: EPA SWMM 5.2.4.

Known finding: build sensitivity

The cross-build job (scripts/run_swmm_self_parity.py) runs the official EPA SWMM 5.2.4 win64 binaries on this input and scores them against the reference (produced by the same 5.2.4 source compiled in swmm-toolkit 0.17.0). Both builds repeat bit-for-bit, but they disagree with each other beyond this case's tolerances: −3.7 % peak depth at Out_U435, and the Ref_U435 flow peak moves by 92,400 s because two near-equal pump-cycle peaks swap order. Depth-triggered pump rules amplify last-bit floating-point differences between compilers.

Consequences: the cross-build check for this case is informative, not gating; and a candidate that fails B-RTC-001 by a similar margin is not necessarily wrong. Whether to widen these tolerances, switch the timing metric to one that is robust to near-equal peaks, or score against both builds is an open decision for the maintainers.

Sources

Test B-RTC-001_pump_station_rules · version 2.0.0 · data licence Unlicense