digitalmodel · CFD verification suite · case 6 · marine · interactive

Numerical Wave Tank: StokesII Generation, Propagation & Absorption vs Wave Theory

Regular-wave generation with active absorption, validated against the linear dispersion relation, the input wave height, and a multi-gauge reflection split. The prerequisite for every incident-wave loading workflow. Issue #1170, epic #1161.

VERIFIED — dispersion +0.2%; H within 4.7%; reflection 1%

SolverinterFoam + waveModels, OpenFOAM ESI v2312
WaveStokesII, H = 0.05 m, T = 3.0 s, d = 0.4 m
Wavelength5.77 m (tank = 3.5λ)
Dispersionk +0.2% vs ω² = gk·tanh(kd)
ReflectionKr = 0.010 (gate < 0.10)
Regression testtests/solvers/openfoam/validation/test_wave_tank.py

1  Objective

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.

What this gates in real work

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.

2  The wave — animated

animation frame
StokesII regular wave propagating left to right over the last two periods (t = 24-30 s). Generation with active absorption at the inlet, shallow-water absorption at the outlet — no standing-wave buildup (Kr = 1%).

3  Wave quality vs theory

QuantityMeasuredTheory / inputErrorGateStatus
Wavenumber k (phase fit over gauge array)1.0916 rad/m1.0899 rad/m (dispersion)+0.2%≤ 5%PASS
Wave period at mid-tank2.982 s3.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 Kr0.0100 (perfect absorption)—< 0.10PASS

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.

4  Numerical model

ItemSetting
Tank20 m × 0.55 m, still-water depth 0.4 m; 2D (one cell thick, empty sides)
Mesh500×55 uniform (27,500 cells); Δx = 4 cm (~144 cells/λ), Δz = 1 cm (5 cells per wave height)
Wave generationwaveVelocity/waveAlpha, StokesII, ramp 3 s, activeAbsorption at the inlet
OutletshallowWaterAbsorption wave model
SolverinterFoam (VOF), laminar; maxCo = maxAlphaCo = 0.65
Gauges10 × interfaceHeight; reflection split over 7 gauges x = 8–12.8 m
Fast variant250×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/.

5  Conclusion

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).

References

  1. OpenFOAM ESI v2312 tutorial multiphase/interFoam/laminar/waves/stokesII (base case).
  2. Larsen, B.E., Fuhrman, D.R. & Roenby, J. (2019). “Performance of interFoam on the simulation of progressive waves.” Coastal Engineering Journal; arXiv:1804.01158.
  3. Goda, Y. & Suzuki, T. (1976). “Estimation of incident and reflected waves in random wave experiments.” Proc. 15th ICCE — incident/reflected split, generalised here to a 7-gauge least-squares fit.
  4. digitalmodel issue #1170 under epic #1161; regression test 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.