HydroComplete  /  Validation
TR-55NEH-630HEC-22HDS-5AH-703NCDEQHydroCADHEC-HMS

Validation

The same problem, three ways: a published reference worked example, HydroComplete's shipped engine, and the difference between them. No number on this page is typed in by hand — the HydroComplete column is computed by the engines every time the site is built.

Regenerated on every deploy — the numbers below are computed by the shipped engines at build time, not typed in. Build: 2026-09-11 19:53 UTC · engines from src/engines/ at commit ab307ad561
20
reference cases
84
numeric checks
83
within source precision
1
differ — each explained below
4
convention rows — shown, not scored
How to read this page. "Reference" is the value printed in the cited document (to the precision the document gives) or, where marked closed form, a hand calculation whose every step is printed in the case block. "Tolerance" is the rounding envelope of the reference, set before the engine was run. Where HydroComplete lands outside that envelope we say so, say why, and lock the current value in the test suite so the gap cannot drift unnoticed. We do not widen tolerances to turn a "differs" into a "match". A row marked Convention is neither: the reference program's own documentation says the value is an artefact of how it handles a modelling condition (a pond above its storage table), so both programs' numbers are shown and explained rather than scored.

Summary

CaseCheckReferenceHydroCompleteDeltaStatus
SCS curve-number runoff depth · IDEAL · TR-55 (1986) Ex. 2-1 to 2-4
Ex. 2-1: CN 70, P 6.0 in → Q2.81 in2.805 in−0.005 (−0.17%)Match
Ex. 2-2: CN 75 → Q3.28 in3.282 in+0.002 (+0.06%)Match
Ex. 2-3: CN 77 → Q3.48 in3.479 in−0.001 (−0.03%)Match
Ex. 2-4: CN 74 → Q3.19 in3.185 in−0.005 (−0.16%)Differs
Area-weighted curve number · IDEAL · TR-55 (1986) Worksheet 2, Ex. 2-1/2-2
Ex. 2-1 weighted CN70.170.100.00 (0.00%)Match
Ex. 2-2 weighted CN75.275.200.00 (0.00%)Match
TR-55 three-segment time of concentration · Conveyance · TR-55 (1986) Ex. 3-1
Sheet-flow travel time0.30 hr0.296 hr−0.004 (−1.37%)Match
Shallow-concentrated travel time0.24 hr0.241 hr+0.001 (+0.42%)Match
Channel travel time0.99 hr0.991 hr+0.001 (+0.06%)Match
Total Tc1.53 hr1.528 hr−0.002 (−0.16%)Match
TR-55 graphical peak discharge · SEDCAD4 · TR-55 (1986) Ex. 4-1 + Table F-1
25-yr peak discharge qp345 cfs344.7 cfs−0.3 (−0.07%)Match
Runoff depth Q used in qp3.28 in3.282 in+0.002 (+0.06%)Match
SCS dimensionless unit-hydrograph peak · Hydraflow · NEH-630 Ch. 16 (2007) Ex. 16-1
Example 16-1: qp (Tc = 2.3 h)1,455 ft³/s1,452.0 ft³/s−3.0 (−0.21%)Match
Figure 16-2 area B: qp (Tc = 6.0 h)557 ft³/s556.6 ft³/s−0.4 (−0.07%)Match
Example 16-1: time to peak Tp1.53 h1.533 h+0.003 (+0.22%)Match
Detention routing, storage-indication (Modified Puls) · Hydraflow · HEC-22 3rd ed. Ex. 8-9
Peak routed outflow18.3 ft³/s18.28 ft³/s−0.02 (−0.09%)Match
Stage at peak outflow37.58 ft37.575 ft−0.005 (−0.01%)Match
Storage at peak outflow27,816 ft³27,831.6 ft³+15.6 (+0.06%)Match
Mass balance: outflow volume + residual storage vs inflow volume (closed form)0 (exact) ft³0.0 ft³0.0Match
Stage-storage from an elevation-area table · Hydraflow · NCDEQ SW Design Manual Part B, Table 5
Cumulative volume at 726 ft11,500 cf11,500.0 cf0.0 (0.00%)Match
Cumulative volume at 727 ft26,250 cf26,250.0 cf0.0 (0.00%)Match
Cumulative volume at 728 ft45,250 cf45,250.0 cf0.0 (0.00%)Match
Cumulative volume at 729 ft69,000 cf69,000.0 cf0.0 (0.00%)Match
Orifice stage-discharge · Hydraflow · HEC-22 3rd ed. Ex. 8-5
Q at stage 11.0 m0.045 m³/s0.0452 m³/s+0.0002 (+0.40%)Match
Q at stage 12.0 m0.065 m³/s0.0652 m³/s+0.0002 (+0.27%)Match
Riser pipe stage-discharge (weir-to-orifice transition) · Hydraflow · HEC-22 3rd ed. Ex. 8-6
Q at 10.9 m (weir control)0.10 m³/s0.097 m³/s−0.003 (−3.20%)Match
Q at 11.4 m (orifice control)0.45 m³/s0.454 m³/s+0.004 (+0.95%)Match
Q at 12.0 m (orifice control)0.64 m³/s0.642 m³/s+0.002 (+0.38%)Match
Culvert headwater, inlet and outlet control · Hydraflow · HDS-5 3rd ed. DG 1.3 + App. A
A. Inlet-control HW, square edge w/ headwall (closed form, eq. A.3)9.29 ft9.290 ft+0.004 (+0.04%)Match
B. Outlet-control HW (CDF: ELho 107.0 − ELi 100.0)7.0 ft6.97 ft−0.03 (−0.43%)Match
C. Controlling HW as designed (groove end, CDF HWi)7.97 (HY-8: 7.9) ft7.930 ft−0.040 (−0.50%)Match
D. Inlet-control HW, groove end w/ headwall (closed form, eq. A.3)7.93 ft7.930 ft+0.005 (+0.06%)Match
Triangular gutter flow (spread) · Conveyance · HEC-22 3rd ed. Ex. 4-1
Q at T = 8.2 ft1.4 ft³/s1.41 ft³/s+0.01 (+0.73%)Match
Q at T = 9.0 ft (Solution 1 in reverse)1.8 ft³/s1.81 ft³/s+0.01 (+0.42%)Match
Manning's equation, trapezoidal channel capacity and normal depth · Conveyance · HEC-22 3rd ed. Ex. 5-1
Capacity Q at d = 1.64 ft59.7 ft³/s59.42 ft³/s−0.28 (−0.46%)Match
Velocity V4.8 ft/s4.81 ft/s+0.01 (+0.12%)Match
Normal depth for Q = 59.7 ft³/s1.64 ft1.643 ft+0.003 (+0.18%)Match
Manning's equation, circular pipe full and half full · Conveyance · closed form (Manning, circular segment)
Full-pipe capacity22.683 ft³/s22.6833 ft³/s0.0000 (0.00%)Match
Half-full flow11.342 ft³/s11.3416 ft³/s0.0000 (0.00%)Match
Half-full velocity (= full velocity)7.220 ft/s7.2200 ft/s−0.0003 (0.00%)Match
RUSLE slope length-steepness factor LS · SEDCAD4 · AH-703 (1997) Ch. 4, p. 112
LS, 400 ft at 10%2.842.836−0.004 (−0.15%)Match
S at 10% (eq. 4-5, via LS at λ = 72.6 ft)1.17171.171660.00000 (0.00%)Match
S at 5% (eq. 4-4, via LS at λ = 72.6 ft)0.56930.569330.00000 (0.00%)Match
MUSLE single-storm sediment yield · SEDCAD4 · closed form (MUSLE, HEC-HMS App. Guide eq. 11)
Event sediment yield Y875.80 tons875.800 tons+0.003 (0.00%)Match
Runoff energy term 95 (Q qp)0.562316.92,316.90−0.02 (0.00%)Match
Camp's ideal-basin trap efficiency (two-bin PSD) · SEDCAD4 · closed form (Camp 1946; Stokes/Rubey)
Overall trap efficiency75.3 %75.26 %0.00 (0.00%)Match
Silt settling velocity (Stokes)2.939e-4 ft/s2.939e-4 ft/s0.00e+0 (0.00%)Match
Fine-sand settling velocity (Rubey)0.0593 ft/s0.05930 ft/s0.00000 (0.00%)Match
NCDEQ Simple Method design volume (1-inch storm) · IDEAL · closed form (NCDEQ Part B Simple Method)
Runoff coefficient RV0.6350.63500.0000 (0.00%)Match
Design volume DV27660.6 ft³27,660.60 ft³0.00 (0.00%)Match
Design volume in acre-ft0.6350 ac-ft0.63500 ac-ft0.00000 (0.00%)Match
Weir outlets: emergency spillway and rectangular weir · Hydraflow · HEC-22 Ex. 8-8 + TR-55 Ex. 6-1
HEC-22 Ex. 8-8 spillway Q at Hp = 0.98 ft40.6 ft³/s40.57 ft³/s−0.03 (−0.07%)Match
TR-55 Ex. 6-1 weir qo at Hw = 5.7 ft, Lw = 4.1 ft (eq. 6-4 closed form)178.5 ft³/s178.54 ft³/s0.00 (0.00%)Match
HydroCAD 10.10-4a side-by-side: real project file, runoff, culvert outlets and pond routing · Hydraflow · HydroCAD 10.10-4a report, pp. 2, 8–10, 14
100-yr combined inflow peak to 27P (p. 9)410.34 cfs410.339 cfs−0.001 (0.00%)Match
100-yr time of peak (p. 9)12.06 hr12.000 hr−0.060 (−0.50%)Match
100-yr inflow volume, HydroCAD 5.00–20.00 hr span (p. 9)28.354 af28.3428 af−0.0112 (−0.04%)Match
100-yr full-storm volume vs closed-form CN volume ΣA·Q/1230.391 af30.3775 af−0.0140 (−0.05%)Match
2-yr combined inflow peak to 27P (p. 14)113.98 cfs114.267 cfs+0.287 (+0.25%)Match
2-yr time of peak (p. 14)12.07 hr12.050 hr−0.020 (−0.17%)Match
2-yr inflow volume, 5.00–20.00 hr span (p. 14)7.589 af7.5904 af+0.0014 (+0.02%)Match
2-yr full-storm volume vs closed-form CN volume8.243 af8.2417 af−0.0012 (−0.01%)Match
2-yr peak stage in 27P (p. 14)665.07 ft665.068 ft−0.002 (0.00%)Match
2-yr storage in 27P at 20 hr (p. 14)330,391 cf330,746.5 cf+355.5 (+0.11%)Match
#1 24 in RCP at HW 672.04 ft, head 4.28 ft — HydroCAD outlet-depth convention (p. 10)29.58 cfs29.615 cfs+0.035 (+0.12%)Match
#1 24 in RCP, same head — HydroComplete default (HDS-5, ho = (dc + D)/2)29.58 cfs30.050 cfs+0.470 (+1.59%)Match
#2 6 in CPP at HW 672.04 ft, head 5.22 ft (p. 10)1.52 cfs1.529 cfs+0.009 (+0.57%)Match
#3 4.7 in CPP at HW 672.04 ft, head 7.04 ft (p. 10)1.03 cfs1.034 cfs+0.004 (+0.41%)Match
100-yr storage at the 27P peak, HydroCAD constant-storage convention (p. 9)987,220 cf987,219.5 cf−0.5 (0.00%)Match
100-yr 27P outflow volume through 20 hr, same convention (p. 9)5.702 af5.7294 af+0.0274 (+0.48%)Match
100-yr peak stage in 27P — HydroCAD convention replicated (aboveTable:'constant-storage')672.04 ft673.254 ft+1.214 (+0.18%)Convention
100-yr peak outflow from 27P — HydroCAD convention replicated32.13 cfs38.629 cfs+6.499 (+20.23%)Convention
100-yr peak stage in 27P — HydroComplete default (aboveTable:'extend-last-area')672.04 ft667.637 ft−4.403 (−0.66%)Convention
100-yr peak outflow from 27P — HydroComplete default32.13 cfs1.045 cfs−31.085 (−96.75%)Convention
26P stage at 36,341 cf on its table, no outflow (p. 8)664.81 ft664.803 ft−0.007 (0.00%)Match
26P storage after feeding 36,341 cf (p. 8)36,341 cf36,341.0 cf0.0 (0.00%)Match
HEC-HMS 4.13 side-by-side: real basin model, frequency-storm runoff volume and peaks · Hydraflow · HEC-HMS 4.13 run summaries pp. 1–2 + Run_53 .results
WS8 100-yr runoff volume, CN 86.2 (Run_53 results)13.910 af13.8979 af−0.0124 (−0.09%)Match
WS8 100-yr excess depth, CN 86.2 (Run_53 results; closed-form CN)6.909 in6.9090 in−0.0001 (0.00%)Match
WS3 100-yr runoff volume, CN 84.5 (Run_53 results)2.442 af2.4418 af−0.0002 (−0.01%)Match
WS8 100-yr peak, CN 86.2, HMS Tp placement (Run_53 results)150.93 cfs149.430 cfs−1.503 (−1.00%)Match
WS8 100-yr time of peak (Run_53: 12:08)12.133 hr12.1700 hr+0.0367 (+0.30%)Match
WS3 100-yr peak, CN 84.5, HMS Tp placement (Run_53 results)20.56 cfs20.510 cfs−0.048 (−0.23%)Match
WS3 100-yr time of peak (Run_53: 12:17)12.283 hr12.3200 hr+0.0367 (+0.30%)Match
WS8 100-yr peak, CN 87, HMS Tp placement (run summary p. 1)152.37 cfs150.800 cfs−1.570 (−1.03%)Match
WS3 100-yr peak, CN 85, HMS Tp placement (run summary p. 1)20.70 cfs20.650 cfs−0.050 (−0.24%)Match
WS8 2-yr peak, CN 87, HMS Tp placement (run summary p. 2)46.39 cfs46.290 cfs−0.100 (−0.22%)Match
WS3 2-yr peak, CN 85, HMS Tp placement (run summary p. 2)5.94 cfs5.950 cfs+0.010 (+0.17%)Match
WS8 100-yr peak, CN 87, HydroComplete default Tp = ⅔Tc (run summary p. 1)152.37 cfs149.250 cfs−3.120 (−2.05%)Match
WS3 100-yr peak, CN 85, HydroComplete default Tp = ⅔Tc (run summary p. 1)20.70 cfs20.060 cfs−0.640 (−3.09%)Match

HydroCAD and HEC-HMS side-by-side

Cases 19 and 20 are real project files, not textbook examples. The HydroCAD case is a McGill Associates scratch model of a 55.4-acre site in northern Illinois (HydroCAD 10.10-4a, report printed 3/3/2026): four subcatchments into an existing pond with a three-culvert outlet stack and a second pond behind it. The HEC-HMS case is the 4.x model of the same site built later in the project. HydroComplete imports each file through the same importer the app uses, runs it at the other program's time step, and the rows above are the other program's printed numbers next to ours, page cited. The site, its owner and the file names are not published; the subcatchment areas, curve numbers, times of concentration, stage-area tables and culvert sizes are, because a reviewer needs them to reproduce the run and they identify nothing.

What matched. Runoff peaks and volumes against HydroCAD, the culvert barrel discharges once the same outlet-datum convention is used, the 2-yr pond routing, and the second pond's stage from storage; against HEC-HMS, the frequency-storm runoff volumes and peaks once the unit hydrograph is placed where HMS places it. All of them inside tolerances fixed before the runs (0.5 % on volumes, 3 % on peaks, 0.02 ft on stage, 1–2 % on culvert discharge) and most of them far inside; the deltas are in the tables. Reference volumes are compared over the window each program actually computed (HydroCAD ran 5.00–20.00 hr and said so); the full-storm volumes are checked against the closed-form curve-number volume alongside them.

What differs, and why. Two conventions, both documented and both switchable: HydroCAD's barrel equation takes the outlet crown as its downstream datum where HDS-5 takes (dc + D)/2 (1.6 % on a 24-in pipe, nothing on small full-flowing pipes), and HEC-HMS places the unit-hydrograph peak at Δt/2 + lag where NEH-630 places it at ⅔Tc (2–3 % on these basins). The one place the tools legitimately diverge is what to do when a pond rises above its stage-storage table. On this file the 100-yr pool went 5 ft above the top of the table; HydroCAD, by its own documented convention, credits no storage above the table and flagged the result as oscillating. Those rows are shown as Convention, not pass/fail: our replication of HydroCAD's convention, our default (the top surface area carried upward), and HydroCAD's message text with the link, so a reviewer can see exactly why neither number is the engineering answer and what the model needs instead. 4 rows on this page are marked that way; they are not counted as matches.

The standing offer stands. Send us a .hcp (HydroCAD) or .basin/.hms (HEC-HMS) project and we will run it and publish the delta here, with your permission and your name on it or not, as you prefer: support@hydrocomplete.com. Nothing on this page is a "typical" result quoted from a brochure; every HydroCAD and HEC-HMS number here came off a report or results file we have in hand, and every HydroComplete number is recomputed at build time.

A full pre/post routing walk-through with every intermediate table is in the worked example Detention pond routing by Modified Puls, pre- vs post-development (NC).

Case detail

SCS curve-number runoff depth

Hydrology (SCS / TR-55) · engine: IDEAL · IDEALEngine.calculateRunoff(P, CN, 3) · case module build-tools/validation/cases/01-tr55-scs-runoff-depth.js

Published reference

USDA-NRCS, Urban Hydrology for Small Watersheds, Technical Release 55, 2nd ed., June 1986 (210-VI-TR-55). Chapter 2, Examples 2-1 to 2-4, Worksheet 2 (Figures 2-5 to 2-8), pp. 2-13 to 2-16. [document]

Inputs

Rainfall P (25-yr, 24-hr)6.0 in
Curve numbers (weighted, from Worksheet 2)70, 75, 77, 74
Antecedent conditionARC II (engine argument antecedentDays = 3 selects no CN adjustment)

Formula and hand steps

TR-55 equations 2-3 and 2-4:

$Q = \frac{(P - I_a)^2}{(P - I_a) + S}, \qquad S = \frac{1000}{CN} - 10, \qquad I_a = 0.2S$

