Does the model form the right bore when a flood runs into standing water?
Test A1F-011 Stoker (1957) Version 1.0.0
Press play, or drag the slider, to watch the exact answer unfold. Models are compared at the end, t = 30 s.
What happens
A 1-metre reservoir is released into a channel already holding 10 cm of water. A steep bore (a moving step in the water surface) runs downstream while a smooth dip runs back upstream.
Why it matters
Real floods rarely meet bone-dry ground. The height and speed of the bore decide how hard the flood hits whatever is downstream.
A good model must
keep the average depth error under 5 cm after 30 s
neither lose nor create water
get steadily more accurate on finer grids
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 on 4 grids, from 10 m down to 1.25 m cells; the checks are scored on the 1.25 m grid, and each card lists the error on every grid. Compare them in the results viewer →
Basilisk (Popinet, basilisk.fr), its second-order well-balanced Saint-Venant solver on a uniform Cartesian grid with its defaults; Manning friction added as the usual semi-implicit term (it has none built in)
#1 0.047 % off
Rate the error shrinks on finer grids: 0.98 (90 % range 0.94 to 1); the method's expected rate is 0.8 or more
Run time, finest grid: 0.03 s· Intel(R) Xeon(R) 6973P-C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: basilisk saint-venant.h (uniform Cartesian grid, defaults; a C program per test, generated by scripts/run_basilisk.py)
Average depth error
• 0.26 mm off
0.047 % of the exact solution's mean depth, 0.550 m
The script writes a small Basilisk C program for the test (kept in the model files below) and compiles it with qcc.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
Demo 1D
Worked example that ships with the suite: plain, well-understood schemes
#2 0.056 % off
Rate the error shrinks on finer grids: 0.96 (90 % range 0.79 to 1.1); the method's expected rate is 0.8 or more
Average depth error
• 0.31 mm off
0.056 % of the exact solution's mean depth, 0.550 m
The model files for this run will be published with its next run.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
ANUGA
ANUGA 4.0.1 (Geoscience Australia / ANU), default settings on a triangular mesh
#3 0.07 % off
Rate the error shrinks on finer grids: 0.72 (90 % range 0.03 to 1.4); the method's expected rate is 0.8 or more
Run time, finest grid: 3.3 s· AMD EPYC 7763 64-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: anuga (rectangular_cross mesh, defaults, sampled at cell centres)
Average depth error
• 0.39 mm off
0.07 % of the exact solution's mean depth, 0.550 m
The model files for this run will be published with its next run.
ANUGA builds its mesh and boundaries in Python: the script is the model.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
GeoClaw
GeoClaw 5.9.2 (Clawpack), with its stock example's settings on a uniform grid
#4 0.092 % off
Rate the error shrinks on finer grids: 0.83 (90 % range 0.49 to 1.2); the method's expected rate is 0.8 or more
Run time, finest grid: 1.1 s· AMD EPYC 9V74 80-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: geoclaw (uniform grid, stock example settings)
Average depth error
• 0.51 mm off
0.092 % of the exact solution's mean depth, 0.550 m
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
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
#5= 0.18 % off
Rate the error shrinks on finer grids: 0.87 (90 % range 0.79 to 0.95); the method's expected rate is 0.8 or more
Run time, finest grid: 0.43 s· INTEL(R) XEON(R) PLATINUM 8573C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: swmm (FV routing, conduit per grid cell)
Average depth error
• 0.99 mm off
0.18 % of the exact solution's mean depth, 0.550 m
reported, not counted · the checks above are scored on the 1.25 m grid
Improves with finer grids
· rate 0.87 (90 % range 0.79 to 0.95)
reported, not counted · the scheme's design order is 1
OpenSWMM 6's new finite-volume routing is 1 mm from the exact answer where SWMM's dynamic wave is 37 mm off. Its convergence rate is 0.87 (90 % range 0.79 to 0.95), close to the design order of 1.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
TELEMAC-2D
openTELEMAC-2D 9.1.1, run with its default finite-volume settings
#7= 0.22 % off
Rate the error shrinks on finer grids: 0.75 (90 % range 0.72 to 0.78); the method's expected rate is 0.8 or more
Run time, finest grid: 7.7 s· AMD EPYC 7763 64-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: telemac2d (Selafin, centreline nodes)
Average depth error
• 1.2 mm off
0.22 % of the exact solution's mean depth, 0.550 m
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HydroNet
HydroNet (Penn State) — its differentiable Roe finite-volume solver (Heun RK2, CFL 0.3), the engine inside its FVM-PINN
#9 0.26 % off
Rate the error shrinks on finer grids: 0.7 (90 % range 0.68 to 0.72); the method's expected rate is 0.8 or more
Run time, finest grid: 1.5 s· AMD EPYC 7763 64-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: hydronet (fvm; HydroNet dam-break example settings, CFL 0.3; h_dry 0.0001 m)
Average depth error
• 1.4 mm off
0.26 % of the exact solution's mean depth, 0.550 m
reported, not counted · the checks above are scored on the 1.25 m grid
Improves with finer grids
· rate 0.70 (90 % range 0.68 to 0.72)
reported, not counted · the scheme's design order is 1
Into 10 cm of water the dam break runs normally: depth error 1.4 mm and mass 0.016 %, but the error falls at a rate of 0.70 (90 % range 0.68 to 0.72; minimum 0.8).
The model files for this run will be published with its next run.
HydroNet's mesh and network are built in Python: the script is the model.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HEC-RAS 7.0
HEC-RAS 7.0.1 (US Army Corps of Engineers), built and run headless with its default settings; in 2D, its default full shallow-water option (SWE-ELM)
#10= 0.9 % off
Rate the error shrinks on finer grids: 0.17 (90 % range 0.072 to 0.27); the method's expected rate is 0.8 or more
Run time, finest grid: 19.6 s· AMD EPYC 9V45 96-Core Processor, 2 cores, 16 GB, Windows 2025Server (GitHub Actions (github-hosted, win25-vs2026))
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HEC-RAS 6.6
HEC-RAS 6.6, the release before 7.0, run the same way (1D, and 2D with its default SWE-ELM): kept so a change between versions shows
#10= 0.9 % off
Rate the error shrinks on finer grids: 0.17 (90 % range 0.072 to 0.27); the method's expected rate is 0.8 or more
Run time, finest grid: 23.5 s· Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz, 2 cores, 16 GB, Windows 2025Server (GitHub Actions (github-hosted, win25-vs2026))
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HEC-RAS 7.0
HEC-RAS 7.0.1 2D with its Eulerian shallow-water option (SWE-EM), which HEC recommends for dam breaks
#12= 1.4 % off
Rate the error shrinks on finer grids: -0.19 (90 % range -0.3 to -0.073); the method's expected rate is 0.8 or more
Run time, finest grid: 19.3 s· AMD EPYC 9V45 96-Core Processor, 2 cores, 16 GB, Windows 2025Server (GitHub Actions (github-hosted, win25-vs2026))
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HEC-RAS 6.6
HEC-RAS 6.6 2D with its Eulerian shallow-water option (SWE-EM), the release before 7.0
#12= 1.4 % off
Rate the error shrinks on finer grids: -0.19 (90 % range -0.3 to -0.073); the method's expected rate is 0.8 or more
Run time, finest grid: 23.1 s· Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz, 2 cores, 16 GB, Windows 2025Server (GitHub Actions (github-hosted, win25-vs2026))
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
Landlab
Landlab 2.11 (CSDMS), its OverlandFlow component: the local-inertial 2D flood scheme of de Almeida et al. (2012), written independently in NumPy, with its defaults
#14= 3.1 % off
Rate the error shrinks on finer grids: 0.015 (90 % range -0.0082 to 0.039); the method's expected rate is 0.8 or more
Run time, finest grid: 0.08 s· AMD EPYC 7763 64-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: landlab.components.OverlandFlow (local inertial, defaults; a node per cell centre)
The model files for this run will be published with its next run.
Landlab models are built in Python: the script is the model.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
LISFLOOD-FP ACC
LISFLOOD-FP 8.3, the local-inertia solver it is best known for; it leaves out the advection term
#14= 3.2 % off
Rate the error shrinks on finer grids: 0.06 (90 % range -0.017 to 0.14); the method's expected rate is 0.8 or more
Run time, finest grid: 0.06 s· AMD EPYC 7763 64-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
Hydra
Hydra 17 (NEER AI, Rust): its urban-drainage engine on the SWMM data model, run through its CLI with default settings
#16 3.8 % off
Rate the error shrinks on finer grids: -0.25 (90 % range -0.52 to 0.011); the method's expected rate is 0.8 or more
Run time, finest grid: 3.9 s· INTEL(R) XEON(R) PLATINUM 8573C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: swmm (DYNWAVE routing, conduit per grid cell)
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
OpenSWMM 6
OpenSWMM Engine v6 (HydroCouple's SWMM 6, pre-release) with dynamic-wave routing
#17= 6.7 % off
Rate the error shrinks on finer grids: -0.25 (90 % range -2 to 1.5); the method's expected rate is 0.8 or more
Run time, finest grid: 4.1 s· INTEL(R) XEON(R) PLATINUM 8573C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: swmm (DYNWAVE routing, conduit per grid cell)
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
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
#17= 6.7 % off
Rate the error shrinks on finer grids: -0.25 (90 % range -2 to 1.5); the method's expected rate is 0.8 or more
Run time, finest grid: 4.0 s· INTEL(R) XEON(R) PLATINUM 8573C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: swmm (DYNWAVE routing, conduit per grid cell)
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
EPA SWMM 5.2.4
EPA SWMM 5.2.4 with dynamic-wave routing; on the channel tests, the channel is written as one conduit per grid cell
#17= 6.7 % off
Rate the error shrinks on finer grids: -0.25 (90 % range -2 to 1.5); the method's expected rate is 0.8 or more
Run time, finest grid: 3.9 s· INTEL(R) XEON(R) PLATINUM 8573C, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Settings: swmm (DYNWAVE routing, conduit per grid cell)
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
HydroNet
HydroNet's FVM-PINN neural network, trained per grid with the recipe of its own dam-break example (64×5 network, 5000 Adam epochs)
#20 24 % off
Rate the error shrinks on finer grids: -0.12 (90 % range -0.23 to -0.0048); the method's expected rate is 0.8 or more
Settings: hydronet (pinn; HydroNet dam-break example settings, 5000 Adam epochs; h_dry 0.0001 m)
reported, not counted · the checks above are scored on the 1.25 m grid
Improves with finer grids
· rate −0.12 (90 % range −0.23 to −0.00)
reported, not counted · the scheme's design order is 1
The trained network smears the bore and the rarefaction: average depth error 12.6 cm, 4.5 % of the water lost, and no improvement on finer grids. Trained with the recipe of HydroNet's own dam-break example, which on its own 20 m, 1 s case gives an RMS error of 6 cm on a 2 m dam (3 %); this case is 2 km over 30 s.
The model files for this run will be published with its next run.
HydroNet's mesh and network are built in Python: the script is the model.
The test itself (inputs, exact answer, checks): A1F-011.zip. Check the score card with benchmark1d2d verify-card: its signature by the suite's public development key shows the card has not changed since it was written, not who wrote it.
Not run yet: TUFLOW, MIKE 21, Iber, BASEMENT, Delft3D FM
Riemann dam-break problem with left depth \(h_l = 1\,\mathrm{m}\), right depth
\(h_r = 0.1\,\mathrm{m}\), both initially at rest. The exact inviscid solution
(Stoker, 1957) comprises a left rarefaction, a constant intermediate state
\((h^*, u^*)\), and a right-going shock. Generator:
references.stoker.depth_velocity.
Citation
Stoker, J. J. (1957). Water Waves: The Mathematical Theory with Applications.
Interscience, New York. ISBN 978-0-471-57034-9 (Wiley Classics Library reprint).
Pitfalls
Shock smearing dominates L1(\(h\)); observed order near 1 is expected for
first-order Godunov schemes even when the rarefaction is well resolved.
Incorrect intermediate-state solvers or approximate Riemann solvers with
large entropy glitches can shift the shock speed.
Keep Courant number fixed across refinement (fixed_courant: 0.5).
Do not treat this as a dry-bed case: \(h_r > 0\) removes the wet/dry front
pathology of A1F-010.
Sources
Stoker, J. J. (1957). Water Waves: The Mathematical Theory with Applications.
Test A1F-011_stoker_wet_bed_dambreak · version 1.0.0 · data licence analytic-public