Validated OpenFOAM free-surface CFD for hydraulic engineering — dam-break impact loading, instrumented and grid-converged.
A two-phase CFD validation study of the classic dam-break-over-an-obstacle
problem in OpenFOAM (interFoam), built around the Koshizuka & Oka (1996)
benchmark geometry. The focus is not just running the case but interrogating
it: instrumenting the obstacle for loading, running a four-mesh grid-convergence
study, and reporting which quantities are mesh-convergent and which are not.
The engineering problem is real. Dam-break and overtopping flows drive inundation and consequence studies, emergency-action planning, and the design of anything the surge hits — bridge piers, walls, buildings, intake structures. The quantity that matters is the load: how hard the water front strikes a downstream object. Underpredict it and a structure fails; overpredict it and you over-build at cost. So the value of a CFD model here is only as good as its predicted forces, which is why this study instruments the obstacle directly rather than stopping at a pretty free-surface animation.
A result you can't trust is worse than no result. CFD will always produce a number; the engineering question is whether that number is real or an artifact of the discretisation. This study answers that explicitly with a four-mesh convergence test — and the key outcome is that not every quantity converges. The integrated force and the impact impulse settle to grid-independent values, but the instantaneous peak pressure diverges without limit as the mesh is refined (a local stagnation-point singularity). Reporting that peak as a design load would be quietly wrong, and finer meshes make it more wrong, not less. Knowing to report force and impulse instead — and being able to prove why — is the difference between a plausible-looking simulation and a defensible engineering deliverable.
Validation against established benchmarks (Koshizuka & Oka, Lobovský) is the credibility chain that hydraulic-CFD practice runs on: you show your method reproduces known experimental data before you trust it on a new geometry. That discipline — benchmark, instrument, converge, report honestly — is the point of this repository as much as the dam-break case itself.
A column of water (width L = 0.146 m, height 2L) collapses under gravity,
surges across the floor, and impacts a rectangular obstacle (24 mm × 48 mm)
sitting downstream — the canonical Koshizuka & Oka configuration.
- Solver:
interFoam(volume-of-fluid, two incompressible phases: water + air) - Turbulence: laminar, matching the established K&O / Ubbink validation chain (the flow is gravity–inertia dominated; turbulence adds little to the front kinematics)
- Mesh: structured
blockMesh; the obstacle is a resolved gap carrying its ownobstaclepatch so loads can be measured directly - Time stepping: adaptive,
maxCo = 0.5 - Instrumentation (function objects): integrated force on the obstacle,
pressure probes on the upstream face, and a floor-line
alpha.watersample for surge-front tracking
All lengths scale with the water-column width L = 0.146 m. The domain is 2D
(one cell thick in z, empty front/back patches).
| Feature | Dimension |
|---|---|
| Domain (tank) | 4L × 4L = 0.584 × 0.584 m |
| Water column | L × 2L = 0.1461 × 0.292 m, against the left wall |
| Obstacle | 24 mm wide × 48 mm tall, upstream face at x = 2L |
| Boundaries | leftWall, rightWall, lowerWall, obstacle (walls); atmosphere (open top) |
Structured blockMesh — uniform hexahedral cells, no grading. The initial water
column (blue) and the obstacle (grey) are overlaid for reference; the obstacle is
a resolved gap in the block topology (not an immersed body), so its faces are true
mesh boundaries that carry the obstacle patch. The grid-convergence study uses
four self-consistent refinement levels at a constant ~1.5× ratio:
| level | cells | cell size h [m] |
|---|---|---|
| coarse | 6 063 | 0.0075 |
| medium | 13 639 | 0.0050 |
| fine | 30 680 | 0.0033 |
| veryfine | 69 419 | 0.0022 |
| Metric | Type | Source to compare against |
|---|---|---|
Surge-front leading edge, Z/L vs T* |
kinematic | Koshizuka & Oka (1996); Martin & Moyce (1952) |
Integrated horizontal force F_x on obstacle |
dynamic | — |
| Impact pressure on upstream face | dynamic | Lobovský et al. (2014); Ubbink (1997) |
Impact impulse ∫ p·dt |
dynamic | — |
Four meshes at a constant ~1.5× linear refinement ratio (6k → 69k cells):
| mesh | cells | h [m] | peak F_x [N] | peak P [kPa] | impulse [Pa·s] |
|---|---|---|---|---|---|
| coarse | 6 063 | 0.0075 | 2.664 | 4.228 | 474.9 |
| medium | 13 639 | 0.0050 | 2.648 | 4.256 | 483.4 |
| fine | 30 680 | 0.0033 | 2.658 | 4.656 | 488.2 |
| veryfine | 69 419 | 0.0022 | 2.643 | 5.535 | 499.8 |
- Integrated force is mesh-convergent —
F_xholds at ~2.65 N within a 0.6 % band across an 11× change in cell count. - Impact impulse is mesh-convergent —
∫ p·dtsettles within ~1–2 %. - Instantaneous peak pressure is not mesh-convergent — it diverges monotonically under refinement (Δ = 0.7 % → 8.6 % → 15.9 %), the expected signature of a local stagnation-point pressure singularity.
The engineering conclusion: report the integrated force and the impact impulse as the loading quantities; treat instantaneous peak pressure as grid-dependent and report it only as a known limitation. Same probe, same data — one metric converges, the other doesn't — which is exactly why impulse, not peak, is the defensible load.
base/ validated single-mesh case (interFoam, K&O geometry)
0.orig/ initial & boundary fields
constant/ g, transportProperties, turbulenceProperties
system/ blockMeshDict, controlDict (+ function objects), schemes/solution
reference/ experimental-data templates + citations (to be digitized)
postprocess/ validate.py — single-case front / pressure / force plots
meshes/ gen_mesh.py + coarse/medium/fine/veryfine blockMeshDicts
runConvergence.sh build + run all four meshes, then plot
runVeryfine.sh run only the 69k mesh (parallel) and re-plot
plotConvergence.py front overlay + force|pressure|impulse convergence + table
Requires OpenFOAM (v2512), Python 3 with numpy + matplotlib.
./runConvergence.sh # builds + runs all four meshes, then plots
# or, to add just the finest mesh to existing results:
./runVeryfine.shOutputs: front_overlay.png, convergence.png, and a console results table.
- Experimental reference overlay pending: the CSVs in
base/reference/are citation-tagged templates. Digitized points from the source figures still need to be added before the front/pressure curves sit against published data. (Deliberately not populated with unverified numbers.) - Laminar by design, to match the benchmark literature; a k-ω SST sensitivity run is a possible robustness check.
- The slight non-monotonicity in the impulse (1.8 → 1.0 → 2.3 %) is most likely
time-step rather than mesh sensitivity; a fixed-
deltaTrerun of the two finest meshes would tighten it.
- Koshizuka, S. & Oka, Y. (1996). Moving-Particle Semi-implicit Method for Fragmentation of Incompressible Fluid. Nuclear Science and Engineering, 123(3).
- Martin, J. C. & Moyce, W. J. (1952). Phil. Trans. R. Soc. A, 244.
- Ubbink, O. (1997). Numerical prediction of two fluid systems with sharp interfaces. PhD thesis, Imperial College London.
- Lobovský, L. et al. (2014). Experimental investigation of dynamic pressure loads during dam break. Journal of Fluids and Structures, 48.


