Does the model move a shoreline back and forth correctly?
Test A2A-001 Thacker (1981) Version 2.0.0
Press play, or drag the slider, to watch the exact answer unfold. Models are compared at the end, t = 1 s.
What happens
Water sloshes in a smooth bowl. The shoreline creeps up one side and retreats from the other, and the exact motion is known at every moment.
Why it matters
Flood edges wet and dry all the time. Models that mishandle the shoreline leak water or create it.
A good model must
keep the average depth error under 2 cm
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 0.1 m down to 0.0125 m cells; the checks are scored on the 0.0125 m grid, and each card lists the error on every grid. Compare them in the results viewer (depth maps and animation) →
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.021 % off
Rate the error shrinks on finer grids: 1.5 (90 % range 1.3 to 1.6); the method's expected rate is 0.8 or more
Run time, finest grid: 0.96 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.0069 mm off
0.021 % of the exact solution's mean depth over the bowl, 32 mm
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): A2A-001.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
#2 0.11 % off
Rate the error shrinks on finer grids: 1.3 (90 % range 1.2 to 1.4); the method's expected rate is 0.8 or more
Run time, finest grid: 21.2 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.036 mm off
0.11 % of the exact solution's mean depth over the bowl, 32 mm
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): A2A-001.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 2D
Worked example that ships with the suite: first-order finite volume
#3= 0.15 % off
Rate the error shrinks on finer grids: 0.9 (90 % range 0.86 to 0.94); the method's expected rate is 0.8 or more
Run time, finest grid: 0.65 s· AMD EPYC 9V74 80-Core Processor, 2 cores, 15.6 GB, Linux 6.17.0-1022-azure (GitHub Actions (github-hosted, ubuntu24))
Average depth error
• 0.047 mm off
0.15 % of the exact solution's mean depth over the bowl, 32 mm
The model files for this run will be published with its next run.
The test itself (inputs, exact answer, checks): A2A-001.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
#3= 0.15 % off
Rate the error shrinks on finer grids: 0.88 (90 % range 0.84 to 0.91); the method's expected rate is 0.8 or more
Run time, finest grid: 13.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: telemac2d (Selafin, centreline nodes)
Average depth error
• 0.049 mm off
0.15 % of the exact solution's mean depth over the bowl, 32 mm
The test itself (inputs, exact answer, checks): A2A-001.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): A2A-001.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
#5= 0.19 % off
Rate the error shrinks on finer grids: 1.2 (90 % range 0.86 to 1.6); the method's expected rate is 0.8 or more
Run time, finest grid: 2.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.061 mm off
0.19 % of the exact solution's mean depth over the bowl, 32 mm
The test itself (inputs, exact answer, checks): A2A-001.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): A2A-001.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
#8 0.42 % off
Rate the error shrinks on finer grids: 0.53 (90 % range 0.16 to 0.9); the method's expected rate is 0.8 or more
Run time, finest grid: 0.31 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): A2A-001.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
#9 1.1 % off
Rate the error shrinks on finer grids: -0.053 (90 % range -0.82 to 0.71); the method's expected rate is 0.8 or more
Run time, finest grid: 0.28 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)
Average depth error
• 0.35 mm off
1.1 % of the exact solution's mean depth over the bowl, 32 mm
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): A2A-001.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: HEC-RAS 7.0, TUFLOW, MIKE 21, Iber, BASEMENT, Delft3D FM
Nonlinear 2D shallow-water planar oscillation in a frictionless parabolic
basin. The free surface remains planar; the shoreline is an exact moving
wet/dry boundary (Thacker 1981).
Thacker, W. C. (1981). "Some exact solutions to the nonlinear shallow-water
wave equations." J. Fluid Mech., 107, 499–508.
https://doi.org/10.1017/S0022112081001882
Reference correction (case v2.0.0)
The v1 reference used \(\omega=\sqrt{8gh_0}/L\) and a free surface without the
\(-\eta^2 h_0 \cos^2\omega t / L^2\) term. It satisfied momentum but not mass
conservation (continuity residual ≈ 83 % of \(\partial h/\partial t\)), so every correct solver
would have failed. The corrected solution is
$$z_s = \frac{\eta h_0}{L^2}\left(2x\cos\omega t - \eta\cos^2\omega t\right),\qquad u = -\eta\,\omega\sin\omega t,\qquad \omega=\frac{\sqrt{2gh_0}}{L},$$
verified pointwise against both equations in references/tests/test_thacker.py.
Demo solver
Scored end to end by the first-order finite-volume demo solver
(examples/demo_solver/swe2d.py, run by scripts/run_demo_2d.py): it passes with
observed order ≈ 0.9. examples/demo_solver/solve_2d.py only samples the
analytical solution; it is a scorer fixture, and the convergence check rejects it.
Sources
Thacker, W. C. (1981). Some exact solutions to the nonlinear shallow-water wave equations. doi:10.1017/S0022112081001882
Test A2A-001_thacker_parabolic_bowl · version 2.0.0 · data licence analytic-public