vertices (
(0 0 0) (0.5 0 0) (1 0 0) (0 0.5 0) (0.5 0.5 0) (1 0.5 0) (0 1 0) (0.5 1 0) (1 1 0) (0 0 0.1) (0.5 0 0.1) (1 0 0.1) (0 0.5 0.1) (0.5 0.5 0.1) (1 0.5 0.1) (0 1 0.1) (0.5 1 0.1) (1 1 0.1) );
blocks (
hex (0 1 4 3 9 10 13 12) (10 10 1) simpleGrading (2 2 1) hex (1 2 5 4 10 11 14 13) (10 10 1) simpleGrading (0.5 2 1) hex (3 4 7 6 12 13 16 15) (10 10 1) simpleGrading (2 0.5 1) hex (4 5 8 7 13 14 17 16) (10 10 1) simpleGrading (0.5 0.5 1) );
edges ( );
patches (
wall movingWall (
(6 15 16 7) (7 16 17 8) )
convertToMeters 0.1;
wall fixedWalls (
(3 12 15 6) (0 9 12 3) (0 1 10 9) (1 2 11 10) (2 5 14 11) (5 8 17 14) )
empty frontAndBack (
(0 3 4 1) (1 4 5 2) (3 6 7 4) (4 7 8 5) (9 10 13 12) (10 11 14 13) (12 13 16 15) (13 14 17 16) ) );
mergePatchPairs ( );
// ************************************************************************* //
在终端执行:cd /home/ying/RUN/tutorials/incompressible/icoFoam/cavityGrade blockMesh paraFoam
所形成的网格为靠近上下左右壁面处密集,中间稀疏,如右图所示:
2.1.6.2 改变时间及时间步长
靠近顶盖的速度最大,单元最小,则最大的Co数产生于顶盖附近,见2.1.1.4节所述,因此很有必要
估计顶盖附近的单元尺寸,以便计算合适的时间步。
当使用非均匀网格梯度,blockMesh通过等比级数计算单元尺寸。沿着长度为l,有n个单元,最后一个单元与第一个单元之间的比例为R,最小单元的尺寸 δxs 为:
(2.5)
r为相邻单元尺寸之比:
对cavityGrade
案例,在每个块中沿各个方向的单元数为10,最大最小单元比为2,块高宽为0.05m,因此最小的单元长度为3.45mm(l=0.05m,r=2^1/9=1.08,a=R=2),从公式2.2可知,为使Co<1,则时间步<3.45ms,为确保结果在合适的时间间隔输出 ,时间步deltaT 减小为2.5ms,设置writeInterval =40,所以每0.1s输出一次,这些设置见 cavityGrade/system/controlDict 文件。
startTime 设为cavityFine 案例的结束时间,也就是0.7,由于cavity和cavityFine 在所指示的运行时间内收敛较好,可以设置 cavityGrade的运行时间为0.1s,也就是endTime 为0.8.
2.1.6.3 映射流场
如2.1.5.3节,使用mapFields 将cavityFine 的最终结果映射到cavityGrade网格上,进入cavityGrade目录并执行mapFields :
cd /home/ying/RUN/tutorials/incompressible/icoFoam/cavityGrade mapFields ../cavityFine -consistent
现在从案例目录运行icoFoam,并且监视时间信息。查看该案例的收敛结果并通过后处理工具与其他结果作对比,见2.1.5.6节及2.1.5.7节所描述。
2.1.7 增加雷诺数
之前所有案例的雷诺数都为10,这个数非常小很快产生稳定解,在腔体底部拐角处仅有很小的二次漩涡。现在增加雷诺数到50,此时需要较长时间达到收敛,首先应用cavity 案例中的粗网格,用户应该复制cavity案例并命名为cavityHighRe :
cd /home/ying/RUN/tutorials/incompressible/icoFoam cp -r cavity cavityHighRe
2.1.7.1 前处理
进入cavityHighRe 案例并编辑transportProperties 文件。由于Re根据因数10增加,因此要根据因数10减少动力粘度,即1*10^-3m2s-1.从cavity案例结束处重新开始运行该案例。为此,设置startFrom 关键词为 latestTime ,以便icoFoam提取存储在最近时刻文件(也就是0.5)中的初始数值,endTime设为2s.
2.1.8 高雷诺数流动 2.1.8.1前处理
改变cavity案例目录到$FOAM_RUN/tutorials/incompressible/pisoFoam/- ras 目录下(注意:pisoFoam/ras 目录)。和之前一样运行blockMesh产生网格,当使用带有壁面函
数的standard k? ε 模型时,没有必要使网格朝向壁面分级,这是由于近壁单元的流动已经建模,而不用分辨。
在1.6版本以前,一系列壁面函数模型在OpenFOAM中可用,在单个的边界上作为边界
条件来提供。这使得在不同的壁面区域可以使用不同的壁面函数模型。壁面函数模型通过湍流粘度场来指定,在0/nut文件中的νt :
dimensions [0 2 -1 0 0 0 0];
internalField uniform 0;
boundaryField {
movingWall {
type nutWallFunction; value uniform 0; } fixedWalls {
type nutWallFunction; value uniform 0; }
frontAndBack {
type empty; } }
// ************************************************************************* //
这个案例使用标准壁面函数,在 movingWall 和 fixedWalls 由nutWallFunction 关键词指定,其他的壁面函数模型包括rough wall functions,由关键词 nutRoughWallFunction 指定。 用户现在应该打开0/k及0/epsilon文件,检查边界条件。对壁面边界条件,ε 指定为
epsilonWall- Function 边界条件,k指定为 kqRwallFunction 边界条件,后者是一个一般的边界条件,可以提供给任何包括湍流动能类型的流场,例如k,q,或者雷诺应力R。k及ε 的初始值由一个估计的波动速度分量U′ ,以及湍流长度尺度l来指定,k及ε 由下列公式定义:
此处Cμ是 k ? ε 模型的常系数等于0.09,对笛卡尔坐标,k为:
此处Ux'^2 , Uy'^2 及Uz'^2 是波动速度在x,y,z方向的分量。假设初始湍流是各向同性的,即
Ux^2 =Uy^2=Uz^2,等于顶盖速度的5%,l等于盒子宽度0.1m的20%,所以k及ε为:
这形成了k 及 ε的初始条件,U及p的初始条件分别为(0,0,0)及0,和之前一
样。
优先于OpenFOAM1.6版本,湍流模拟方法的类型,例如RAS或者大涡模拟(LES)在每个求解器中都声明了。这导致在求解器应用时有很多的重复代码,在大部分使用RAS湍流模拟的求解器处,将会有等量的LES求解器。
然而在1.6版本中,湍流模拟方法是在运行时间选择的 ,通过在turbulenceProperties 文件中的 simulationType 关键词,用户可以看到:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
simulationType RASModel;
// ************************************************************************* //
simulationType 的选择有laminar, RASModel and LESModel ,在这个案例中选择
RASModel,RAS模拟在 RASProperties 文件中指定,也在constant目录中。湍流模型由RASModel选择,从表3.9所列的一长串可用模型中。 应该选择kEpsilon 模型,这是标准