本案例演示simpleFoam求解器使用方法。
simpleFoam求解器是一个稳态求解器,支持以下湍流模型:
-
kEpsilon(RAS)
-
kOmega(RAS)
-
LRR(RAS)
1 拷贝文件
本案例文件来自于官方提供的案例。
利用命令将文件拷贝到$FOAM_RUN文件夹。
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily $FOAM_RUN
cd $FOAM_RUN/pitzDaily
查看pitzDaily文件路径,如下所示。
. ├── 0
│ ├── epsilon │ ├── f │ ├── k │ ├── nut │ ├── nuTilda │ ├── omega │ ├── p │ ├── U │ └── v2 ├── constant │ ├── transportProperties │ └── turbulenceProperties └── system ├── blockMeshDict ├── controlDict ├── fvSchemes ├── fvSolution └── streamlines
3 directories, 16 files
2 costant文件夹
constant文件夹中包含两个文件transportProperties、turbulenceProperties,其中transportProperties指定介质的材料属性,turbulenceProperties文件指定使用的湍流模型。
2.2 transportProperties文件
transportProperties文件内容如下:
FoamFile { version 2.0; format ascii;
class dictionary; location "constant"; object transportProperties; }
// * * * * * * * * * * * * * * //
transportModel Newtonian; nu [0 2 -1 0 0 0 0] 1e-05;
在此文件中指定材料的运动粘度,此处指定运动粘度为1e-05。
2.1 turbulenceProperties文件
turbulenceProperties文件如下所示。
FoamFile { version 2.0; format ascii;
class dictionary; location "constant"; object turbulenceProperties; }
// * * * * * * * * * * * * * * * * //
simulationType RAS; RAS { // Tested with kEpsilon, realizableKE, // kOmega, kOmegaSST, v2f, // ShihQuadraticKE, LienCubicKE. RASModel kEpsilon; turbulence on; printCoeffs on; }
文件中的RASModel关键字用于指定湍流模型。simpleFoam求解器支持的湍流模型包括:kEpsilon, realizableKE,kOmega,kOmegaSST,v2f,ShihQuadraticKE, LienCubicKE。
选用不同的湍流模型,则相对应的需要修改0文件夹中的文件。
-
laminar:无需修改
-
kEpsilon:修改k文件与epsilon文件
-
kOmega:修改k文件与omega文件
-
LRR:修改k、epsilon与R文件
-
Smagorinsky:修改nuSgs文件
-
oneEqEddy:修改k与nuSgs文件
-
SpalartAllmaras:修改nuSgs与nuTilda
此文件选用kEpsilon模型,因此需要修改0文件夹中的k文件与epsilon文件。
3 修改0文件夹
3.1 k文件
k文件内容如下:
FoamFile { version 2.0; format ascii;
class volScalarField; location "0"; object k; }
// * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0]; internalField uniform 0.375; boundaryField { inlet { type fixedValue; value uniform 0.375; } outlet { type zeroGradient; } upperWall { type kqRWallFunction; value uniform 0.375; } lowerWall { type kqRWallFunction; value uniform 0.375; } frontAndBack { type empty; } }
在k文件中指定各边界的湍动能。本案例中指定inlet边界类型为fixedValue,值为0.375;指定outlet边界类型为zeroGradient;指定壁面边界类型为kqRWallFunction,值为0.375;frontAndBack为empty。
3.2 epsilon文件
修改epsilon文件,其内容为:
FoamFile { version 2.0; format ascii;
class volScalarField; location "0"; object epsilon; }
// * * * * * * * * * * * * * //
dimensions [0 2 -3 0 0 0 0]; internalField uniform 14.855; boundaryField { inlet { type fixedValue; value uniform 14.855; } outlet { type zeroGradient; } upperWall { type epsilonWallFunction; value uniform 14.855; } lowerWall { type epsilonWallFunction; value uniform 14.855; } frontAndBack { type empty; } }
与k文件类似,指定各边界的湍流耗散率。
3.3 p文件
不管采用何种模型,p文件与U文件都需要修改。p文件内容如下:
FoamFile { version 2.0; format ascii;
class volScalarField; object p; }
dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; boundaryField { inlet { type zeroGradient; } outlet { type fixedValue; value uniform 0; } upperWall { type zeroGradient; } lowerWall { type zeroGradient; } frontAndBack { type empty; } }
在p文件中指定各边界的压力,需要注意的是,在不可压缩流动问题中,压力的单位是m2/s2,量纲为压力与密度的比值。
本案例中,指定出口outflow的压力为0,其他边界指定为zeroGradient。
3.4 U文件
U文件中指定边界的速度分布。本案例的U文件如下:
FoamFile { version 2.0; format ascii;
class volVectorField; object U; }
// * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { inlet { type fixedValue; value uniform (10 0 0); } outlet { type zeroGradient; } upperWall { type noSlip; } lowerWall { type noSlip; } frontAndBack { type empty; } }
本案例中,指定入口inlet速度为10m/s,outlet边界为zeroGradient,其他壁面边界指定为noSlip。
4 system文件夹
system文件夹中包含四个文件:
-
blcokMeshDict:指定几何与网格参数
-
controlDict:指定求解过程控制参数
-
fvSchemes:指定求解算法
-
fvSolution:指定求解控制参数
在本案例中,只需要修改controlDict文件。在controlDict文件中,指定了求解过程控制参数。controlDict文件内容如下:
FoamFile { version 2.0; format ascii;
class dictionary; location "system"; object controlDict; }
// * * * * * * * * * * * * * //
application simpleFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 2000; deltaT 1; writeControl timeStep; writeInterval 100; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable true; functions {
#includeFunc residuals
}
需要注意文件中的endTime关键字指定的是迭代次数,而非真实的时间。在稳态计算中,deltaT指定的迭代间隔,一般情况下都要设置为1。
在此文件中的结尾,利用命令#includeFunc residuals指定输出残差数据,后面可以用foamMonitor输出残差图。
5 求解计算
本案例求解计算中,需要先利用blockMesh生成网格,之后利用simpleFoam求解器进行求解。
cd $FOAM_RUN/pitzDaily/ blockMesh simpleFoam
可以使用命令查看残差分布:
foamMonitor postProcessing/residuals/0/residuals.dat
残差分布如图所示。
6 计算后处理
利用paraFoam进行后处理。
paraFoam
速度分布如图所示。
压力分布如图所示:
也可以尝试着更换湍流模型进行计算,比较各种湍流模型的不同之处。
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册