Skip to content

sgoudarzi/dam-break-validation

Repository files navigation

Dam Break with Downstream Obstacle — VoF Validation & Grid-Convergence Study

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.

Why this matters

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.

Problem

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 own obstacle patch 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.water sample for surge-front tracking

Geometry

Geometry

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)

Mesh

Mesh

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

Validation metrics

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

Grid-convergence study

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

Convergence

Key finding

  • Integrated force is mesh-convergentF_x holds at ~2.65 N within a 0.6 % band across an 11× change in cell count.
  • Impact impulse is mesh-convergent∫ p·dt settles 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.

Repository layout

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

Running

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

Outputs: front_overlay.png, convergence.png, and a console results table.

Status / honest caveats

  • 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-deltaT rerun of the two finest meshes would tighten it.

References

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

About

Validated OpenFOAM free-surface CFD for hydraulic engineering — dam-break impact loading, instrumented and grid-converged.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages