OpenHydro Bench
Exact answer known1D · free surfaceCandidate

Standing hydraulic jump

Does the model hold a hydraulic jump in the right place, at the right height?

Test A1F-020
Bélanger (1828)
Version 1.0.0

Hidden at first because they are far off the exact answer: EPA SWMM 5.2.4, OpenSWMM 6 dynamic wave, OpenSWMM 6 finite volume, Hydra, SWMM 5.1.15. Click a name to show it.

What happens

Fast, shallow water (20 cm deep) meets slow, deep water (61 cm) and jumps abruptly between the two. With these exact depths the jump stands still at 50 m.

Why it matters

Jumps form below weirs, spillways and culverts, where they decide scour and the size of energy dissipators. A jump that drifts means the wrong design.

A good model must

  • match the depth profile within 1 %
  • keep the jump where it should be (no drift)
  • 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 2 m down to 0.25 m cells; the checks are scored on the 0.25 m grid, and each card lists the error on every grid. Compare them in the results viewer →

RankModelDifferenceLargest difference inMass errorRun time
1TELEMAC-2D openTELEMAC 9.10.049 %Depth profile0.046 %23.1 s
2Basilisk Saint-Venant0.093 %Depth profile0.052 %0.29 s
3Demo 1D suite example0.15 %Depth profile0.061 %–
4ANUGA 4.0.10.28 %Depth profile0.28 %27.6 s
5OpenSWMM 6 finite volume50 %Depth profile48 %3.3 s
6Hydra urban drainage71 %Depth profile13 %25.1 s
7=OpenSWMM 6 dynamic wave99 %Depth profile34 %6.9 s
7=SWMM 5.1.15 previous release102 %Depth profile29 %6.3 s
7=EPA SWMM 5.2.4 dynamic wave102 %Depth profile29 %6.4 s
TELEMAC-2D
openTELEMAC-2D 9.1.1, run with its default finite-volume settings
#1 0.049 % off

Rate the error shrinks on finer grids: 0.95 (90 % range 0.86 to 1); the method's expected rate is 0.8 or more

Run time, finest grid: 23.1 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); HLLC scheme (the default kinetic scheme is unstable here)

Depth profile
• 0.049 % off
Jump stays put
· 0.046 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.00142 · 1 m: 0.0008 · 0.5 m: 0.0004 · 0.25 m: 0.0002
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 0.95 (90 % range 0.86 to 1.04)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: openTELEMAC-2D v9.1.1

Basilisk
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)
#2 0.093 % off

Rate the error shrinks on finer grids: 1 (90 % range 1 to 1); the method's expected rate is 0.8 or more

Run time, finest grid: 0.29 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)

Depth profile
• 0.093 % off
Jump stays put
· 0.052 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.00304 · 1 m: 0.00152 · 0.5 m: 0.000759 · 0.25 m: 0.000379
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 1.00 (90 % range 1.00 to 1.00)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: Basilisk Saint-Venant (snapshot de851a91)

Demo 1D
Worked example that ships with the suite: plain, well-understood schemes
#3 0.15 % off

Rate the error shrinks on finer grids: 1 (90 % range 1 to 1); the method's expected rate is 0.8 or more

Depth profile
• 0.15 % off
Jump stays put
· 0.061 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.00486 · 1 m: 0.00243 · 0.5 m: 0.00122 · 0.25 m: 0.000607
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 1.00 (90 % range 1.00 to 1.00)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: demo

ANUGA
ANUGA 4.0.1 (Geoscience Australia / ANU), default settings on a triangular mesh
#4 0.28 % off

Rate the error shrinks on finer grids: -0.016 (90 % range -0.57 to 0.54); the method's expected rate is 0.8 or more

Run time, finest grid: 27.6 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)

