In this post, i presented my simulation of free surface over cylindrical spillway using OpenFOAM solver (interFoam).
following steps are conducted for preparing case:
Create grid with OpenFOAM mesh generators
- generate base grid with blockMesh
- extract spillway from base grid and refine locally around spillway with snappyHexMesh
- extrude front patch to create 2D grid for simulation
The extrudeMeshDict setup is:
constructFrom patch; sourceCase "."; sourcePatches (front); exposedPatchName back; flipNormals false; extrudeModel linearNormal; nLayers 1; expansionRatio 1.0; linearNormalCoeffs { thickness 0.1; } mergeFaces false; mergeTol 0;
snappyHexMesh divides cells in z direction which is not suitable for 2D simulation. Thus extrudeMesh extrudes the front patch, so the final grid have only one cell in z direction. The final grid is shown below:
Simulation settings and result
- apply setFields to create non-uniform initial condition for volume fraction
- apply blank roughness using wall function nutRoughWallFunction via turbulence model
- run solver interFoam
- add appropriate functions into controlDict via swak4Foam for post processing. For example, the depth of water over spillway crest is calculated as follow:
depthOverCrest { type swakExpression; valueType set; verbose true; setName yb1; set { type uniform; axis y; start ( 0 -0.175 -0.15 ); end ( 0 0.175 -0.15 ); nPoints 60; } aliases { alpha1 alpha.water; } expression "(alpha1 > 0.5) ? pos().y+0.175 :0"; accumulations (max); interpolate true; interpolationType cellPoint ; outputControlMode timeStep; outputInterval 1; }
For inlet, variableHeightFlowRate and variableHeightFlowRateInletVelocity is employed for alpha.water and velocity, respectively. These BCs consider the effect of downstream on the patch.
Hi Nima – I am curious to which BCs you used for this model.
Regards
JFM
i will edit the post and add the bc condition information