For CN = 70: S = 1000/70 − 10 = 4.286 in, Ia = 0.857 in, Q = (6.0 − 0.857)² / (6.0 − 0.857 + 4.286) = 26.45 / 9.429 = 2.81 in. The worksheets take Q from Table 2-1 (CN tabulated every 5) with linear interpolation for CN 74 and 77; HydroComplete evaluates equation 2-3 directly.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Ex. 2-1: CN 70, P 6.0 in → Q2.81 in2.805 in−0.005 (−0.17%)±0.005Worksheet reports Q to 0.01 inMatch
Ex. 2-2: CN 75 → Q3.28 in3.282 in+0.002 (+0.06%)±0.005Match
Ex. 2-3: CN 77 → Q3.48 in3.479 in−0.001 (−0.03%)±0.005Match
Ex. 2-4: CN 74 → Q3.19 in3.185 in−0.005 (−0.16%)±0.005Differs
Why "Ex. 2-4: CN 74 → Q" differs: Equation 2-3 gives Q = (6.0 − 0.703)² / (6.0 − 0.703 + 3.514) = 3.185 in, which rounds to 3.18. The worksheet reads Table 2-1, which tabulates CN in steps of 5, and interpolates linearly between CN 70 (2.81 in) and CN 75 (3.28 in): 2.81 + 0.8 × 0.47 = 3.186, printed as 3.19. The 0.005-in gap is the table interpolation in the reference, not the engine; the same interpolation at CN 77 happens to land on the equation value (3.48).

Area-weighted curve number

Hydrology (SCS / TR-55) · engine: IDEAL · IDEALEngine.calculateCompositeLandUseLoading(landUses, P).compositeCN · case module build-tools/validation/cases/02-tr55-weighted-cn.js

Published reference

USDA-NRCS TR-55 (1986), Chapter 2, Worksheet 2 for Examples 2-1 and 2-2 (Figures 2-5 and 2-6), pp. 2-13 to 2-14. [document]

Inputs

Ex. 2-1Memphis, HSG B, pasture good condition: CN 61 × 30 ac; Loring, HSG C, pasture good: CN 74 × 70 ac
Ex. 2-2CN 70 × 75 ac; CN 80 × 100 ac; CN 74 × 75 ac (250 ac)

Formula and hand steps

$CN_{w} = \frac{\sum CN_i\,A_i}{\sum A_i}$

Ex. 2-1: (61 × 30 + 74 × 70) / 100 = 7,010 / 100 = 70.1 (worksheet: "Use CN 70"). Ex. 2-2: (70 × 75 + 80 × 100 + 74 × 75) / 250 = 18,800 / 250 = 75.2 ("Use CN 75").

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Ex. 2-1 weighted CN70.170.100.00 (0.00%)±0.05Match
Ex. 2-2 weighted CN75.275.200.00 (0.00%)±0.05Match

TR-55 three-segment time of concentration

Hydrology (SCS / TR-55) · engine: Conveyance · ConveyanceEngine.calculateTimeOfConcentration(segments) · case module build-tools/validation/cases/03-tr55-time-of-concentration.js

Published reference

USDA-NRCS TR-55 (1986), Chapter 3, Example 3-1 and Worksheet 3 (Figure 3-2), pp. 3-4 to 3-5. [document]

Inputs

Sheet flow ABdense grass, n = 0.24, L = 100 ft, P2 = 3.6 in, s = 0.01
Shallow concentrated BCunpaved, L = 1,400 ft, s = 0.01
Channel CDn = 0.05, a = 27 ft², pw = 28.2 ft, s = 0.005, L = 7,300 ft
Channel geometry given to HCThe worksheet gives a and pw directly; the engine takes a section. A rectangular channel (z = 0) with b = 26.134 ft and d = 1.0331 ft reproduces a = 27.0 ft² and pw = 28.2 ft (r = 0.957 ft) exactly.

Formula and hand steps

$T_t = \frac{0.007\,(nL)^{0.8}}{P_2^{0.5}\,s^{0.4}} \quad\text{(eq. 3-3)}, \qquad V = 16.1345\,s^{0.5} \;\text{(unpaved, fig. 3-1)}, \qquad V = \frac{1.49\,r^{2/3}s^{1/2}}{n} \;\text{(eq. 3-4)}, \qquad T_t = \frac{L}{3600\,V}$

Sheet: 0.007 (24)0.8 / (3.60.5 · 0.010.4) = 0.0890 / 0.3007 = 0.296 hr (worksheet rounds to 0.30). Shallow: V = 1.61 ft/s, Tt = 1400 / (3600 · 1.61) = 0.241 hr. Channel: V = 29.8 · 0.9572/3 · 0.0707 = 2.05 ft/s, Tt = 7300 / (3600 · 2.05) = 0.99 hr. Sum = 1.53 hr.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Sheet-flow travel time0.30 hr0.296 hr−0.004 (−1.37%)±0.005worksheet precision 0.01 hrMatch
Shallow-concentrated travel time0.24 hr0.241 hr+0.001 (+0.42%)±0.005Match
Channel travel time0.99 hr0.991 hr+0.001 (+0.06%)±0.005Match
Total Tc1.53 hr1.528 hr−0.002 (−0.16%)±0.01sum of three values each rounded to 0.01 hrMatch

TR-55 graphical peak discharge

Hydrology (SCS / TR-55) · engine: SEDCAD4 · SEDCAD4Engine.calculateMUSLEStormSequence(watershed, storms).storms[0].peakFlow_cfs · case module build-tools/validation/cases/04-tr55-graphical-peak.js

Published reference

USDA-NRCS TR-55 (1986), Chapter 4, Example 4-1 and Worksheet 4, pp. 4-2 to 4-3; Appendix F, Table F-1 (regression coefficients behind Exhibit 4-II). [document]

Inputs

Drainage area250 ac = 0.390625 mi² (worksheet rounds to 0.39)
CN / Q75 / 3.28 in (Example 2-2)
Tc1.53 hr (Example 3-1)
Rainfall / distributionP = 6.0 in, Type II, Ia/P = 0.667/6.0 = 0.11
Unit peak (worksheet)qu = 270 csm/in read from Exhibit 4-II; Fp = 1.0

Formula and hand steps

$q_p = q_u\,A_m\,Q\,F_p \quad\text{(eq. 4-1)}, \qquad \log q_u = C_0 + C_1\log T_c + C_2(\log T_c)^2 \quad\text{(App. F)}$

Worksheet: 270 × 0.39 × 3.28 × 1.0 = 345 cfs. Appendix F regression, Type II, Ia/P = 0.10 curve at Tc = 1.53 hr: qu = 271.7 csm/in; Ia/P = 0.30 curve: 222.0; linear interpolation to 0.11: 269.2 csm/in, i.e. the chart read of 270. HydroComplete does exactly this interpolation and carries Am = 0.390625 mi² and Q = 3.282 in unrounded: qp = 269.2 × 0.390625 × 3.282 = 345.1 cfs.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
25-yr peak discharge qp345 cfs344.7 cfs−0.3 (−0.07%)±0.5worksheet gives qp to the nearest 1 cfsMatch
Runoff depth Q used in qp3.28 in3.282 in+0.002 (+0.06%)±0.005Match

SCS dimensionless unit-hydrograph peak

Hydrology (SCS / TR-55) · engine: Hydraflow · HydraflowEngine.generateSCSUnitHydrograph({ area, timeOfConcentration }).peakFlow · case module build-tools/validation/cases/05-neh630-unit-hydrograph-peak.js

Published reference

USDA-NRCS, National Engineering Handbook Part 630 Hydrology, Chapter 16 Hydrographs (210-VI-NEH, March 2007). Example 16-1, Step 1 (p. 16-8); Figure 16-2 (p. 16-5); Appendix 16A eqs. 16A-6 to 16A-9, 16A-13. [document]

Inputs

Drainage area A4.6 mi²
Time of concentration Tc2.3 h (Example 16-1); 6.0 h (Figure 16-2, area B)
Runoff Q1 in (unit hydrograph)

Formula and hand steps

$\Delta D = 0.133\,T_c, \qquad T_p = \frac{\Delta D}{2} + 0.6\,T_c, \qquad q_p = \frac{484\,A\,Q}{T_p}$

Example 16-1 rounds ΔD from 0.306 to 0.3 h, giving Tp = 1.53 h and qp = 484 × 4.6 / 1.53 = 1,455 ft³/s. HydroComplete keeps ΔD = 0.133 Tc unrounded, so Tp = 0.6667 Tc = 1.533 h and qp = 1,452 ft³/s; the 3 ft³/s (0.2%) gap is the example's rounding of ΔD, not a formula difference. HydroComplete's dimensionless ordinates are the Table 16-1 ratios (0.030, 0.100, 0.190 … 1.000 … 0.005, 0.000).

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Example 16-1: qp (Tc = 2.3 h)1,455 ft³/s1,452.0 ft³/s−3.0 (−0.21%)±4the example rounds ΔD to 0.3 h; the unrounded NEH formula gives 1,452Match
Figure 16-2 area B: qp (Tc = 6.0 h)557 ft³/s556.6 ft³/s−0.4 (−0.07%)±0.5Match
Example 16-1: time to peak Tp1.53 h1.533 h+0.003 (+0.22%)±0.005Match

Detention routing, storage-indication (Modified Puls)

Detention / outlets · engine: Hydraflow · HydraflowEngine.routeThroughDetention(inflow, { storageCurve, timestep }) · case module build-tools/validation/cases/06-hec22-modified-puls-routing.js

Published reference

FHWA, Urban Drainage Design Manual, Hydraulic Engineering Circular No. 22, 3rd ed., Sept. 2009 (rev. Aug. 2013), FHWA-NHI-10-009. Chapter 8, Example 8-9 (English units), Storage Indicator Numbers Table p. 8-47 and Final Routing Table p. 8-48; result text p. 8-46. [document]

Inputs

