How it works
A benchmark is only useful if its answers are right and its results can be repeated. Here is how this one makes sure of both.
Every model gets identical terrain, flows and settings. Each file is fixed by a SHA-256 fingerprint, so nobody can quietly change it, and large files are fetched and checked against that fingerprint.
Exact mathematical solutions (dam breaks, backwater, water hammer), laboratory and field measurements, or — for compatibility — the output of a pinned SWMM or EPANET release.
Every number measured, as a percent difference from the right answer, with the run time, the machine and the engine's own report. Score cards are hashed and signed (with the suite's public development key: the signature shows a card has not changed, not who wrote it); every one shown here is re-run by CI on each change.
How results are scored and ranked
Measurements, not verdicts
Each check's error is given as a percentage of the quantity it is an error in (a depth error over the exact mean depth, a front error over the distance the front travels; mass errors are already percentages). A result's score is its largest percent difference over the test's accuracy checks; there is no limit and no pass or fail. Models are listed in that order on every test; results within 10 % of each other share a rank. Overall rankings count head-to-head wins on the tests two models share, so a model is never compared on tests it did not run.
Getting better on finer grids
Each test is run on up to four grids and scored on the finest. Every card lists the error on each grid and the rate it shrinks at (the "observed order", as in ASME V&V 20), beside the scheme's design order. The rate is reported, not counted in the score.
Each check has a reason
Every check is written down with why it was chosen and what its percentage is of (the exact mean depth, the distance a front travels). Mass errors, timing errors (in seconds) and NSEs are shown in their own columns, not folded into the score. Open any test's technical details to read them.
Production software, run fairly
Production models are installed from their official sources by automated jobs and run with their defaults. The inputs, the run length, the boundaries and the output format are set for every model; any other setting the suite changes (a time-step limit, a minimum surface area, an iteration tolerance) is named on each result under "Settings". When a model fails, its card says so and why, and the run can be reproduced from the repository.
HEC-RAS 7.0 (and 6.6)
Installed silently on a Windows runner from HEC's release (installer fingerprint pinned), projects written as plain text, run headless with ras-commander. 6.6 is kept as the previous release.
TELEMAC-2D 9.1
openTELEMAC from conda-forge, finite-volume settings by default.
ANUGA, GeoClaw, LISFLOOD-FP
Built from their official releases weekly; LISFLOOD-FP's three CPU solvers are scored separately.
SWMM and EPANET
Pinned releases (SWMM 5.2.4, EPANET 2.2) define the compatibility answers; a second build of each checks the answer does not depend on the compiler.
How tests grow up
Draft · 8
Defined, but waiting on data or a verified answer.
Candidate · 31
Inputs, answer and limits published, and at least one model scored.
Frozen · 0
Reviewed, run by independent models, and fixed: a change to a frozen test makes a new version.
39 tests in all. The rules for each step are in the method.
Go deeper
Verification and validation plan
Convergence, tolerances, promotion rules and the literature behind every test.
Reports and fixes
Every problem found in the suite itself, and what was done about it.
The SWMM corpus
1,400 real SWMM models used to compare engine versions.
Downloads
Every input, score card and schema, with fingerprints.