Depth profile
• 0.28 % off
Jump stays put
· 0.28 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.000956 · 1 m: 0.00169 · 0.5 m: 0.00117 · 0.25 m: 0.00112
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate −0.02 (90 % range −0.57 to 0.54)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: ANUGA 4.0.1

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 50 % off

Rate the error shrinks on finer grids: -0.0083 (90 % range -0.016 to -0.00071); the method's expected rate is 0.8 or more

Run time, finest grid: 3.3 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)

Depth profile
• 50 % off
Jump stays put
· 48 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.201 · 1 m: 0.203 · 0.5 m: 0.204 · 0.25 m: 0.204
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate −0.01 (90 % range −0.02 to −0.00)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: OpenSWMM Engine v6 finite volume (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
#6 71 % off

Rate the error shrinks on finer grids: 0.25 (90 % range -0.13 to 0.63); the method's expected rate is 0.8 or more

Run time, finest grid: 25.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)

Depth profile
• 71 % off
Jump stays put
· 13 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.44 · 1 m: 0.388 · 0.5 m: 0.238 · 0.25 m: 0.29
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 0.25 (90 % range −0.13 to 0.63)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: Hydra urban drainage (17.0.0/4.1.1)

OpenSWMM 6
OpenSWMM Engine v6 (HydroCouple's SWMM 6, pre-release) with dynamic-wave routing
#7= 99 % off

Rate the error shrinks on finer grids: 0.11 (90 % range -0.063 to 0.28); the method's expected rate is 0.8 or more

Run time, finest grid: 6.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)

Depth profile
• 99 % off
Jump stays put
· 34 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.491 · 1 m: 0.538 · 0.5 m: 0.463 · 0.25 m: 0.402
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 0.11 (90 % range −0.06 to 0.28)
reported, not counted · the scheme's design order is 1

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

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
#7= 102 % off

Rate the error shrinks on finer grids: 0.13 (90 % range -0.17 to 0.43); the method's expected rate is 0.8 or more

Run time, finest grid: 6.3 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)

Depth profile
• 102 % off
Jump stays put
· 29 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.491 · 1 m: 0.538 · 0.5 m: 0.363 · 0.25 m: 0.414
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 0.13 (90 % range −0.17 to 0.43)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: EPA SWMM 5.1.15

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
#7= 102 % off

Rate the error shrinks on finer grids: 0.13 (90 % range -0.17 to 0.43); the method's expected rate is 0.8 or more

Run time, finest grid: 6.4 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)

Depth profile
• 102 % off
Jump stays put
· 29 % error
conservation, reported beside the score
Error by grid (L1 h)
· 2 m: 0.491 · 1 m: 0.538 · 0.5 m: 0.363 · 0.25 m: 0.414
reported, not counted · the checks above are scored on the 0.25 m grid
Improves with finer grids
· rate 0.13 (90 % range −0.17 to 0.43)
reported, not counted · the scheme's design order is 1

Scored with method 3.0 · Score card: EPA SWMM 5.2.4

Not run yet: HEC-RAS 7.0, GeoClaw, LISFLOOD-FP, TUFLOW, MIKE 21, Iber, BASEMENT, Delft3D FM
Run it and add yours →

Error shrinks as the grid gets finer

Average error on each grid. A steeper line means the model converges faster.

0.3 mm1 mm3 mm1 cm3 cm10 cm30 cm0.250.512grid cell sizeDemo 1D suite example: rate 1TELEMAC-2D openTELEMAC 9.1: rate 1ANUGA 4.0.1: rate 0.3EPA SWMM 5.2.4 dynamic wave: rate 0.19OpenSWMM 6 dynamic wave: rate 0.21OpenSWMM 6 finite volume: rate -0.0041Hydra urban drainage: rate 0.21SWMM 5.1.15 previous release: rate 0.19Basilisk Saint-Venant: rate 1
Demo 1D · rate 1TELEMAC-2D · rate 1ANUGA · rate 0.3EPA SWMM 5.2.4 · rate 0.19OpenSWMM 6 · rate 0.21OpenSWMM 6 · rate -0.0041Hydra · rate 0.21SWMM 5.1.15 · rate 0.19Basilisk · rate 1