Inflow hydrograph26 ordinates at Δt = 0.057 hr, peak 31.1 ft³/s at 0.51 hr (Final Routing Table, col. 2)
Stage-storage-discharge21 rows, stage 32.8 to 39.4 ft, storage 0 to 43,906 ft³, discharge 0 to 80.7 ft³/s (Storage Indicator Numbers Table, cols. 1-3)
Routing interval0.057 hr = 205.2 s, as in the example

Formula and hand steps

$\frac{I_1 + I_2}{2} + \left(\frac{S_1}{\Delta t} + \frac{O_1}{2}\right) - O_1 = \frac{S_2}{\Delta t} + \frac{O_2}{2} \quad\text{(HEC-22 eq. 8-30)}$

HydroComplete uses the same continuity statement written as 2S/Δt + O (NEH-630 Ch. 17 form). Because the rating has a steep riser segment (dS/dO as small as 118 s between 38.4 and 38.7 ft), the engine sub-steps internally to keep Δtint ≤ τ/2 and reports back on the 0.057-hr grid; the reference marches at the full 0.057 hr. The mass-balance row below is a closed-form check: inflow volume by trapezoidal rule equals routed outflow volume plus residual storage.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Peak routed outflow18.3 ft³/s18.28 ft³/s−0.02 (−0.09%)±0.05table precision 0.1 ft³/sMatch
Stage at peak outflow37.58 ft37.575 ft−0.005 (−0.01%)±0.02Match
Storage at peak outflow27,816 ft³27,831.6 ft³+15.6 (+0.06%)±100the text interpolates the table; 100 ft³ is 0.36%Match
Mass balance: outflow volume + residual storage vs inflow volume (closed form) closed form0 (exact) ft³0.0 ft³0.0±10closed-form check; inflow volume is 63,715 ft³ so 10 ft³ is 0.016%Match

Stage-storage from an elevation-area table

Detention / outlets · engine: Hydraflow · HydraflowEngine.computeStorageFromElevArea(table) · case module build-tools/validation/cases/07-ncdeq-stage-storage.js

Published reference

NCDEQ, Stormwater Design Manual, Part B Stormwater Calculations, "Stage-Storage Tables for Storage Volume of Ponds", Table 5 (revised 3-15-2017, p. 7). [document]

Inputs

Surface areas725 ft: 10,000 sf; 726 ft: 13,000; 727 ft: 16,500; 728 ft: 21,500; 729 ft: 26,000

Formula and hand steps

$\Delta V_i = \frac{A_i + A_{i-1}}{2}\,(z_i - z_{i-1}), \qquad V_i = \sum \Delta V_i$

(10,000 + 13,000)/2 × 1 = 11,500; (13,000 + 16,500)/2 = 14,750 → 26,250; (16,500 + 21,500)/2 = 19,000 → 45,250; (21,500 + 26,000)/2 = 23,750 → 69,000 cf.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Cumulative volume at 726 ft11,500 cf11,500.0 cf0.0 (0.00%)±0.5Match
Cumulative volume at 727 ft26,250 cf26,250.0 cf0.0 (0.00%)±0.5Match
Cumulative volume at 728 ft45,250 cf45,250.0 cf0.0 (0.00%)±0.5Match
Cumulative volume at 729 ft69,000 cf69,000.0 cf0.0 (0.00%)±0.5Match

Orifice stage-discharge

Detention / outlets · engine: Hydraflow · HydraflowEngine.generateStorageCurve({ elevAreaTable, outlets: { type: 'orifice' } }) · case module build-tools/validation/cases/08-hec22-orifice-rating.js

Published reference

FHWA HEC-22, 3rd ed. (2009), Chapter 8, Example 8-5 and its "Stage Discharge Tabulation for Only Orifice Flow", pp. 8-22 to 8-23; eq. 8-18. [document]

Inputs

OrificeD = 0.15 m (5.91 in), Cd = 0.60, invert at 10.0 m
Stages checked11.0 m (depth 1.0 m) and 12.0 m (depth 2.0 m)
HC unitsengine works in ft and cfs; results converted to m³/s for comparison

Formula and hand steps

$Q = C_d\,A\,\sqrt{2 g H_o}, \qquad H_o = \text{depth} - \tfrac{D}{2}\ \text{(HEC-22 eq. 8-18, head to centroid)}$

At 11.0 m: Ho = 1.0 − 0.075 = 0.925 m, Q = 0.60 × 0.01767 × √(19.62 × 0.925) = 0.0452 m³/s (tabulated 0.045). At 12.0 m: Ho = 1.925 m, Q = 0.0652 m³/s (tabulated 0.065). HydroComplete measures orifice head to the centroid once the opening is submerged (HEC-22 eq. 8-18, NCDEQ Part B); had it used the invert, 11.0 m would give 0.0470 m³/s (+4%). Below the crown it applies the same equation to the wetted segment, which meets the submerged branch exactly at the crown.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Q at stage 11.0 m0.045 m³/s0.0452 m³/s+0.0002 (+0.40%)±0.0005table precision 0.001 m³/sMatch
Q at stage 12.0 m0.065 m³/s0.0652 m³/s+0.0002 (+0.27%)±0.0005Match

Riser pipe stage-discharge (weir-to-orifice transition)

Detention / outlets · engine: Hydraflow · HydraflowEngine.generateStorageCurve({ outlets: { type: 'riser', Cw, Cd } }) · case module build-tools/validation/cases/09-hec22-riser-rating.js

Published reference

FHWA HEC-22, 3rd ed. (2009), Chapter 8, Example 8-6 and its stage-discharge table, pp. 8-24 to 8-25; eqs. 8-18 and 8-19. [document]

Inputs

RiserD = 0.53 m (20.87 in), crest 10.8 m, Cscw = 3.33 (English), Cd = 0.60
Stages checked10.9 m (head 0.1 m, weir controls), 11.4 m (head 0.6 m, orifice controls), 12.0 m (head 1.2 m)

Formula and hand steps

$Q_{weir} = C_{scw}\,(\pi D)\,H^{1.5}, \qquad Q_{orifice} = C_d\,\tfrac{\pi D^2}{4}\sqrt{2gH}, \qquad Q = \min(Q_{weir}, Q_{orifice})$

HEC-22 at 11.4 m: weir 3.073 × 0.61.5 = 1.43, orifice 0.587 × 0.60.5 = 0.45 → 0.45 m³/s controls. HydroComplete's riser outlet applies the same two equations and takes the minimum. The reference table is printed to 0.01 m³/s, so the tolerance is half of that.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Q at 10.9 m (weir control)0.10 m³/s0.097 m³/s−0.003 (−3.20%)±0.005table precision 0.01 m³/sMatch
Q at 11.4 m (orifice control)0.45 m³/s0.454 m³/s+0.004 (+0.95%)±0.005Match
Q at 12.0 m (orifice control)0.64 m³/s0.642 m³/s+0.002 (+0.38%)±0.005Match

Culvert headwater, inlet and outlet control

Detention / outlets · engine: Hydraflow · HydraflowEngine.culvertHeadwater(Q, { diameter_in, length_ft, slope, manningsN, Ke, entranceType }, TW) · case module build-tools/validation/cases/10-hds5-culvert-headwater.js

Published reference

FHWA, Hydraulic Design of Highway Culverts, HDS-5, 3rd ed., April 2012 (HIF-12-026). Design Guideline 1.3 and Culvert Design Form DG 1.3.3 (pp. DG1.1 to DG1.4); Appendix A eqs. A.1 and A.3 and Table A.1; Appendix C Table C.2; Chapter 5 outlet-control energy equation as restated in CDF footnote (7). [document]

Inputs

Design flow / tailwaterQ = 200 ft³/s, TW = 3.5 ft
Barrel54 in concrete (n = 0.012), L = 200 ft, So = 0.01, invert in 100.0 / out 98.0 ft
EntranceDG 1.3 uses a groove end in headwall (ke = 0.2, Chart 1 scale 2). HydroComplete takes entranceType with the Table A.1 constants for Chart 1 scales 1 to 3 (default square edge with headwall); check A runs the square-edge closed form, check C the groove-end design value.

Formula and hand steps

$\text{Inlet (submerged, eq. A.3):}\quad \frac{HW_i}{D} = c\left(\frac{Q}{A D^{0.5}}\right)^2 + Y - 0.5\,S$

Q/(A D0.5) = 200 / (15.90 × 2.121) = 5.928 (> 4.0, so submerged). Square edge: HW/D = 0.0398 × 35.14 + 0.67 − 0.005 = 2.064, HWi = 9.29 ft. Groove end (c = 0.0292, Y = 0.74): HW/D = 1.761, HWi = 7.93 ft; the CDF's nomograph read is 7.97 ft (HY-8: 7.9), HDS-5 §A.4 puts the nomographs within ±10% of the equations.

$\text{Outlet:}\quad H = \left[1 + k_e + \frac{29\,n^2 L}{R^{1.33}}\right]\frac{V^2}{2g}, \qquad HW_o = H + h_o - L S_o, \qquad h_o = \max\!\left(TW, \tfrac{d_c + D}{2}\right)$

