Settings: swmm (the published Bellinge model, run dates set per event)
Scored with method 3.0 · Score card: EPA SWMM 5.2.4
Does a real sewer model, run as published, reproduce the water levels measured in eight storms?
The published Bellinge model with the dates of the 29 June 2012 storm set, as the suite ran it. It reads the rain-gauge file that comes with the model from DTU Data; the other seven storms differ only in their dates.
On the map: click any element to see its line in the file and every engine's result there over time.
The Bellinge combined sewer system in Odense, Denmark (about 1,000 manholes and pipes, with basins, pumps and weirs) has a published SWMM model and years of level-meter records. Each model runs that SWMM model unchanged, apart from its dates, on eight storms from 2011 to 2019, and its water levels are compared with seven level meters.
Field data is the final test of a drainage model: real rainfall, real pipes, real measurements. The published model is uncalibrated, so this test judges the model and the engine together. A miss here can come from the model's set-up as much as from the engine.
Measured level (blue) and each engine running the published model. The meter reads no lower than 11.18 m; the scorer reads the model the same way.
Measured level (blue) and each engine running the published model. The meter reads no lower than 14.14 m; the scorer reads the model the same way.
Measured level (blue) and each engine running the published model. The meter reads no lower than 33.32 m; the scorer reads the model the same way.
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. Compare them in the results viewer →
| Rank | Model | Difference | Largest difference in | NSE | Run time |
|---|---|---|---|---|---|
| 1= | EPA SWMM 5.2.4 dynamic wave | 30 % | Peak level | -0.488 | – |
| 1= | OpenSWMM 6 dynamic wave | 30 % | Peak level | -0.488 | – |
| 1= | Hydra urban drainage | 34 % | Peak level | -0.528 | – |
This is a validation of the published Bellinge model against its gauges, not a comparison of engines: the SWMM-family engines run the same model file and land within each other's build noise (two builds of EPA SWMM 5.2.4 from the same source differ by more than 5 cm in peak depth at 75 of the model's 1,020 nodes, as Bob Dickinson measured with his Bellinge Explorer, 17 October 2026). Field data is kept off the overall rating.
Settings: swmm (the published Bellinge model, run dates set per event)
Scored with method 3.0 · Score card: EPA SWMM 5.2.4
Settings: swmm (the published Bellinge model, run dates set per event)
Scored with method 3.0 · Score card: OpenSWMM Engine v6 dynamic wave (6.0.0a4.dev1)
Settings: swmm (the published Bellinge model, run dates set per event)
Scored with method 3.0 · Score card: Hydra urban drainage (17.0.0/4.1.1)
Candidate. To become frozen it needs: a published run passes; two independent codes pass; maintainer review recorded.
| Check | Difference measured as a percentage of | Latest | Difference | Why this check |
|---|---|---|---|---|
| level_nse NSE of wse · skill score, beside the score | not a percentage: reported as the NSE (1 is perfect) | – | Set before any run: Moriasi et al. (2007) 'satisfactory' band, NSE ≥ 0.5, for the median gauge record (a meter on one storm). A record where the meter moved less than three times its accuracy is not scored for NSE. | |
| peak_level peak_error of wse · in the score | of the median gauge's 0.97 m level rise in a storm | – | Set before any run: the ±0.1 m depth criterion for verifying sewer models against measurements (WaPUG 2002; CIWEM UDG 2017 Code of Practice), for the median gauge record. |
Measured data at reference/levels.parquet; availability: available.
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.
| File | Role | Format | SHA-256 | Get it |
|---|---|---|---|---|
inputs/7_SWMM.zip | network | zip | fe07d487925c… | Fetched by hash from source |
inputs/2_cleaned_data.zip | observations | zip | 0801435a0077… | Fetched by hash from source |
The real combined sewer system of Bellinge, Odense (Denmark). It covers 1.7 km² and has about 1,000 nodes and 1,000 links, with basins, pumps, weirs and control rules. Pedersen et al. (2021, ESSD 13, 4779–4798) published it with an EPA SWMM model and years of level-meter records.
| DTU item | Content | Licence | Used |
|---|---|---|---|
| 2 | Sensor data | CC BY 4.0 | the measured levels (reference/levels.parquet) |
| 3a | Rain gauge data | CC BY-NC 4.0 (non-commercial) | no |
| 3b | Radar and meteorological station | CC BY 4.0 | no (not needed) |
| 7 | Models (SWMM, MIKE URBAN) | CC BY 4.0 | the SWMM model and its rain-gauge file |
The case uses only CC BY items so commercial vendors can run it.
BellingeSWMM_v021_nopervious.inp from item 7 (SHA-256 of the zip in the manifest), run unchanged except for its run dates. scripts/run_bellinge.py writes each event's dates and a one-minute report step into a copy. The model's own rain-gauge file, rg_bellinge_Jun2010_Aug2021.dat, drives every run.| Meter | Model node |
|---|---|
| G71F04R_Level2 | G71F04R |
| G71F05R_LevelBasin | G71F05R |
| G71F05R_LevelInlet | G71F05R_skyl |
| G71F06R_LevelInlet | G71F06R |
| G71F68Y_LevelPS | G71F68Y |
| G73F010 | G73F010 |
| G80F13P_LevelPS | G80F13P |
Not used: G71F04R Level1 (the same basin as Level2, with fewer records), G71F05R_position (a gate) and G71F68Yp1 (a pump).
- Reference. reference/levels.parquet holds 138,154 one-minute levels, in m above DVR90, for each meter and storm with a whole record (90 % or more). Build it with scripts/bellinge.py extract and then scripts/bellinge.py reference.
- Floor. A meter does not read below its own floor, taken as the lowest level it recorded in any of the storms. The scorer reads the model's level the same way, as max(model, floor).
Both criteria were set before any run, from published standards rather than from a baseline. Both are judged on the median gauge record (one meter on one storm).
The published model is uncalibrated (ESSD paper §4), so this case judges the model and the engine together. A failure here can come from the model's set-up as much as from the engine; the parity comparison on the same model (the Bellinge tier on the parity page) isolates the engine.
EPA SWMM 5.2.4, OpenSWMM 6 (dynamic wave) and Hydra 17 all fail, by almost the same amounts. The median NSE is −0.49, −0.49 and −0.53, and the median peak error is 0.30, 0.30 and 0.33 m. The three engines agree with each other far better than any of them agrees with the meters, so the misses come from the published model, not from the engines.
Median over the eight storms, EPA SWMM 5.2.4:
| Meter | NSE | Peak error |
|---|---|---|
| G71F68Y_LevelPS (pump sump) | 0.81 | −0.04 m |
| G73F010 (one storm) | 0.45 | −0.02 m |
| G71F06R_LevelInlet | −0.52 | +0.05 m |
| G71F05R_LevelInlet | −0.83 | −0.26 m |
| G71F04R_Level2 (basin) | −0.54 | −1.21 m |
| G71F05R_LevelBasin (basin) | −0.41 | −2.56 m |
| G80F13P_LevelPS (pump sump) | −1.79 | +0.09 m |
The two basins fill 1.2–2.6 m less than measured in every storm. The published model is the nopervious variant, which leaves out runoff from pervious surfaces, and that is the likeliest cause. Calibrating the model is outside this case, which runs the model as published.
Test A1F-100_bellinge_urban_drainage · version 1.0.0 · data licence CC-BY-4.0