Status of this test

Candidate. To become frozen it needs: 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
jump_profile
L1 of h · in the score
already a percentage–Depth profile within 1 % (relative L1) of the stationary Bélanger step at x = 50 m on the finest grid. A captured jump smeared over two cells contributes Δh·2dx/L ≈ 0.5 % at dx = 0.25 m; a drifting jump or wrong sequent depth exceeds it.
jump_stays_put
global_mass_error of volume · conservation, beside the score
already a percentage–Stored volume within 0.1 % of the exact step: a jump that drifts by half a cell (0.125 m) on the finest grid changes the volume by 0.13 %, so this fails any solver that cannot hold the Rankine–Hugoniot balance.
convergence
observed order of L1 error in h · reported, not counted
the design order, 1–Measured from the error on every refinement level, as in ASME V&V 20.

Reference

Exact solution from references.belanger.sequent_depths.

More figures

Depth across the jump00.20.40.64045505560Distance x (m)Depth h (m)Exact (stationary Bélanger jump)Demo solver after 200 s: 40.12, 0.2Demo solver after 200 s: 40.38, 0.2Demo solver after 200 s: 40.62, 0.2Demo solver after 200 s: 40.88, 0.2Demo solver after 200 s: 41.12, 0.2Demo solver after 200 s: 41.38, 0.2Demo solver after 200 s: 41.62, 0.2Demo solver after 200 s: 41.88, 0.2Demo solver after 200 s: 42.12, 0.2Demo solver after 200 s: 42.38, 0.2Demo solver after 200 s: 42.62, 0.2Demo solver after 200 s: 42.88, 0.2Demo solver after 200 s: 43.12, 0.2Demo solver after 200 s: 43.38, 0.2Demo solver after 200 s: 43.62, 0.2Demo solver after 200 s: 43.88, 0.2Demo solver after 200 s: 44.12, 0.2Demo solver after 200 s: 44.38, 0.2Demo solver after 200 s: 44.62, 0.2Demo solver after 200 s: 44.88, 0.2Demo solver after 200 s: 45.12, 0.2Demo solver after 200 s: 45.38, 0.2Demo solver after 200 s: 45.62, 0.2Demo solver after 200 s: 45.88, 0.2Demo solver after 200 s: 46.12, 0.2Demo solver after 200 s: 46.38, 0.2Demo solver after 200 s: 46.62, 0.2Demo solver after 200 s: 46.88, 0.2Demo solver after 200 s: 47.12, 0.2Demo solver after 200 s: 47.38, 0.2Demo solver after 200 s: 47.62, 0.2Demo solver after 200 s: 47.88, 0.2Demo solver after 200 s: 48.12, 0.2Demo solver after 200 s: 48.38, 0.2Demo solver after 200 s: 48.62, 0.2Demo solver after 200 s: 48.88, 0.2Demo solver after 200 s: 49.12, 0.2Demo solver after 200 s: 49.38, 0.2Demo solver after 200 s: 49.62, 0.2Demo solver after 200 s: 49.88, 0.371Demo solver after 200 s: 50.12, 0.549Demo solver after 200 s: 50.38, 0.608Demo solver after 200 s: 50.62, 0.614Demo solver after 200 s: 50.88, 0.614Demo solver after 200 s: 51.12, 0.614Demo solver after 200 s: 51.38, 0.614Demo solver after 200 s: 51.62, 0.614Demo solver after 200 s: 51.88, 0.614Demo solver after 200 s: 52.12, 0.614Demo solver after 200 s: 52.38, 0.614Demo solver after 200 s: 52.62, 0.614Demo solver after 200 s: 52.88, 0.614Demo solver after 200 s: 53.12, 0.614Demo solver after 200 s: 53.38, 0.614Demo solver after 200 s: 53.62, 0.614Demo solver after 200 s: 53.88, 0.614Demo solver after 200 s: 54.12, 0.614Demo solver after 200 s: 54.38, 0.614Demo solver after 200 s: 54.62, 0.614Demo solver after 200 s: 54.88, 0.614Demo solver after 200 s: 55.12, 0.614Demo solver after 200 s: 55.38, 0.614Demo solver after 200 s: 55.62, 0.614Demo solver after 200 s: 55.88, 0.614Demo solver after 200 s: 56.12, 0.614Demo solver after 200 s: 56.38, 0.614Demo solver after 200 s: 56.62, 0.614Demo solver after 200 s: 56.88, 0.614Demo solver after 200 s: 57.12, 0.614Demo solver after 200 s: 57.38, 0.614Demo solver after 200 s: 57.62, 0.614Demo solver after 200 s: 57.88, 0.614Demo solver after 200 s: 58.12, 0.614Demo solver after 200 s: 58.38, 0.614Demo solver after 200 s: 58.62, 0.614Demo solver after 200 s: 58.88, 0.614Demo solver after 200 s: 59.12, 0.614Demo solver after 200 s: 59.38, 0.614Demo solver after 200 s: 59.62, 0.614Demo solver after 200 s: 59.88, 0.614
  • Exact (stationary Bélanger jump)
  • Demo solver after 200 s