V = 200/15.90 = 12.58 ft/s, V²/2g = 2.456 ft, R = 1.125 ft, friction term = 29 × 0.012² × 200 / 1.1251.33 = 0.714, H = 4.70 ft (CDF: 4.7). HDS-5 reads dc = 4.1 ft from Chart 4; solving Q²T/(gA³) = 1 exactly gives dc = 4.04 ft, so ho = (4.04 + 4.5)/2 = 4.27 ft (CDF rounds to 4.3) and HWo = 4.70 + 4.27 − 2.0 = 6.97 ft (CDF: 7.0, ELho 107.0).

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
A. Inlet-control HW, square edge w/ headwall (closed form, eq. A.3) closed form9.29 ft9.290 ft+0.004 (+0.04%)±0.01Match
B. Outlet-control HW (CDF: ELho 107.0 − ELi 100.0)7.0 ft6.97 ft−0.03 (−0.43%)±0.05CDF reports elevations to 0.1 ftMatch
C. Controlling HW as designed (groove end, CDF HWi)7.97 (HY-8: 7.9) ft7.930 ft−0.040 (−0.50%)±0.1nomograph read; HY-8 gives 7.9Match
D. Inlet-control HW, groove end w/ headwall (closed form, eq. A.3) closed form7.93 ft7.930 ft+0.005 (+0.06%)±0.01Match

Notes

The residual 0.03 ft on check B is the difference between HDS-5's Chart 4 read of dc (4.1 ft) and the exact solution (4.04 ft), carried through ho; H itself agrees to 0.01 ft. Inlet control governs in this example, so the controlling HW (check C) is the groove-end eq. A.3 value, 0.04 ft under the CDF's nomograph read.

Triangular gutter flow (spread)

Conveyance (Manning) · engine: Conveyance · ConveyanceEngine.computeGutterFlow(S, Sx, n, T) · case module build-tools/validation/cases/11-hec22-gutter-flow.js

Published reference

FHWA HEC-22, 3rd ed. (2009), Chapter 4, Example 4-1 (English units), Solutions (1) and (2), pp. 4-10 to 4-11; eq. 4-2. [document]

Inputs

Longitudinal slope SL0.010
Cross slope Sx0.020
Manning n0.016
Spread T8.2 ft (Solution 2); 9.0 ft is the spread HEC-22 solves for at 1.8 ft³/s (Solution 1)

Formula and hand steps

$Q = \frac{K_u}{n}\,S_x^{1.67}\,S_L^{0.5}\,T^{2.67}, \qquad K_u = 0.56 \;\text{(eq. 4-2)}$

HEC-22: Qn = 0.56 × 0.0201.67 × 0.0100.5 × 8.22.67 = 0.022; Q = 0.022 / 0.016 = 1.4 ft³/s. HydroComplete uses the exact exponents 5/3 and 8/3 that 1.67 and 2.67 abbreviate. Solution (1) is run in reverse: HydroComplete evaluated at HEC-22's answer T = 9.0 ft should return the 1.8 ft³/s that HEC-22 started from (9.0 is itself rounded, so ±0.05 ft³/s).

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Q at T = 8.2 ft1.4 ft³/s1.41 ft³/s+0.01 (+0.73%)±0.05HEC-22 reports Q to 0.1 ft³/sMatch
Q at T = 9.0 ft (Solution 1 in reverse)1.8 ft³/s1.81 ft³/s+0.01 (+0.42%)±0.05T = 9.0 ft is rounded; dQ/dT at 9 ft is 0.53 ft³/s per ftMatch

Manning's equation, trapezoidal channel capacity and normal depth

Conveyance (Manning) · engine: Conveyance · ConveyanceEngine.calculateChannelCapacity({ bottomWidth, sideSlope, manningsN, slope, depth | designFlow }) · case module build-tools/validation/cases/12-hec22-trapezoidal-channel.js

Published reference

FHWA HEC-22, 3rd ed. (2009), Chapter 5, Example 5-1 (English units), pp. 5-6 to 5-7; eq. 5-5. [document]

Inputs

SectionB = 2.62 ft, side slopes z = 3 (H:V), depth d = 1.64 ft
Slope / roughnessSo = 0.01, n = 0.030

Formula and hand steps

$A = Bd + zd^2, \quad P = B + 2d\sqrt{1+z^2}, \quad R = A/P, \quad Q = \frac{1.49}{n}\,A\,R^{2/3}\,S_o^{1/2}$

HEC-22 rounds A to 12.4 ft², P to 13.0 ft, R to 0.95 ft and Qn to 1.79, then Q = 1.79/0.030 = 59.7 ft³/s, V = 4.8 ft/s. Unrounded: A = 12.366, P = 12.992, R = 0.9518, Q = 59.42 ft³/s. The 0.3 ft³/s spread is HEC-22's intermediate rounding (R0.67 with R = 0.95 vs R2/3 with R = 0.9518), so the tolerance is set to that rounding envelope, not to HydroComplete's output. The normal-depth row inverts the problem: given Q = 59.7 ft³/s, the engine's iterative solver should return d = 1.64 ft.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Capacity Q at d = 1.64 ft59.7 ft³/s59.42 ft³/s−0.28 (−0.46%)±0.5HEC-22 carries A, P, R and Qn to 3 significant figures; unrounded arithmetic gives 59.4Match
Velocity V4.8 ft/s4.81 ft/s+0.01 (+0.12%)±0.05Match
Normal depth for Q = 59.7 ft³/s1.64 ft1.643 ft+0.003 (+0.18%)±0.01Match

Manning's equation, circular pipe full and half full

Conveyance (Manning) · engine: Conveyance · ConveyanceEngine.calculatePipeCapacity() and partialFlowCircular(D, S, n, d) · case module build-tools/validation/cases/13-circular-pipe-half-full.js

Closed-form reference

