AquaSWMM

Validation

AquaSWMM has three kinds of numbers in it, and each is checked differently. This page summarises what is checked, against what, to what tolerance — and what the checks do not establish. The full working is in the manual.

1. SWMM results come from EPA's engine

AquaSWMM contains no SWMM solver. It runs EPA's command-line runswmm as a child process, unmodified, and reads the .rpt and .out files it writes. It never links to the engine, patches it, or edits its results.

  • Each run is stamped with the version the engine reports and the SHA-256 of the executable, and the model report prints both, so a reviewer can confirm which build produced the numbers.
  • Success is decided from the report — no ERROR line and a non-empty .out — because runswmm exits 0 whether a run worked or not. Stale .rpt and .out files are deleted before each run so a failed run cannot pass for a good one.
  • Several engines can be registered (5.1.015 beside 5.2.4, for example) and chosen per run, and runs can be compared engine to engine.
  • The editor keeps every byte of the .inp it did not change. The round trip is checked against EPA's sample models on every build.
  • The model report's input tables are held to EPA's own input summary: the engine's report with INPUT YES is kept as a test fixture, and a test checks both name the same objects with the same values.

Manual: Run and engines.


2. The design engine matches hand calculations

The storm-sewer design tools implement published methods: the Rational method, Manning with exact circular geometry, standard-step HGL backwater, and HEC-22 inlets. On a reference network — three pipes down a trunk to a fixed-tailwater outfall — every number the engine reports is worked by hand, and the two agree to six decimal places. A test asserts these values, so a change to the engine that moves any of them fails the build.

Reference network, engine against hand calculation
PipeΣCATc (min)i (in/hr)Q engine (cfs)Q by handCapacity engineCapacity by hand
P10.7012.0000005.0607293.5425103.5425104.5677654.567765
P21.4013.2160804.8475266.7865366.7865367.5747867.574786
P31.8014.0755174.7085898.4754608.47546012.93742512.937425

i = 60 / (t + 10)0.8; n = 0.013; Manning K = 1.486, the exact unit conversion 3.2808401/3; tailwater 100.5 ft; junction K = 0.5.

The same page of working carries on through partial-flow velocity (P1: 4.111571 ft/s at a normal depth of 0.825392 ft), the HGL (junction loss at N2: 0.182488 ft, HGL 103.790792 ft, every structure below its rim), and HEC-22 inlet interception.

The design engine has also been run against a four-line network designed and printed in a widely used commercial storm-sewer program. Slopes, ΣCA, rainfall intensity for a given Tc, the surcharge calls and the tailwater agree exactly; downstream flows differ by up to 2.5% and HGLs by up to 0.5 ft, and each difference is traced to one of three stated method choices — most importantly, AquaSWMM uses normal-depth velocity for travel time, which is the conservative side for pipe sizing.

Manual: Methods.


3. The 2D solver reproduces known solutions

Each case below is an integration test with the threshold it asserts, run on every build.

CaseSet-upAsserted
Lake at rest50 × 50 cells on a random bed, one island, both schemesVelocity and depth drift ≤ 1e-12; balance error < 1e-9%
Uniform flow (Manning)200 m plane, S = 0.01, n = 0.03, q = 0.1 m²/sDepth within 1% of normal depth (0.12203 m), both schemes
Dam break (Ritter)1200 × 3 cells, frictionless dry bed, full-dynamic schemeWorst depth error away from the fronts 0.9% of h₀ at first order, 0.1% at second order
Order of accuracySmooth simple wave, 120 to 960 cells, full-dynamic schemeObserved order 1.89–1.96 at second order (0.86–0.95 at first)
Wet and dry (Thacker)Water oscillating in a parabolic bowl, one periodDepth never negative; mass error 3e-13%
Closed basinParabolic bowl, 600 m³ inflow hydrographInflow booked to 1e-9; stored volume within 0.1%
SymmetryPoint source on a flat 41 × 41 plateMirror-symmetric in x, y and the diagonal to 1e-9
Rain and infiltration36 mm/h rain, 7.2 mm/h infiltration, then an open edgeVolumes booked exactly; balance < 1e-9%
1D-2D interfacesManhole, inlet, outfall and bank exchangesVolumes conserved to 1e-12; inlet capture never exceeds weir or orifice limits
Graded meshLake at rest, rain, and uniform flow across a refinementDepth unchanged to 1e-12; flow within 2% of normal depth past the refinement
Green–Ampt infiltrationConstant rain on a plate, and a ponded plate at 2 s and 60 s stepsMatches the Mein–Larson hand calculation; same result at both steps; balance < 1e-9%
Rain by gage and by rasterRain from each subcatchment's gage, and gridded rain on a refined meshRain booked equals the input to 1e-12; balance < 1e-9%

Manual: 2D methods: equations, numerics and validation, with references.

The Environment Agency 2D benchmarks

The UK Environment Agency's benchmark (Néelz & Pender 2013, report SC120002) ran the same test cases through TUFLOW, MIKE FLOOD, InfoWorks ICM, JFLOW, LISFLOOD-FP and other 2D packages and published their results. The input data is public. AquaSWMM runs the cases below as tests and compares its water levels, speeds and arrival times with the range of the published results.

TestWhat it checksFull-dynamic schemeLocal-inertial scheme
1Flooding a disconnected water bodyInside the published rangeInside
2Filling floodplain depressionsInside, all 11 levelsInside
3Momentum over a small obstructionInside at 2.5 m cells; at the specified 5 m, one level 12 mm low and 5 s lateOutside its range of validity (as expected)
4Speed of flood propagationInsideLevel 7 mm low; spreads diagonally first on a flat grid
5Valley floodingInside, except one arrival 5 min lateInside; speeds up to 0.07 m/s high
6A, 6BDam break (laboratory)Inside at every gaugeNot run (outside its range of validity)
8AUrban rainfall floodingInside, except one peak 9 mm highInside, except one level 3 mm low

The report gives its results as plots, so each reference range was read from the figure, and the test names the figure, page and reading precision. Mass balance closes to better than 1e-10% in every run. Test 7 (a 1D river with a bridge and culvert) is not run: SWMM cannot represent it as specified. Manual: 2D methods, section 6.11.


What this does not establish

  • The checks prove the software computes the published equations correctly. They do not prove a method suits your site. Choosing the Rational method, choosing C, and choosing a design storm remain engineering judgement, owned by the engineer who seals the work.
  • 2D results are checked against analytic solutions, the Environment Agency benchmarks and the engine's own flooding totals, not yet against a measured real-world event.
  • The default local-inertial scheme is first-order and for low Froude numbers: fronts smear over a few cells, so check a result's sensitivity by halving the cell size. Dam breaks and supercritical flow need the full-dynamic scheme, which is second-order by default away from wet/dry edges (MUSCL reconstruction with a two-stage Runge–Kutta step) and first-order at shorelines and walls.
  • Reconcile Manning's K, loss coefficients and spread criteria against your own agency's standards before relying on the output.

Found a network where AquaSWMM and your usual tool disagree? That is the most useful thing you can send us: send the inputs and both sets of results.