h₁ = 0.200 m, h₂ = 0.614 m, energy loss 0.145 m. The jump must stay at x = 50 m; the first-order scheme spreads it over about two cells.

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 candidateanalytic-public
  • ✓All inputs availablefor candidateall committed or fetched by SHA-256
  • ✓Reference (truth) availablefor candidateanalytic generator
  • ✓Every tolerance justifiedfor candidateeach gating criterion has a rationale
  • ✓A published run passesfor frozen3 passing score card(s)
  • ✓Order of accuracy shownfor frozenobserved order meets the minimum
  • ✓Two independent codes passfor frozenpassing codes: Basilisk Saint-Venant, demo, openTELEMAC-2D v9.1.1
  • ✗Maintainer review recordedfor frozenno maintainer review recorded

Inputs

FileRoleFormatSHA-256Get it
inputs/params.jsoncase_parametersjsone9ccb8d3d60b…Download

About this test

Physics

On a horizontal frictionless bed, supercritical flow \(h_1 = 0.2\) m, \(Fr_1 = 2.5\) meets the sequent depth held downstream,

$$\frac{h_2}{h_1} = \tfrac12\left(\sqrt{1 + 8Fr_1^2} - 1\right) = 3.05 .$$

The jump conserves mass and momentum and dissipates energy. Started from the exact step at \(x = 50\) m, it must stay there: on a frictionless bed its position is neutral, so any imbalance in the scheme shows up as drift.

What it checks

Shock capturing of a stationary jump: the conjugate depths, the Rankine–Hugoniot balance (no drift) and convergence of the captured profile at order 1 in L1, which is what any consistent shock-capturing scheme achieves. The demo first-order HLL solver holds the jump within one cell and converges at 1.00.

Case history

  • 1.0.0 — grids 2, 1, 0.5, 0.25 m (the draft's 20 m grid had five cells in the channel); criteria on the relative L1 profile error and the stored volume.

Citation

Bélanger, J.-B. (1828). Essai sur la solution numérique de quelques problèmes relatifs au mouvement permanent des eaux courantes. Paris. Chow, V. T. (1959). Open-Channel Hydraulics, ch. 15. McGraw-Hill.

Sources

  • Bélanger, J. B. (1828). Essai sur la solution numérique de quelques problèmes relatifs au mouvement permanent des eaux courantes (Bélanger sequent-depth relation). Belanger-1828.

Test A1F-020_hydraulic_jump_belanger · version 1.0.0 · data licence analytic-public