算例路径: olaFlow\tutorials\breakwater
算例描述: 波浪对防波堤的作用,堤身为孔隙可渗透结构,堤顶沉箱为不可渗透结构。
学习目标: 渗透模型、可渗结构设置、孔隙材料各项参数设置
算例快照:
文件结构:
.
├── 0.org
│ ├── U
│ ├── alpha.water
│ ├── alpha.water.org
│ ├── epsilon
│ ├── k
│ ├── nut
│ ├── omega
│ ├── p_rgh
│ ├── porosityIndex
│ └── porosityIndex.org
├── cleanCase
├── constant
│ ├── g
│ ├── porosityDict
│ ├── transportProperties
│ ├── triSurface
│ ├── turbulenceProperties_keps
│ ├── turbulenceProperties_sst
│ └── waveDict
├── plotSensPres.py
├── plotSensVOF.py
├── postSensPres.py
├── postSensVOF.py
├── runCaseKEpsilon
├── runCaseSST
└── system
├── blockMeshDict
├── controlDict_OF
├── controlDict_OF+
├── decomposeParDict
├── fvSchemes
├── fvSolution
├── setFieldsDict
└── snappyHexMeshDict
算例文件解析:
【0.org\U】
【0.org\p_rgh】
【0.org\alpha.water.org】
参考 【OpenFOAM】-olaFlow-算例1- baseWaveFlume
【0.org\porosityIndex.org】
// 孔隙材料索引值
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type zeroGradient;
}
outlet
{
type zeroGradient;
}
"wall."
{
type zeroGradient;
}
caisson
{
type zeroGradient;
}
defaultFaces
{
type empty;
}
atmosphere
{
type zeroGradient;
}
}
【0.org\k】
// 湍流动能边界条件
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0.00000001;
boundaryField
{
inlet
{
type inletOutlet;
inletValue uniform 0.00000001;
value uniform 0.00000001;
}
outlet
{
type inletOutlet;
inletValue uniform 0.00000001;
value uniform 0.00000001;
}
"wall."
{
type kqRWallFunction; // kqR 壁面函数边界,该壁面函数实际上就是zeroGradient,适用于高雷诺数情况
value uniform 0.00000001;
}
caisson
{
type kqRWallFunction;
value uniform 0.00000001;
}
defaultFaces
{
type empty;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0.00000001;
value uniform 0.00000001;
}
}
【0.org\nut】
// 湍流粘度边界条件
dimensions [0 2 -1 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type calculated;
value uniform 0;
}
outlet
{
type calculated;
value uniform 0;
}
"wall."
{
type nutkWallFunction; // nutk 壁面函数边界,基于 k 修正壁面涡黏系数
Cmu 0.09;
kappa 0.41;
E 9.8;
value uniform 0;
}
atmosphere
{
type calculated;
value uniform 0;
}
defaultFaces
{
type empty;
}
caisson
{
type nutkWallFunction;
Cmu 0.09;
kappa 0.41;
E 9.8;
value uniform 0;
}
}
【0.org\omega】
// 湍动能比耗散率
dimensions [0 0 -1 0 0 0 0];
internalField uniform 0.001;
boundaryField
{
inlet
{
type inletOutlet;
inletValue uniform 0.001;
value uniform 0.001;
}
outlet
{
type inletOutlet;
inletValue uniform 0.001;
value uniform 0.001;
}
"wall."
{
type omegaWallFunction; // OpenFOAM仅提供了一种 w 壁面函数。
value uniform 0.001;
}
caisson
{
type omegaWallFunction;
value uniform 0.001;
}
defaultFaces
{
type empty;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0.001;
value uniform 0.001;
}
}
【0.org\epsilon】
// 湍动能耗散率,本算例中不要
dimensions [0 2 -3 0 0 0 0];
internalField uniform 0.0001;
boundaryField
{
inlet
{
type inletOutlet;
inletValue uniform 0.0001;
value uniform 0.0001;
}
outlet
{
type inletOutlet;
inletValue uniform 0.0001;
value uniform 0.0001;
}
"wall."
{
type epsilonWallFunction; //
value uniform 0.0001;
}
caisson
{
type epsilonWallFunction;
value uniform 0.0001;
}
defaultFaces
{
type empty;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0.0001;
value uniform 0.0001;
}
}
【constant\turbulenceProperties】
simulationType RAS; // RAS类湍流模型
RAS
{
RASModel kOmegaSST; // k-w SST 湍流模型
turbulence on; // 湍流模型开关
printCoeffs on; // 输出模型系数
}
【constant\waveDict】
waveType regular; // 规则波
waveTheory cnoidal; // 椭圆余弦波
genAbs 1; // 考虑造波边界的消波性能 1/0
absDir 0.0; // 造波边界的消波方向
nPaddles 1; // 主动消波的Paddles数量设置,是patch被分割的垂直切片的(整数)数量。这个参数在消波和斜向造波中起着重要作用,默认值为1,即整个patch作为一个单独的单元起作用。
waveHeight 0.25; // 波高
wavePeriod 3; // 波周期
waveDir 0.0; // 波向
wavePhase 1.57079633; // 初始相位
tSmooth 0.0; // 平滑时间,秒。在产生不规则波或斜向波时,在造波patch上模拟的起始点会有许多波峰和波谷,初始条件必须tapered,以便在边界上得到更平滑的响应。则波面高度和速度都乘以一个因子,该因子在t = 0s到t = tSmooth时从0到1线性变化。tSmooth的默认值为-1,即不使用。
【constant\porosityDict】
// Materials: clear region, core, secondary armour layer, primary armour layer
a 4(0 50 50 50); // 阻力系数
b 4(0 1.2 2.0 0.6); // 阻力系数
c 4(0 0.34 0.34 0.34); // 阻力系数
D50 4(1 0.01 0.035 0.12); // 孔隙材料中值粒径 D50
porosity 4(1 0.49 0.493 0.5); // 各种材料的孔隙率
【system\snappyHexMeshDict】
参考 【OpenFOAM】snappyHexMesh
【system\controlDict】
application olaFlow; // olaFlow求解器
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 60;
deltaT 0.001; // 计算时间步
writeControl adjustableRunTime;
writeInterval 0.05; // 写出时间步
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
compression off; // 是否压缩格式写出,可节约硬盘空间, on/off
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
adjustTimeStep yes; // 采用自适应时间步,可能会加速计算,也可能造成时间步极小
maxCo 0.45; // CFL条件的Courant数, 一般<1, 设置一个小值会使计算结果更精确,但也减小了时间步长,增加了计算成本
maxAlphaCo 0.45; // 两相交界面上的最大Courant数
maxDeltaT 0.05;
functions // 后处理设置
{
gaugesVOF // 用于输出自由水面位置
{
type sets;
libs ("libsampling.so");
writeControl outputTime;
writeInterval 1;
setFormat raw;
surfaceFormat raw;
interpolationScheme cellPoint;
fields ( alpha.water );
sets
(
GaugeVOF01
{
type lineCellFace;
axis xyz;
start ( 0.5 0.001 0 );
end ( 0.5 0.001 1.2 );
}
GaugeVOF02
{
type lineCellFace;
axis xyz;
start ( 9.25 0.001 0 );
end ( 9.25 0.001 1.2 );
}
GaugeVOF03
{
type lineCellFace;
axis xyz;
start ( 15.75 0.001 0 );
end ( 15.75 0.001 1.2 );
}
GaugeVOF04
{
type lineCellFace;
axis xyz;
start ( 17.75 0.001 0 );
end ( 17.75 0.001 1.2 );
}
GaugeVOF05
{
type lineCellFace;
axis xyz;
start ( 21.1 0.001 0 );
end ( 21.1 0.001 1.2 );
}
);
}
gaugesP // 输出点压力
{
type sets;
libs ("libsampling.so");
writeControl outputTime;
writeInterval 1;
setFormat raw;
surfaceFormat raw;
interpolationScheme cellPointFace;
fields ( p );
sets
(
GaugesP
{
type boundaryPoints; // 边界上的点
axis xyz;
patches 1(caisson); // 测量沉箱面上一些点的波压力
points ((18.0 0.01 0.75)
(18.00 0.01 0.80)
(18.00 0.01 0.85)
(18.00 0.01 0.95)
(18.01 0.01 0.70)
(18.25 0.01 0.70)
(18.50 0.01 0.70)
(18.75 0.01 0.70));
maxDistance 0.01; // 根据上述坐标,在 0.01m的范围内搜索几何caisson面上的 points
}
);
}
}
【system\fvSchemes】
【system\fvSolution】
参考 【OpenFOAM】-olaFlow-算例1- baseWaveFlume
【system\setFieldsDict】
defaultFieldValues
(
volScalarFieldValue alpha.water 0 // 设置标量场 alpha 的值
volScalarFieldValue porosityIndex 0 // 设置标量场 porosityIndex 的值
);
regions
(
boxToCell
{
box (-10 -10 -10) (500 10 0.8);
fieldValues
(
volScalarFieldValue alpha.water 1 // box范围内单元的 alpha 值为 1,即水深为 0.8
);
}
surfaceToCell
{
file "./constant/triSurface/primLayer.stl"; // 通过*.stl几何文件确定孔隙材料范围
outsidePoints ((0.25 0.001 0.25)); // definition of outside
includeCut true; // cells cut by surface
includeInside true; // cells not on outside of surf
includeOutside false; // cells on outside of surf
nearDistance -1; // cells with centre near surf
// (set to -1 if not used)
curvature -100; // cells within nearDistance
// and near surf curvature
// (set to -100 if not used)
fieldValues
(
volScalarFieldValue porosityIndex 3 // 孔隙材料索引值 3
// 外部水体的“孔隙材料”索引值 0
// 分别对应 constant\porosityDict 中的孔隙材料阻力系数
);
}
surfaceToCell
{
file "./constant/triSurface/secLayer.stl";
outsidePoints ((0.25 0.001 0.25)); // definition of outside
includeCut true; // cells cut by surface
includeInside true; // cells not on outside of surf
includeOutside false; // cells on outside of surf
nearDistance -1; // cells with centre near surf
// (set to -1 if not used)
curvature -100; // cells within nearDistance
// and near surf curvature
// (set to -100 if not used)
fieldValues
(
volScalarFieldValue porosityIndex 2
);
}
surfaceToCell
{
file "./constant/triSurface/core.stl";
outsidePoints ((0.25 0.001 0.25)); // definition of outside
includeCut true; // cells cut by surface
includeInside true; // cells not on outside of surf
includeOutside false; // cells on outside of surf
nearDistance -1; // cells with centre near surf
// (set to -1 if not used)
curvature -100; // cells within nearDistance
// and near surf curvature
// (set to -100 if not used)
fieldValues
(
volScalarFieldValue porosityIndex 1
);
}
);