Closed-form hand calculation (Manning's equation with the circular-segment geometry, as in FHWA HEC-22 Chapter 7 and TR-55 eq. 3-4). No published number is needed: at half depth R equals the full-pipe R, so Qhalf = Qfull/2 exactly. [document]

Inputs

Pipe24 in (D = 2.0 ft) RCP, n = 0.013, S = 0.01
Depthsfull (d = D) and half full (d = 12 in)

Formula and hand steps

$A_{full} = \tfrac{\pi D^2}{4} = 3.1416\ \text{ft}^2, \quad R_{full} = \tfrac{D}{4} = 0.5\ \text{ft}, \quad V = \tfrac{1.49}{0.013}\,0.5^{2/3}\,0.01^{0.5} = 7.220\ \text{ft/s}, \quad Q_{full} = 22.683\ \text{ft}^3\text{/s}$
$d = \tfrac{D}{2}:\quad \theta = 2\cos^{-1}(0) = \pi, \quad A = \tfrac{D^2}{8}(\pi - \sin\pi) = \tfrac{\pi D^2}{8}, \quad P = \tfrac{\pi D}{2}, \quad R = \tfrac{D}{4} \Rightarrow Q_{half} = \tfrac{Q_{full}}{2} = 11.342$

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Full-pipe capacity closed form22.683 ft³/s22.6833 ft³/s0.0000 (0.00%)±0.001Match
Half-full flow closed form11.342 ft³/s11.3416 ft³/s0.0000 (0.00%)±0.001Match
Half-full velocity (= full velocity) closed form7.220 ft/s7.2200 ft/s−0.0003 (0.00%)±0.005Match

RUSLE slope length-steepness factor LS

Erosion / sediment · engine: SEDCAD4 · SEDCAD4Engine.calculateLSFactor(slopeLength_ft, slopePercent) · case module build-tools/validation/cases/14-ah703-rusle-ls-factor.js

Published reference

Renard, K.G., Foster, G.R., Weesies, G.A., McCool, D.K., Yoder, D.C. (1997). Predicting Soil Erosion by Water: A Guide to Conservation Planning with the Revised Universal Soil Loss Equation (RUSLE). USDA Agriculture Handbook No. 703. Chapter 4, eqs. 4-1 to 4-5 (pp. 105-107) and the Table 4-2 value quoted on p. 112. [document]

Inputs

Slope400 ft long, 10% uniform (moderate rill/interrill ratio, Table 4-2)
Unit-plot checksλ = 72.6 ft at 10% and at 5% (L = 1, so LS = S)

Formula and hand steps

$\beta = \frac{\sin\theta/0.0896}{3.0\,(\sin\theta)^{0.8} + 0.56}, \quad m = \frac{\beta}{1+\beta}, \quad L = \left(\frac{\lambda}{72.6}\right)^m, \quad S = \begin{cases}10.8\sin\theta + 0.03 & s < 9\% \\ 16.8\sin\theta - 0.50 & s \ge 9\%\end{cases}$

10%: sin θ = 0.0995, β = 1.0745, m = 0.5179, L = (400/72.6)0.518 = 2.420, S = 16.8 × 0.0995 − 0.50 = 1.1717, LS = 2.836 (AH703 p. 112: 2.84). HydroComplete evaluates eqs. 4-1 to 4-5 as written (moderate rill/interrill ratio, eq. 4-3); the unrounded result is 2.836, which AH703 prints as 2.84.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
LS, 400 ft at 10%2.842.836−0.004 (−0.15%)±0.005AH703 prints LS to 0.01Match
S at 10% (eq. 4-5, via LS at λ = 72.6 ft) closed form1.17171.171660.00000 (0.00%)±0.0005Match
S at 5% (eq. 4-4, via LS at λ = 72.6 ft) closed form0.56930.569330.00000 (0.00%)±0.0005Match

MUSLE single-storm sediment yield

Erosion / sediment · engine: SEDCAD4 · SEDCAD4Engine.calculateMUSLE({ runoffVolume, peakFlow, K, LS, C, P }) · case module build-tools/validation/cases/15-musle-single-storm.js

Closed-form reference

Williams, J.R. (1975), "Sediment-yield prediction with Universal Equation using runoff energy factor", USDA-ARS S-40; equation and units as restated in USACE, HEC-HMS Applications Guide, "Case Study: Estimating Sediment Yield in the Upper North Bosque River Watershed (UNBRW)", eq. 11. Closed-form evaluation, all steps shown. [document]

Inputs

Runoff volume Q2.5 acre-ft
Peak discharge qp120 ft³/s
K, LS, C, P0.28, 1.5, 0.9, 1.0 (construction-site cover, no practice)

Formula and hand steps

$Y = 95\,(Q\,q_p)^{0.56}\,K\,LS\,C\,P$

Q qp = 2.5 × 120 = 300; (300)0.56 = 24.3887; 95 × 24.3887 = 2316.92; × 0.28 × 1.5 × 0.9 × 1.0 = 875.80 tons.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Event sediment yield Y closed form875.80 tons875.800 tons+0.003 (0.00%)±0.01Match
Runoff energy term 95 (Q qp)0.56 closed form2316.92,316.90−0.02 (0.00%)±0.1Match

Camp's ideal-basin trap efficiency (two-bin PSD)

Erosion / sediment · engine: SEDCAD4 · SEDCAD4Engine.calculateCampEfficiency(Q, As, psd7, { waterTempC }) · case module build-tools/validation/cases/16-camp-trap-efficiency.js

Closed-form reference

Camp, T.R. (1946), "Sedimentation and the design of settling tanks", Trans. ASCE 111; vc = Q/A as stated in USACE HEC-HMS Technical Reference Manual, "Chen Sediment Trap". Fall velocities: Stokes' law and Rubey (1933) as printed in HEC-HMS TRM, "Fall Velocity and Settling". Closed-form evaluation, all steps shown. [document]

Inputs

BasinQ = 1.0 ft³/s, surface area As = 2,000 ft² → Vo = 5.0 × 10-4 ft/s
Sediment60% silt (d = 0.010 mm), 40% fine sand (d = 0.158 mm); SG 2.65; 20 °C

Formula and hand steps

$V_o = \frac{Q}{A_s}, \qquad \eta_i = \min\!\left(1, \frac{V_{s,i}}{V_o}\right), \qquad \eta = \sum f_i\,\eta_i$
$\text{Stokes: } V_s = \frac{g(\rho_s-\rho)d^2}{18\mu} = \frac{9.81 \times 1650 \times (10^{-5})^2}{18 \times 1.004\times10^{-3}} = 8.957e-5\ \text{m/s} = 2.939e-4\ \text{ft/s}$
$\text{Rubey (0.158 mm): } F_1 = 0.3574, \quad \omega = F_1\sqrt{(s-1)gd} = 0.0181\ \text{m/s} = 0.0593\ \text{ft/s}$

ηsilt = 2.939e-4 / 5.0×10-4 = 0.5877; ηfine sand = min(1, 119) = 1; η = 0.6 × 0.5877 + 0.4 × 1 = 0.7526 = 75.3%.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Overall trap efficiency closed form75.3 %75.26 %0.00 (0.00%)±0.05Match
Silt settling velocity (Stokes) closed form2.939e-4 ft/s2.939e-4 ft/s0.00e+0 (0.00%)±2.9e-7Match
Fine-sand settling velocity (Rubey) closed form0.0593 ft/s0.05930 ft/s0.00000 (0.00%)±0.0001Match

NCDEQ Simple Method design volume (1-inch storm)

Water quality (IDEAL) · engine: IDEAL · IDEALEngine.calculateWQV(designRainfall_in, drainageArea_ac, imperviousPercent) · case module build-tools/validation/cases/17-ncdeq-simple-method-volume.js

Closed-form reference

NCDEQ, Stormwater Design Manual, Part B Stormwater Calculations, "Simple Method for Runoff Volume" (revised 3-15-2017, p. 2). Closed-form evaluation of the published equations, all steps shown. [document]

Inputs

Design storm depth RD1.0 in (non-coastal NC)
Drainage area A12 ac
Impervious fraction IA0.65 (65%)

Formula and hand steps

$R_V = 0.05 + 0.9\,I_A = 0.05 + 0.9 \times 0.65 = 0.635, \qquad DV = 3630\,R_D\,R_V\,A = 3630 \times 1.0 \times 0.635 \times 12 = 27660.6\ \text{ft}^3$

HydroComplete writes the same coefficient as 0.05 + 0.009 × I(%) and the volume as P · Rv · A · 43,560 / 12; 43,560/12 = 3,630, so the two forms are algebraically identical.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
Runoff coefficient RV closed form0.6350.63500.0000 (0.00%)±0.0005Match
Design volume DV closed form27660.6 ft³27,660.60 ft³0.00 (0.00%)±0.5Match
Design volume in acre-ft closed form0.6350 ac-ft0.63500 ac-ft0.00000 (0.00%)±0.00005Match

Weir outlets: emergency spillway and rectangular weir

Detention / outlets · engine: Hydraflow · HydraflowEngine.generateStorageCurve({ outlets: { type: 'weir', length, Cw, crestElev } }) · case module build-tools/validation/cases/18-weir-outlets.js

Published reference

FHWA HEC-22, 3rd ed. (2009), Chapter 8, Example 8-8 and eq. 8-26, pp. 8-35 to 8-36 (Q = 40.6 ft³/s at Hp = 0.98 ft). USDA-NRCS TR-55 (1986), Chapter 6, Example 6-1 and eq. 6-4, p. 6-4 (Lw = 4.1 ft, Hw = 5.7 ft, C = 3.2). [document]

Inputs

HEC-22 Ex. 8-8broad-crested spillway, b = 16.4 ft, Csp = 2.55, invert 38.0 ft, stage 38.98 ft
TR-55 Ex. 6-1rectangular weir, Lw = 4.1 ft, C = 3.2, crest 100.0 ft, stage 105.7 ft

Formula and hand steps

$Q = C\,L\,H^{1.5}$

HEC-22: 2.55 × 16.4 × 0.981.5 = 40.57 ft³/s (printed 40.6). TR-55: 3.2 × 4.1 × 5.71.5 = 3.2 × 4.1 × 13.609 = 178.5 ft³/s; TR-55 sized the weir for 180 ft³/s and rounded Lw to 4.1, so the reference row uses the rounded length and the closed-form result.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
HEC-22 Ex. 8-8 spillway Q at Hp = 0.98 ft40.6 ft³/s40.57 ft³/s−0.03 (−0.07%)±0.05Match
TR-55 Ex. 6-1 weir qo at Hw = 5.7 ft, Lw = 4.1 ft (eq. 6-4 closed form) closed form178.5 ft³/s178.54 ft³/s0.00 (0.00%)±0.05Match

HydroCAD 10.10-4a side-by-side: real project file, runoff, culvert outlets and pond routing

Side-by-side (HydroCAD) · engine: Hydraflow · FileImporter.importFile(.hcp) → HydraflowEngine.generateTR20Hydrograph / culvertDischargeAtHead / generateStorageCurve / routeThroughDetention · case module build-tools/validation/cases/19-hydrocad-side-by-side.js

Published reference

HydroCAD 10.10-4a printed report for a McGill Associates scratch model of a 55.4-acre site in northern Illinois, printed 3/3/2026 (16 pp.). SCS TR-20 runoff, SCS unit hydrograph, Stor-Ind routing, time span 5.00–20.00 hr at dt 0.05 hr; storms "100yr" 8.57 in and "2yr" 3.34 in, SCS Type II 24-hr (p. 2). Node summaries pp. 8–10 and 12–14. The project file is read at build time from the private test fixtures and is not published; message texts [82]/[85]/[92]/[93] are quoted from hydrocad.net/messages.htm. [document]

Inputs

Project fileHydroCAD 10.10-4a .hcp, FileUnits = English (areas in sf, Tc in seconds, storm depth in feet, converted on import). 19 subcatchments, 10 ponds, 7 links; the report prints nodes 26P, 27P and 28L only, so those are what is compared.
Subcatchments into the existing pond (27P)22S: 9.62 ac, CN 83, Tc 17.3 min; 23S: 12.32 ac, CN 80, Tc 22.0 min; 24S: 22.72 ac, CN 81, Tc 11.8 min; 25S: 10.78 ac, CN 93, Tc 19.3 min. Σ = 55.44 ac (report p. 9: "Inflow Area 55.440 ac").
StormsSCS Type II 24-hr, 8.57 in (100-yr) and 3.34 in (2-yr); HydroCAD time span 5.00–20.00 hr, dt 0.05 hr. HydroComplete runs at the same dt.
Existing pond 27P stage-area664 ft / 290,386 sf, 665 ft / 326,222 sf, 666 ft / 337,428 sf, 667 ft / 356,753 sf (prismatic). Cum. storage at the table top 987,220 cf (p. 9). Note the table stops at 667 ft, below the primary culvert invert 667.76 ft (HydroCAD message [92]).
27P outlets#1 24 in RCP, invert 667.76 / outlet 667.75 ft, L 37.3 ft, n 0.013, Ke 0.2, groove-end projecting, Primary; #2 6 in CPP, invert 666.82 ft, L 40 ft, Ke 0.9, Secondary; #3 4.7 in CPP, invert 665.00 ft, L 40 ft, Ke 0.5, Tertiary (p. 9). All three "Barrel Controls" at the 100-yr head (p. 10).
Second pond 26P7-point stage-area table (ft / sf): 664 / 43,486, 665 / 47,038, 666 / 50,705, 667 / 54,480, 668 / 58,355, 669 / 62,330, 670 / 66,405; cum. storage 327,854 cf; no outlet devices (p. 8).

Formula and hand steps

$Q = \frac{(P - 0.2S)^2}{P + 0.8S},\quad S = \frac{1000}{CN} - 10 \qquad q_p = \frac{484\,A\,Q}{T_p},\quad T_p = \tfrac{2}{3}T_c \text{ (NEH-630 Ch. 16)}$

Runoff: SCS curve number with the SCS Type II 24-hr mass curve evaluated at every 0.05-hr step, convolved with the NRCS dimensionless unit hydrograph (Table 16-1 ratios, 0.1 Tp to 2.0, 0.2 to 4.0, 0.5 to 5.0). The four subcatchment hydrographs are summed on the common grid. HydroCAD's printed volumes cover its 5.00–20.00 hr span only (it printed "[82] Early inflow requires earlier time span" and "Inflow Depth > 6.14 in"), so the window volume is compared to the report and the full-storm volume to the closed-form CN volume.

$\text{Barrel (outlet) control:}\quad HW - h_o + S L = \left(1 + K_e + \frac{29 n^2 L}{R^{4/3}}\right)\frac{V^2}{2g}$

HydroCAD's barrel equation takes the outlet crown (ho = D) as the downstream energy datum; HDS-5 uses ho = (dc + D)/2. HydroComplete exposes both (outletDepth:'crown' replicates HydroCAD; the default is HDS-5). On the 24-in barrel that is 2.00 vs 1.93 ft of tailwater datum, a 1.6 % difference in discharge; on the 6-in and 4.7-in pipes dc = D and the two conventions coincide. Hand check on the 24-in at 4.28 ft head: 4.28 − 2.00 + 0.01 = 2.29 ft = (1 + 0.2 + 0.083)×V²/2g → V = 9.42 ft/s, Q = 29.6 cfs.

$\frac{2S_2}{\Delta t} + O_2 = (I_1 + I_2) + \left(\frac{2S_1}{\Delta t} - O_1\right) \qquad \text{(Stor-Ind / Modified Puls)}$

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
100-yr combined inflow peak to 27P (p. 9)410.34 cfs410.339 cfs−0.001 (0.00%)±12.313 % of reference; UH implementation, HydroCAD dt 0.05 hrMatch
100-yr time of peak (p. 9)12.06 hr12.000 hr−0.060 (−0.50%)±0.1HydroCAD prints an interpolated peak time; ours is on the 0.05-hr gridMatch
100-yr inflow volume, HydroCAD 5.00–20.00 hr span (p. 9)28.354 af28.3428 af−0.0112 (−0.04%)±0.140.5 %; same window applied to our hydrographMatch
100-yr full-storm volume vs closed-form CN volume ΣA·Q/12 closed form30.391 af30.3775 af−0.0140 (−0.05%)±0.150.5 %; HydroCAD does not print the full-storm valueMatch
2-yr combined inflow peak to 27P (p. 14)113.98 cfs114.267 cfs+0.287 (+0.25%)±3.423 % of referenceMatch
2-yr time of peak (p. 14)12.07 hr12.050 hr−0.020 (−0.17%)±0.1Match
2-yr inflow volume, 5.00–20.00 hr span (p. 14)7.589 af7.5904 af+0.0014 (+0.02%)±0.0380.5 %Match
2-yr full-storm volume vs closed-form CN volume closed form8.243 af8.2417 af−0.0012 (−0.01%)±0.0410.5 %Match
2-yr peak stage in 27P (p. 14)665.07 ft665.068 ft−0.002 (0.00%)±0.02stage-table interpolation rule onlyMatch
2-yr storage in 27P at 20 hr (p. 14)330,391 cf330,746.5 cf+355.5 (+0.11%)±16520.5 %Match
#1 24 in RCP at HW 672.04 ft, head 4.28 ft — HydroCAD outlet-depth convention (p. 10)29.58 cfs29.615 cfs+0.035 (+0.12%)±0.31 %; same barrel equation and datumMatch
#1 24 in RCP, same head — HydroComplete default (HDS-5, ho = (dc + D)/2)29.58 cfs30.050 cfs+0.470 (+1.59%)±0.592 %; the outlet-datum convention difference described aboveMatch
#2 6 in CPP at HW 672.04 ft, head 5.22 ft (p. 10)1.52 cfs1.529 cfs+0.009 (+0.57%)±0.0151 %Match
#3 4.7 in CPP at HW 672.04 ft, head 7.04 ft (p. 10)1.03 cfs1.034 cfs+0.004 (+0.41%)±0.011 %Match
100-yr storage at the 27P peak, HydroCAD constant-storage convention (p. 9)987,220 cf987,219.5 cf−0.5 (0.00%)±9870.1 %; the table top, by construction under this conventionMatch
100-yr 27P outflow volume through 20 hr, same convention (p. 9)5.702 af5.7294 af+0.0274 (+0.48%)±0.173 %; a mass-balance comparison under the same conventionMatch
100-yr peak stage in 27P — HydroCAD convention replicated (aboveTable:'constant-storage')672.04 ft673.254 ft+1.214 (+0.18%)n/aHydroCAD flagged this run "[85] Oscillations … severity = 59"; see the noteConvention
100-yr peak outflow from 27P — HydroCAD convention replicated32.13 cfs38.629 cfs+6.499 (+20.23%)n/aoscillation artefact in both programsConvention
100-yr peak stage in 27P — HydroComplete default (aboveTable:'extend-last-area')672.04 ft667.637 ft−4.403 (−0.66%)n/atop surface area (356,753 sf) extended upwardConvention
100-yr peak outflow from 27P — HydroComplete default32.13 cfs1.045 cfs−31.085 (−96.75%)n/athe 24-in invert at 667.76 ft is barely engagedConvention
26P stage at 36,341 cf on its table, no outflow (p. 8)664.81 ft664.803 ft−0.007 (0.00%)±0.02HydroCAD interpolates prismatically within the first foot; ours is linear in storage at 0.01 ftMatch
26P storage after feeding 36,341 cf (p. 8)36,341 cf36,341.0 cf0.0 (0.00%)±1820.5 %Match

Notes

What matched. Runoff peaks and volumes, the 2-yr routing (which stays inside the stage-area table), all three culvert barrel discharges under HydroCAD's outlet-depth convention, the pinned 100-yr storage and the 100-yr outflow volume under HydroCAD's above-table convention (our primary/secondary/tertiary split through 20 hr: 4.932 / 0.356 / 0.442 af against HydroCAD's 4.864 / 0.394 / 0.445 af, p. 9), and the second pond's stage from storage. The time-of-peak deltas are the 0.05-hr grid: HydroCAD prints an interpolated time.

Volume window. HydroCAD's report volumes are for its 5.00–20.00 hr computed span, and it said so ("[82] Early inflow requires earlier time span", "Inflow Depth > 6.14 in"). Our full 24-hr volumes are 30.377 af (100-yr) and 8.242 af (2-yr) against the closed-form CN volumes 30.391 and 8.243 af; the windowed values 28.343 and 7.590 af are what the report prints. The truncated span hides about 2.0 af of the 100-yr storm.

The one place the two programs legitimately diverge: routing above the storage table. The 27P table ends at 667 ft, below the 24-in primary invert (667.76 ft, HydroCAD "[92] Device #1 is above defined storage"), and the 100-yr pool went to 672.04 ft (HydroCAD "[93] Storage range exceeded by 5.04'"). HydroCAD message [93] (hydrocad.net/messages.htm) documents what it does then:

"The water surface elevation has exceeded the highest defined stage. All defined storage has been filled. Routing continues by applying additional head to the outlet(s), but without utilizing any additional storage. In essence, the pond has been extended upward as a pencil-thin chamber with no additional storage."

That is why the report shows storage = 987,220 cf (the table top) at 672.04 ft. With zero storage above the table the storage-indication equation degenerates to O2 = I1 + I2 − O1 and saw-tooths between roughly I and 2I; HydroCAD flagged it ("[85] Oscillations may require smaller dt, severity = 59") and so does our engine when asked to replicate the convention (11,342 spurious peaks counted). The inflow when the pond first reaches the table top is 21.6 cfs at 13.69 hr (HydroCAD: 13.80 hr), so the artefact band is roughly 22–43 cfs; HydroCAD's 32.13 cfs and our 38.6 cfs are both samples of that band, which is why those rows are marked Convention and not pass/fail. Under HydroComplete's default, the top surface area is carried upward (vertical walls), the pool tops out at 667.64 ft with 1,214,313 cf stored and 1.05 cfs leaving, and there is no oscillation. Neither answer is the engineering answer: the table needs contours above 667 ft, which is what HydroCAD's own guidance on that page says too. Both conventions and an 'error' mode are available, and every route reports the condition:

Engine warnings, constant-storage replication run:

  • Storage range exceeded by 6.25 ft: peak stage 673.25 ft is above the top of the elevation-area table (667.00 ft); no storage was credited above the table (constant-storage convention) — the stage is set by the outlet rating alone. Define storage above the highest outlet before relying on this stage.
  • Outlet "culvert" invert/crest 667.76 ft is above the top of the elevation-area table (667.00 ft); it only operates in the extrapolated range.
  • Oscillations: the routed outflow has 11342 spurious peaks (storage-indication instability — too little storage for the outlet rating at this step); peak outflow 38.63 cfs and peak stage 673.25 ft are numerical artefacts. Add storage above the highest outlet or reduce the routing step.

Engine warnings, default run:

  • Storage range exceeded by 0.64 ft: peak stage 667.64 ft is above the top of the elevation-area table (667.00 ft); storage above the table was extrapolated with the top surface area (356,753 sf, vertical walls). Define storage above the highest outlet before relying on this stage.
  • Outlet "culvert" invert/crest 667.76 ft is above the top of the elevation-area table (667.00 ft); it only operates in the extrapolated range.

The second pond (26P) inherits the artefact: its inflow is the secondary + tertiary pipes at the artefact stage (HydroCAD 2.55 cfs / 0.838 af through 20 hr; ours 2.84 cfs / 0.797 af under the same convention). Its own stage-from-storage row is inside the table and matches.

HEC-HMS 4.13 side-by-side: real basin model, frequency-storm runoff volume and peaks

Side-by-side (HEC-HMS) · engine: Hydraflow · FileImporter.importFile(.basin) → HydraflowEngine.registerCustomDistribution(.met storm) → generateTR20Hydrograph(dt 1 min, { unitDuration_hr }) · case module build-tools/validation/cases/20-hechms-side-by-side.js

Published reference

HEC-HMS 4.13 basin model of the same 55.4-acre northern-Illinois site as case 19 (a later, revised model: different subbasin set, CN 85/87, lag in minutes). Reference peaks from the project's run-summary sheets (pp. 1–2, 100-yr and 2-yr) and the Run_53 results file (100-yr, CN 86.2/84.5): peak flow, time of peak, excess volume and depth. Meteorologic models are "Frequency Based Hypothetical" storms (NOAA Atlas 14 depth-duration table, 5-min interval, 1440 min, 50 % before peak) read from the .met files at build time. Project files are private test fixtures and are not published. [document]

Inputs

Basin fileHEC-HMS 4.13 .basin, Unit System English. 9 subbasins, 2 reservoirs (storage-outflow tables in DSS, not imported), 1 reach. Subbasin Area is in square miles and is converted to acres on import (WS8: 0.03775 mi² = 24.16 ac, the run-summary label).
Subbasins comparedWS8: 24.16 ac, CN 87, lag 7.11 min (Tc = lag/0.6 = 11.85 min); WS3: 4.37 ac, CN 85, lag 15.56 min. Run_53 re-runs the same basins at CN 86.2 / 84.5.
100-yr storm (.met)Frequency Based Hypothetical, 5-min blocks, 1440 min, 50 % before peak. Depth-duration: 5 min 0.74, 10 min 1.21, 15 min 1.59, 30 min 2.49, 60 min 3.57, 120 min 4.70, 180 min 5.39, 360 min 6.52, 720 min 7.55, 1440 min 8.57 in.
2-yr storm (.met)Frequency Based Hypothetical; depth-duration: 5 min 0.29, 10 min 0.47, 15 min 0.62, 30 min 0.97, 60 min 1.39, 120 min 1.83, 180 min 2.10, 360 min 2.54, 720 min 2.94, 1440 min 3.34 in.
Computation step1 minute (control specification). HMS places the unit-hydrograph peak at Tp = Δt/2 + lag; HydroComplete reproduces that with unitDuration_hr and otherwise uses NEH-630's Tp = ⅔Tc.

Formula and hand steps

$\text{Frequency storm: } d(t) = \exp\!\left[\ln d_i + \frac{\ln t - \ln t_i}{\ln t_{i+1} - \ln t_i}\,(\ln d_{i+1} - \ln d_i)\right],\quad \Delta d_k = d(k\,\Delta t) - d((k-1)\Delta t)$

The incremental depths are ranked and placed alternately either side of the block at 50 % of the duration (largest at the centre, second to its left, third to its right, and so on) — the HEC-HMS Frequency Storm construction. The resulting 288-block hyetograph is registered as a custom distribution and run through the same SCS curve-number / dimensionless-unit-hydrograph path as every other case.

$Q = \frac{(P - 0.2S)^2}{P + 0.8S}, \qquad T_p = \frac{\Delta D}{2} + 0.6\,T_c \;\; (\Delta D = \Delta t \text{ for HMS; } 0.133\,T_c \text{ for NEH})$

Closed-form check on WS8 at CN 86.2: S = 1.601 in, Q = (8.57 − 0.320)² / (8.57 + 1.281) = 6.909 in; HMS printed 6.909 in. Volume = 24.16 ac × 6.909 / 12 = 13.91 af.

Result

CheckReferenceHydroCompleteDeltaToleranceStatus
WS8 100-yr runoff volume, CN 86.2 (Run_53 results)13.910 af13.8979 af−0.0124 (−0.09%)±0.070.5 %; a CN mass-balance checkMatch
WS8 100-yr excess depth, CN 86.2 (Run_53 results; closed-form CN) closed form6.909 in6.9090 in−0.0001 (0.00%)±0.005reported to 0.001 in; engine rounds to 0.001Match
WS3 100-yr runoff volume, CN 84.5 (Run_53 results)2.442 af2.4418 af−0.0002 (−0.01%)±0.0120.5 %Match
WS8 100-yr peak, CN 86.2, HMS Tp placement (Run_53 results)150.93 cfs149.430 cfs−1.503 (−1.00%)±4.533 %Match
WS8 100-yr time of peak (Run_53: 12:08)12.133 hr12.1700 hr+0.0367 (+0.30%)±0.1Match
WS3 100-yr peak, CN 84.5, HMS Tp placement (Run_53 results)20.56 cfs20.510 cfs−0.048 (−0.23%)±0.623 %Match
WS3 100-yr time of peak (Run_53: 12:17)12.283 hr12.3200 hr+0.0367 (+0.30%)±0.1Match
WS8 100-yr peak, CN 87, HMS Tp placement (run summary p. 1)152.37 cfs150.800 cfs−1.570 (−1.03%)±4.573 %Match
WS3 100-yr peak, CN 85, HMS Tp placement (run summary p. 1)20.70 cfs20.650 cfs−0.050 (−0.24%)±0.623 %Match
WS8 2-yr peak, CN 87, HMS Tp placement (run summary p. 2)46.39 cfs46.290 cfs−0.100 (−0.22%)±1.3923 %Match
WS3 2-yr peak, CN 85, HMS Tp placement (run summary p. 2)5.94 cfs5.950 cfs+0.010 (+0.17%)±0.183 %Match
WS8 100-yr peak, CN 87, HydroComplete default Tp = ⅔Tc (run summary p. 1)152.37 cfs149.250 cfs−3.120 (−2.05%)±7.625 %; NEH placement sits a few % below HMS by constructionMatch
WS3 100-yr peak, CN 85, HydroComplete default Tp = ⅔Tc (run summary p. 1)20.70 cfs20.060 cfs−0.640 (−3.09%)±1.0355 %Match

Notes

What matched. Import (areas, CNs, lags, links), runoff volumes to 0.1 % (they are the same closed-form CN equation), and peaks within 1 % on the larger basin and 0.5 % on the smaller one once the unit hydrograph is placed where HMS places it. HydroComplete's default placement (Tp = ⅔Tc, NEH-630 eq. 16A-13) gives peaks 2–3 % lower on these 12–26-minute basins; that is a documented convention difference between the two programs, not a defect in either, and the option to match HMS is exposed as unitDuration_hr.

Storm caveat. The run-summary captions and the .met descriptions say "SCS Type II 24-hr", but the meteorologic method in the .met files is Frequency Based Hypothetical (Atlas 14 nested blocks). The two are not interchangeable: for this location the nested storm carries 2.49 in in its peak 30 minutes where Type II carries 3.11 in, and the same WS8 basin run under SCS Type II at 8.57 in peaks at 232 cfs instead of 151 cfs. Every row above uses the storm HMS actually ran.

Not compared. The two reservoirs' storage-outflow ratings are stored in DSS, which the importer does not read (it keeps the initial pool, 7.489 ac-ft, and warns). Pond routing against HMS is therefore not on this page; the pond-routing comparison is case 19 against HydroCAD.

How to reproduce

The case modules in build-tools/validation/cases/ hold the inputs, the reference value and citation, the tolerance, and a run() that calls the engine. The same modules drive this page and the test suite, so the page cannot say one thing and the tests another.

# from a checkout of the HydroComplete repository
npm install
npx vitest run tests/validation-suite.test.js     # asserts every check above
node build-tools/build-validation.js               # regenerates this page

The application repository is private; licensed users who want to audit the suite can request read access, and the open-source companions (Civil 3D add-in, OpenCAD plugin, swmm-breach) are listed on the open-source page.

Every check that is "within source precision" is asserted as |HydroComplete − reference| ≤ tolerance. Every "differs" check is asserted against its locked HydroComplete value, so an engine change that moves it — in either direction — fails the suite and forces this page to be updated honestly.

Check any of these yourself

Open the app, build the case from the inputs above, and compare. Every calculation shows its formula and substitution in the report.

Sources

Footnote on unit tests: as of this build the repository carries 464 vitest unit tests in 36 files plus 31 node integration scripts under tests/. Those check that the code does what the code intends; the cases on this page check that what it intends matches the published references. Only the second kind is evidence a reviewer should care about, which is why the count is a footnote.

— Michael Flynn, PE
Cases are added as we find published examples that exercise a shipped engine path. If you know a worked example we should run, or you find a number here that is wrong, tell us and it will be fixed on the page, not in the tolerance.