VERIFIED — dispersion +0.2%; H within 4.7%; reflection 1%
Stand up a validated 2D numerical wave tank: a StokesII regular wave is generated at the inlet
(waveVelocity/waveAlpha with active absorption), propagates over a 20 m tank
(~3.5 wavelengths at d = 0.4 m), and exits through a shallowWaterAbsorption outlet. Ten
interfaceHeight wave gauges record the surface elevation; seven of them around mid-tank
feed a least-squares incident/reflected split (Goda–Suzuki style). Case derives from the shipped
stokesII tutorial with the gauge array and a longer run added.
The numerical wave tank is the digital wave basin — every incident-wave load computation starts by proving the tank can make and keep a clean wave. With generation, propagation and absorption verified against wave theory, the same machinery qualifies:
Scaling note: at Froude similarity this 0.05 m / 3 s laboratory-scale wave maps to a ~5 m, ~30 s swell at 100:1 — the tank methodology, not the absolute size, is what carries.
| Quantity | Measured | Theory / input | Error | Gate | Status |
|---|---|---|---|---|---|
| Wavenumber k (phase fit over gauge array) | 1.0916 rad/m | 1.0899 rad/m (dispersion) | +0.2% | ≤ 5% | PASS |
| Wave period at mid-tank | 2.982 s | 3.000 s | -0.59% | — | PASS |
| Wave height, established region (x = 8–18 m) | max err 4.7% | 0.050 m | ≤ 4.7% | ≤ 5% | PASS |
| Height decay over 1.7λ (x = 8→18) | +4.6% | — | < 5% | PASS | |
| Reflection coefficient Kr | 0.010 | 0 (perfect absorption) | — | < 0.10 | PASS |
The x = 2 m gauge (0.35λ from the wavemaker) reads H = 54.2 mm (+8%): the generation near-field carries evanescent modes that decay within about a wavelength, so wave-quality gates apply from x ≥ 8 m — standard NWT practice (Larsen et al. 2019). It is reported, not hidden.
| Item | Setting |
|---|---|
| Tank | 20 m × 0.55 m, still-water depth 0.4 m; 2D (one cell thick, empty sides) |
| Mesh | 500×55 uniform (27,500 cells); Δx = 4 cm (~144 cells/λ), Δz = 1 cm (5 cells per wave height) |
| Wave generation | waveVelocity/waveAlpha, StokesII, ramp 3 s, activeAbsorption at the inlet |
| Outlet | shallowWaterAbsorption wave model |
| Solver | interFoam (VOF), laminar; maxCo = maxAlphaCo = 0.65 |
| Gauges | 10 × interfaceHeight; reflection split over 7 gauges x = 8–12.8 m |
| Fast variant | 250×28, 16 s (~2.5 min): H max err 2.8%, k +0.7%, Kr 0.004 — the regression test |
The case is generated by digitalmodel.solvers.openfoam.validation.build_wave_tank_case; the archived
copy lives at docs/api/cfd/cases/wave_tank/.
The wave-generation stack reproduces linear/Stokes wave physics: dispersion to +0.2%, input wave height held within 4.7% across the established region with 4.6% decay over 1.7 wavelengths, and 1% boundary reflection. The digital wave basin is open for the marine loading backlog (#1171–#1173).
multiphase/interFoam/laminar/waves/stokesII (base case).tests/solvers/openfoam/validation/test_wave_tank.py.Generated from a real OpenFOAM v2312 solve. All chart data and animation frames are computed directly from the solved fields and gauge records — no values are hand-entered.