2.1.5 增加网格分辨率
在每个方向上通过一个2因数增加网格分辨率,粗网格得出的结果可以映射到细网格上,作为问题的初
始条件。然后将细网格的解与粗网格的解作对比。
2.1.5.1 用已存在的案例创建一个新的案例
现在希望根据cavity创建一个名为cavityFine的新案例,用户需要克隆cavity案例,并且编辑必须的文件。首先,在于cavity相同的目录下创建一个新的案例文件,如: cd $FOAM RUN/tutorials/incompressible/icoFoam mkdir cavityFine
然后从cavity案例中拷贝基本的文件到cavityFine中,然后进入cavityFine案例:
cp -r cavity/constant cavityFine cp -r cavity/system cavityFine cd cavityFine
2.1.5.2 创建细网格
希望用blockMesh增加网格单元数。打开 blockMeshDict 文件,编辑block的指定信息。块的指定
在blocks关键词下的列表中。Block定义的句法结构见5.3.1.3节的完整描述;在该阶段只需知道紧随hex的首先是块顶点的列表,然后是是每个方向上许多单元数的列表。最初在cavity案例中设为(20 20 1),现在改为(40 40 1)并保存文件.像之前一样运行blockMesh,得到新的细网格。
2.1.5.3 将粗网格结果映射到细网格
mapFields 应用程序将与一个给定几何结构相关的场映射到另外一个几何结构的相应场中,在我们的
例子中,流场认为是连续的,由于源场及目的场的几何结构及边界类型或条件都是恒定的。在该例子中执行 mapFields时使用 -consistent 命令行。
从目标案例controlDict 中startFrom/startTime 指定的 时间目录中读取mapFields映射的流场数据,也就是说,结果被映射到的地方。在本例中,希望从cavity案例粗网格的最终结果映射到cavityFine案例中的细网格,因此,由于这些结果存储在cavity的0.5文件中,在controlDict文件中设置 startTime为0.5,
startFrom设为 startTime。
现在案例已准备好运行mapFields,输入mapFields -help 快速显示mapFields要求源案例目录作为自变量。使用 -consistent选项,所以应用程在cavityFine目录执行: mapFields ../cavity -consistent 应用程序将运行并在终端输出: Source: \ Target: \ Create databases as time Source time: 0.5 Target time: 0.5 Create meshes Source mesh size: 400 Target mesh size: 1600
Consistently creating and mapping fields for time 0.5 Open?FOAM-1.7.1 2.1 Lid-driven cavity flow U-33 interpolating p interpolating U End
2.1.5.4 控制调整
为保持Courant数小于1,见2.1.1.4节所讨论的,由于所有单元的尺寸都评分了所以时间步长必须评分,所以 controlDict 文件中deltaT设为0.0025。流场数据在固定数目的时间步长间隔时输出。此处演示如何在固定时间间隔指定数据输出。 在controlDict 中的writeControl 关键词下,在用runTime输入产生的输出结果间指定一个固定数量的运行时间,而不是通过timeStep 输入固定书目的时间步来输出。在该案例中,用户应该指定没0.1输出,因此应设置writeInterval 为0.1且writeControl 为runTime。最终,
由于案例是在粗网格结果上开始的,只需要运行很短的时间就能达到合理的收敛为稳态。所以endTime 设为0.7Squebao这些设置正确并保存文件。
2.1.5.5 运行代码作为后台过程
用户应该体验运行icoFoam作为后台程序,重新定向终端输出到log文件,者在之后可以看到。在 cavityFine 目录下,用户执行:
icoFoam > log & cat log
2.1.5.6 在细网格上绘制向量
用户可以在ParaView中同时打开多个案例,这是由于本质上每个新的案例就是Pipeline Browser 中一个新的模块。当在ParaView中打开一个新的案例时有一个次要的不便,因为有一个前提,所选数据是一个带有扩展名的文件。但是在OpenFOAM中,每个案例存储在指定目录结构的大批没有扩展名的文件中,paraFoam程序自动运行的结果,就是产生一个带有扩展名 .OpenFOAM 的空白文件,因此,cavity案例模块称为cavity.OpenFOAM。
然而,如果用户希望在ParaView中直接打开另一个案例,就需要创建这样一个空白文件。例如,为加载cavityFine 案例,通过输入下列命令来创建该文件: cd $FOAM RUN/tutorials/incompressible/icoFoam touch cavityFine/cavityFine.OpenFOAM
现在通过在File菜单选择Open,并且通过浏览目录选择cavityFine.OpenFOAM ,cavityFine 案例可以加载到ParaView中。用户现在可以在ParaView中由细网格绘制向量图。通过同时使两个案例的glyph激活,图像可以与cavity案例相比较。
2.1.5.7 绘制图像
用户也许希望通过抽取一些速度标量及沿着穿过区域的轴线绘制2维图像来使结果具体化。 OpenFOAM 对这种数据处理很在行。有无数的应用程序可以做专门的数据处理,一些简单的计算包括在一个单个的应用程序foamCalc 中。作为一个应用程序,它是独特的,因为它是这样的:
foamCalc
在
unknown calcType type xxxx, constructor not in hash table Valid calcType selections are: 8 ( randomise magSqr
magGrad addSubtract div mag interpolate components )
components 及 mag calcTypes 提供有用的速度标量。当在案例如cavity上运行“foamCalc
components U ”时,它从每个时间文件中读取速度矢量场,在相应的时间文件中,输出标量场Ux,Uy,Uz分别代表速度的x,y,z分量。类似的,“foamCalc mag mag U” 输出一个标量场magU 到每个时间文
件中,代表速度的量级。
用户可以在 cavity及 cavityFine 案例上用components calcType 运行foamCalc 。例如,对于cavity案例,用户应该进入cavity目录并执行foamCalc如下: cd /home/ying/RUN/tutorials/incompressible/icoFoam/cavity foamCalc components U
单独的分量可以在ParaView 中绘制成图。这是很快速的,方便的,并且在标志及格式上有合理的好
的控制,所以打印的输出是相当好的标准品。但是为发表图像,用户也许偏好输出未加工的数据,然后用专门的图像工具来绘制,比如gnuplot 或 Grace/xmgr 。为此,我们推荐使用sample应用程序,见6.5节和2.2.3节。
在开始绘制之前,用户需要加载新产生的Ux, Uy 及 Uz 场到ParaView 中。为此,在所工作的基本模块例如cavity.OpenFOAM 中,需要检查Properties 面板顶部的Update GUI 按钮。点击应用使新的场加载到ParaView 中,将出现在Vol Field Status 窗口。确保已选择新的场且改变得到应用,也就是说如果需要再次点击Apply。同样,如果在 Region Status 面板上选择了boundary regions ,边界上的数据插入错误。因此用户应该取消Region Status 面板中的边界,也就是说movingWall, fixedWall 及frontAndBack ,然后应用这些改变。
现在为了在 ParaView 中显示图像,用户应该选择所感兴趣的模块,例如cavity.OpenFOAM ,从Filter->Data Analysis 菜单应用Plot Over Line 。这在已存在的3DView窗口旁边打开了一个新的XY Plot窗口,创建了一个ProbeLine 模块,在其中用户可以指定Properties面板中线条的终点。在这个例子中,用户应该使线条在区域中心垂直向上 ,也就是说,在Point1 和 Point2 文本框中,从(0.05, 0, 0.005) 到(0.05, 0.1, 0.005) ,设置Resolution 为100.
点击应用,在XYPlot窗口出现图像,在Display面板,选择
2.1.6 网格分级
在 cavityGrade /constant/polyMesh /blockMeshDict 文件中,制定了分级等级,blockMesh根据blockMeshDict 文件划分网格。