OpenFOAM使用手册(中文翻译版)
更新时间:2023-11-02 12:03:01 阅读量: 综合文库 文档下载
- openfoam使用手册推荐度:
- 相关推荐
引言
这是开源场运算和操作
c++库类(openfoam)的使用指南。他详细描述了OpenFOAM的基本操作。首先通过第二章一系列教程练习。然后通过对更多的独立组件的更详细的描述学习openfoam。 Of
首先主要是一个c++库类,主要用于创建可执行文件,比如应用程序(application)。应用程序分成两类:求解器,都是为了解决特定的连续介质力学问题而设计的;公用工程,这些是为了执行包括数据操作等任务而设计的。Of 包括了数量众多的solver和utilities,牵涉的问题也比较广泛。将在第三章进行详尽的描述。
Of 的一个强项是用户可以通过必要的预备知识(包括数学,物理和编程技术)创建新的solvers 和utilities。 Of
需要前处理和后处理环境。前处理、后处理接口就是of本身的实用程序(utilities),以此确保协调的数据传输环境。图1.1是of总体的结构。第4章和第五章描述了前处理和运行of 的案例。既包括用of提供的mesh generator划分网格也包括第三方软件生成的网格数据转换。第六章介绍后处理。
Chapter 2
指导手册
在这一章中我们详细描述了安装过程,模拟和后进程处理一些OpenFOAM测试案例,以引导用户运行OpenFOAM的基本程序。 $FOAM_TUTORIALS 目录包含许多案件演示of提供的所有求解器以及许多共用程序的使用,在试图运行教程之前,用户必须首先确保他们已经正确地安装了OpenFOAM。
该教程案件描述 blockMesh预处理工具的使用,paraFoam案例设置和运行OpenFOAM求解器及使用paraFoam进行后处理。使用OpenFOAM支持的第三方后处理软件的用户可以选择:他们要么可以按照教程使用paraFoam,或当需要后处理时参阅第六章的第三方软件使用说明。 OpenFOAM安装目录下的tutorials目录中所有的指导手册都是可复制的。教程根据流动类型分列在不同的目录下,对应子目录根据求解器slover分类。例如,所有icoFoam的案件存储在一个子目录“incompressible / icoFoam”, incompressible表示流动类型为不可压。如果用户希望运行一套例子,建议该用户复制tutorials目录到本地运行目录。他们可以轻松的通过输入下边的命令来复制:
mkdir -p $FOAM RUN
cp -r $FOAM TUTORIALS $FOAM RUN
2.1盖驱动腔流Lid-driven cavity flow
本节将介绍如何进行预处理,运行和后处理一个例子,涉及二维正方形区域内的等温,不可压缩流动。图2.1中几何体的所有边界都是由壁面。在x方向顶层墙体以1米/秒的速度移动,而其他3个墙壁是静止的。最初,流动会假设为层流,将在均匀网格上使用icoFoam求解器来求解层流等温不可压流动。在本教程中,将研究加强网格的划分的效果和网格朝向壁面分级的效果。最终,流动雷诺数增加,必须使用用于恒温不可压缩紊流的pisoFoam求解器.
2.1.1前处理
通过编辑实例文件在OpenFOAM中设置实例,用户应选择一个xeditor进行前处理,如emacs,vi,gedit,kate,nedit等。编辑文件可能在OpenFOAM中,因为I / O的目录格式的关键字意思很明确,很容易使没有经验的用户理解。
模拟实例涉及网格,流场,属性,控制参数等数据。如4.1节所述,在OpenFOAM,这些数据是存储在实例目录下的一组文件中,而不是单个实例文件,如许多其他流体力学软件包。实例目录给予适当的描述性名称,例如:该教程中的第一个例子就叫cavity。在编辑实例文件和运行cavity实例前的准备工作中,用户应打开该案例的目录:
cd $FOAM RUN/tutorials/incompressible/icoFoam/cavity
2.1.1.1生成网格
OF经常运行在三维直角坐标系统中,所有的几何形状都是三维的。OF默认求解三维问题,可以通过在某些边界上指定一个'special' empty边界条件,这些边界垂直于不要求解的第三维,从而来求解二维问题。
cavity腔域是一个在xy平面上边长d= 0.1m的正方形。起初用20*20的均匀网格。块结构见图2.2。网格生成器是OpenFOAM的blockMesh,根据一个输入文档blockMeshDict(在给定实例的constant/polyMesh目录下)中的指定描述生成网格。对该实例输入的blockMeshDict如下所示:
11
format ascii;
12
class dictionary;
13 object blockMeshDict;
14 }
15
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 17
convertToMeters 0.1;
18 19 vertices 20 ( 21 (0 0 0) 22 (1 0 0) 23 (1 1 0) 24 (0 1 0) 25 (0 0 0.1) 26 (1 0 0.1) 27 (1 1 0.1) 28 (0 1 0.1) 29 ); 30 31
blocks
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
(
hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1) ); edges ( ); patches (
wall movingWall ( (3 7 6 2) )
wall fixedWalls ( (0 4 7 3) (2 6 5 1) (1 5 4 0) )
empty frontAndBack ( (0 3 2 1) (4 5 6 7) ) );
mergePatchPairs ( );
// ************************************************************************* //
头7行是文件头信息,用寬显线表示。接下来是FoamFile子目录中的文件信息,用{...}大括号界定。
注释(来自苏军伟博客):
FoamFile //文件头 {
version 2.0; //版本号
format ascii; //存储形式二进制或者ascii
class volScalarField;//场的类型,体心标量场 object p; //场的名字
}
在手册其他部分:
为清楚起见并节省空间,文件头,包括寬显线及FoamFile子目录,将会在引用实例文件时全部省去。
文件首先指定块顶点坐标,然后通过顶点标号和单元个数定义块(此处仅有一个),最后,它定义边界块。建议用户查阅5.3节了解blockMeshDict文件中输入项的含义。
在blockMeshDict文件上运行blockMesh生成网格。在这个实例目录中,做到这一点,只需在终端输入:
blockMesh
终端窗口产生blockMesh运行状态报告。任何blockMeshDict文件的错误都会被blockMesh挑出来,所产生的错误信息直接引导用户到文件中产生问题的所在行。在该阶段不应该有错误。
2.1.2 边界和初始条件
完成网格生成,用户可以看看为这个案例设置的初始场文件。案例设置开始时间t = 0 s,所以初始流场
数据被设置在cavity目录下面的名字为0的子文件夹里。文件夹0里包括两个文件,p和U。每个压力(p)和速度(U)的初始值和边界条件都必须设置。让我们来检验下文件p:
17 dimensions [0 2 -2 0 0 0 0]; 18
19 internalField uniform 0; 20
21 boundaryField 22 {
23 movingWall 24 {
25 type zeroGradient; 26 } 27
28 fixedWalls 29 {
30 type zeroGradient; 31 } 32
33 frontAndBack 34 {
35 type empty;
//空边界条件,说明求解是二维流动,这个在openFOAM是独有的,如果遇到该类边界,该边界不参与方程//离散,也就是什么都不做。
36 }
37 } 38
39// ************************************************************************* //
流场数据文件有3个主要的输入:
dimensions:指定流场尺度(单位的指数),这里的运动学压力,即m2s-2(0 2 -2 0 0 0 0 )(见第4.2.6节获取更多信息);
internalField:其内部文件数据可以是统一的,由单一值确定;不均匀时,流场所有值必须指定(详细信息见 4.2.8节 );
boundaryField:边界的流场数据,包括边界条件和及所有边界块的数据(详细信息见4.2.8节)。
对于这个腔体例子,边界仅由壁面组成,分为两种边界:(1)fixedWall:固定墙包括侧墙和低墙(2) movingWall :移动墙的顶盖。作为壁面,两者的P文件都是 zeroGradient边界条件,即“压力垂直梯度为零”。frontAndBack代表二维情况下的前后两个块,因此必须设置为empty。 该实例中,正如大多数我们遇到的情况一样,初始场被设置为是均匀的。在这里,压
力是运动学上的压力,作为一种不可压缩的情况,其绝对值是不相关,因此为方便起见设置为uniform 0。(为什么跟绝对值不相关?)
用户可用同样的方式检测0 / U文件中的速度场。dimensions为对速度所期望的因次,内部流场初始化为uniform zero ,在这个例子里速度场必须由由3个矢量表示,即均匀的(0 0 0)见第4.2.5节获取更多信息)。
对frontAndBack块,速度边界流场要求相同的边界条件。其他方向都是墙:固定墙需要假定无滑移条件,因此fixedValue 条件其值为统一(0 0 0)。顶面以1米每秒的速度沿x方向移动,因此也需要fixedValue条件,但为统一(1 0 0)值。
2.1.1.3物理特性
实例的物理属性存储在后缀为.....Properties的文件里,放在Dictionaries目录树。对于这个icoFoam例子,唯一必须指定的运动粘度是存储在transportProperties目录中。用户可以检查运动粘度是否正确设置,通过打开transportProperties目录来查看或编辑的入口。运动粘度的关键字是nu,在方程中用同音的希腊字母ν代表。最初,例子运行时雷诺数为10,其中雷诺数
定义为:
式中,d和1U1分别为特征长度和特征速度,ν为运动粘度。此处d=0.1m,1U1=1m/s,所以Re=10时,ν=0.01m2 s?1 。因此正确的动力粘度文件入口指定为:
2.1.1.4 control
与时间控制、解数据的读取与存储相关的输入数据都是从controlDict目录读入的。读者应看看这个文件;作为实例控制文件,他放在system目录中。
运行的开始/结束时刻及时间步长必须设置。 4.3节详细介绍了OpenFOAM提供的度够灵活的时间控制。在这个教程我们设置开始运行时刻从t=0开始,这意味着of需要从文件夹0读取流场数据,更多案例文件结构信息见4.1小节。因此我们设置startFrom关键词为startTime 并指定关键词startTime 为0。
对于结束时间,我们希望获得流动绕空腔循环(即稳定)时的稳态解。一般而言,层流中,流体通过该区域10次才能达到稳态。在这个例子里,流动没有通过该区域,因为这里没有进口也没有出口。取而代之,设盖子穿过腔体10次为结束时间,即1s;事实上,事后发现0.5s就足够了,因此应采用该值。指定stopAt关键词为endTime,并赋值0.5
现在我们需要设置时间步长,由关键词 deltaT 代表。运行icoFoam时为达到瞬时精确及数值稳定,要求Courant 数小于1。对于一个单元Courant 数定义如下:
δ t是时
间步长,|U|是通过单元的速度大小,δ x是该速度方向上的单元尺寸。流速在穿过区域时是变化的,必须确保任何地方的Co<1。因此我们以最糟的状况选择δ t的取值:Co的最大值必须与大尺度流速和小的单元尺度联合的效果相一致。这里,这个整个区域的单元尺寸固定,所以Co的最大值发生在紧挨着盖子的地方,这里速度接近1米每秒。单元尺寸为:
因此为了达到全部区域内Co<=1,时间步长deltaT 的设置必须小于等于:
作为模拟进程,我们希望能写下每隔一段时间的结果,这样我们就能在后处理包里查看结果。关键词writeControl表示设置输出结果时刻的一些可选项。这里我们选择timeStep 选项:每隔n次时间步长输出一次结果,n值由关键词writeInterval指定。假设我们要设置在时刻0.1, 0.2,. . . , 0.5 s输出结果,时间步长是0.005s,因此是每20次步长输出一次结果,故给writeInterval赋值20。
Of会根据当前时间创建一个新的目录,例如0.1s,在每个时刻输出一系列的数据,在4.1章节有具体介绍。在icoFoam求解器输出的每个流场信息U 和 p放在时间目录里。对于这个例子,在controlDict中的输入如下:
2.1.1.5 离散和线性求解器设置
用户可以在system目录下 fvSchemes文件中指定选择有限体积离散法。用户线性方程求解器规范、限差和其他算法控制。用户可以自由的查看这些库类,但是在它们的入口函数中我们目前只需要fvSolution中PISO 目录下的pRefCell 和pRefValue。在封闭系统如腔体内,用的是相对压力:是压力范围而不是绝对值。在这种情况下,求解器在pRefCell 单元中通过pRefValue 设置一个相对值,在该实例中都设为0。改变其中任何一个的值都会改变绝对压力场只改变绝对压力场,而不会改变相对压力场或速度场。
2.1.2查看网格
在实例运行前,最好查看一下网格以检查是否有错。网格在OpenFOAM 提供的后处理工具paraFoam中查看,通过在终端在案例目录下
(ying@ying-desktop:~$ cd /home/ying/RUN/tutorials/incompressible/icoFoam/cavity回车)输入: paraFoam 来启动paraFoam后处理。
也可以通过另一个目录位置执行:
paraFoam -case $FOAM RUN/tutorials/incompressible/icoFoam/cavity
从而打开了ParaView窗口如图6.1所示。在Pipeline Browser,用户可以看到ParaView已经打开了cavity案例模块:cavity.OpenFOAM 。在点击Apply按钮前, 用户需要从Region Status 和面板上选择一些几何结构。因为该案例很小, 通过检查Region Status 面板标题相邻的box可以很容易地选择所有的数据,这可以
自动检查各个面板中的所有独立部件。然后用户可以点击Apply按钮将几何结构加载到ParaView中。6.1.5.1节中介绍了一些常用设置,请查阅该章节中的相关设置。
之后用户应该打开Display面板,其控制着所选模块的可视化重现。在Display面板中,用户应该做如下工作,如图2.3所示:(1)设置Color为Solid Color ;(2)点击Set Solid Color 选择适当的颜色,如黑色(对于白色背景);(3)在Style面板,从Representation 菜单选择Wireframe 。背景颜色可以在顶部菜单面板的Edit中选择View Settings... 来设置。
尤其是第一次启动ParaView,必须如6.1.5节描述的一样操作。特殊的,由于这是一个2D的情况,要求在Edit菜单中选择View Settings窗口,在General 面板必须选择Use Parallel Projection 。在Annotation 窗口Orientation Axes可以勾选或不宣,或通过鼠标拖曳来移动。
2.1.3 运行应用程序
正如一切UNIX/Linux可执行软件,OpenFOAM应用程序可以按以下两种方式
运行:作为前台处理器,也就是说,前台处理器中的shell一直等候,直到命令在给定命令提示符之前完成为止;作为后台处理器,不需要在shell接受附加要求之前完成。
在该情况下,可以在前台运行icoFoam。icoFoam求解器即可以通过进入案例目录,在命令提示符处输入以下命令:
icoFoam
从而执行,也可以是可选择的-case,给定案例目录,如:
icoFoam -case $FOAM RUN/tutorials/incompressible/icoFoam/cavity 进程写入终端,显示当前时间,最大Courant 数,所有场的初始及最终残差。
2.1.4后处理
当结果一写入时间目录,就可以用paraFoam来查看。回到paraFoam窗口,并且选择cavity.OpenFOAM 模块的Properties 面板。如果案例模块的正确的窗口面板似乎在任何时刻都不存在,则确保:cavity.OpenFOAM 是高亮蓝色的;旁边的eye按钮是开的以显示图像是可行的;
为了使paraFoam准备好显示所感兴趣的数据,首先使要求运行时间为0.5s,如果当
ParaFoam开着时运行案例,时间目录中的输出数据不会自动在Paraview中加载。为装载数据,用户必须在Properties窗口中选择Update GUI ,然后点击绿色的Apply按钮。时间数据就会加载到ParaView中。
2.1.4.1等值面及等值线的绘制
为查看压力,用户应该打开Disply面板,由于它控制着所选模型的可视化表现。为绘制一个简单的压力曲线,用户需要按照下面来选择,如图2.4具体所示:在Style面板,从
Representation 菜单选择Surface ;在 Color 面板,选择。p及Rescale to Data Range ,为了看早t=0.5s时刻的结果,用VCR Controls 或者 Current Time Controls 将时间设为0.5,这些位于ParaView窗口顶部菜单下方的工具栏中,见图6.4.压力场如预期一样,腔体左上部为低压区,右上角为高压区,如图2.5所示。
通过点图标。p,压力场在各
个单元间内插,从而得到连续的流场。相反的,如果用户选择单元图标
,在每个单元上就是一个蛋度的压力值,所以每个单元都由单一的颜色表示而没有梯度。
颜色棒图可以在Active Variable Controls 中点击Toggle Color Legend Visibility 而出现,也可以在View菜单选择Show Color Legend 。点击Active Variable Controls 工具栏或Disply窗口中Color面板中的Edit Color Map 按钮,用户就可以设置颜色棒图特性的范围,比如文字大小,字型选择及尺度计数形式等。通过鼠标拖动可以改变颜色棒图在图像窗口的位置。 ParaView的新版本默认使用颜色尺度为蓝色到白色到红色万恶不是更常见的蓝色到绿色到红色(彩虹)。因此用户第一次执行ParaView时,可能希望改变颜色尺度,者可以通过在
Color Scale Editor 中选择Choose Preset (初调),然后选择Blue to Red Rainbow 。在点击OK确认以后,用户就可以点击Make Default 按钮以便ParaView一直采用这种颜色色棒。 如果用户旋转图像,可以发现整个几何表面的都按压力上色了。为产生真实的等值线,用户首先要产生一个切割面,或者说“slice(切片)”,穿过整个几何形状使用Slice滤波器,见6.1.6.1节描述。切割面中心在(0.05, 0.05, 0.005) ,垂直线设为(0, 0, 1) 。一旦产生了切割面,通过使用6.1.6节所介绍的Contour filter 来产生等值线。
6.1.6.1 引入切割面
通常用户都希望产生一个穿过平面的等值线,而不是等值面。用户就需要用Slice filter来创造一个切割面,等值线就在这个切割面上绘制。Slice filter允许用户在Slice Type 中通过设定center及 normal/radius 来指定切割Plane,Box或Sphere。用户可以用鼠标操作切割面。 然后用户可以在切割面上运行Contour filter 易产生等值线,操作见6.1.6.
6.1.6 等值线绘制
在顶部菜单栏的Filter菜单中选择Contour,就可绘制等值线。filter在指定的模块上运行,所以如果模型本身是3D的,则等值线会是一系列的2D表面分别代表恒定的值,也就是说等值面。Contour的
Properties 面板包括 Isosurfaces 列表,可以编辑,最方便的就是使用New Range 窗口,所选择的尺度场从下拉菜单中选择。所得等值线图如下所示:
2.1.4.2 向量绘制
在绘制流速向量之前,需要移走其他已经创建的模块,比如上面使用的Slice 及Contour
filters 。可通过在以Pipeline Browser中高亮相关模块,然后在各自的Properties 面板中点击Delete ,从而整体移除,也可以通过切换Pipeline Browser中相关模块的eye按钮来使其处于不工作状态。
现在我们希望在每个单元的中心产生一个速度向量点符,首先要过滤单元中心的数据,如6.1.7.1所描述。在Pipeline Browser中使cavity.OpenFOAM 模块高亮,用户从Filter菜单中选择Cell Centers ,点击Apply。
在Pipeline Browser中使Centers高亮,然后在Filter菜单中选择Glyph(点符),则Properties窗口应该如图2.6所示,在Properties面板,速度流场U自动在 vectors 菜单中选择,因为它是目前唯一的向量场。默认图像的Scale Mode为速度的Vector Magnitude,但是由于我们想看到贯穿整个区域的速度,应该选择off,Set Scale Factor为0.005.点击应用,出现图像,但可能是一个单一的颜色,比如白色。
用户
应该根据速度量级用颜色标识图像,通过在Disply面板中设置Color by U来控制,也可以在Edit Color Map中选择Show Color Legend(图例)。输出如图2.7所示,在图中,大写的Times Roman fonts是在Color Legend标题中选择的,通过取消选定Automatic Label Format,在Label Format文字框中输入%-#6.2f将其标记为2个固定的有效数字。在View Settings的General面板中设置背景色为白色,见6.1.5.1节描述。
6.1.7 向量绘制
向
量平面图由Glyph filt
er产生,filter读取Vectors中选择的场,且提供一个Glyph Types范围,Arrow提供一个清晰的向量平面图给Glyph Types。在一个用户可以操作其为最佳效果的面板,每个图形都有图形控制选项。
剩下的Properties面板主要包括图像的Scale Mode菜单,最常见的Scale Mode选项为:Vector,其中图像长度正比于向量量级;Off,其中每个图像都是一样的长度。Set Scale Factor 参数控制图像的基本长度。
6.7.1.7在单元中心绘制
向量默认在单元顶点绘制,但通常希望在单元中心绘制数据。首先对案例模块应用Cell Centers ?lter,然后对产生的单元中心数据应用Glyph ?lter。
2.1.4.3 流线绘制
同样的,在ParaView中继续后处理之前,要使之前所描述的向量绘制等模块退出,现在希望绘制速度流线,见6.1.8节所述。
在Pipeline Browser中保持cavity.OpenFOAM模块高亮,在Filter菜单选择Stream Tracer,点击应用。参数窗口应设置如图2.8所示。指定Seed points(原点)沿着Line Source,其运行
垂直于几何中心,也就是说,从(0.05, 0, 0.005)到 (0.05, 0.1, 0.005),在本教程中的图像应用:point Resolution为21;Max Propagation为Length 0.5;初始Step Length 为 Cell Length 0.01;以及Integration Direction BOTH。默认参数使用Runge-Kutta 2 Integrator Type 。
点击应用产生轨迹,然后从Filter中选择Tube来产生高质量的流线图。在本图中,选择:Nun. Sides 6;Radius 0.0003;Radius factor 10.流管根据速度量级上色。点击Apply产生如图2.9所示。
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 文件划分网格。
blockMesh的本质是将几何区域划分为一系列三维六面体块。块的边线可以是直线圆弧或曲线。网格表面上就是块中各个方向上许多的单元, blockMesh需要足够的信息来产生网格数据。
几何形状的每个块都由8个顶点定义,每一个都是六面体的顶点,所有顶点都列出来,以便根据其标号对应,OpenFOAM通常按照C++习惯将列表中的第一个元素标为0,如图5.5,每个顶点根据列表命名。由顶点1和5连接而成的边线为曲线,以提醒读者在 blockMesh中可以指定曲线边线。
通过在各自顶部减少一对或多对顶点,有可能产生少于8个顶点的块,见5.3.3节描述。 每个块都有一个当地右手坐标系(x1 , x2 , x3 )。定义右手坐标轴,使观察者向下看Oz轴时,在O最近处,从Ox轴上一点到Oy轴上一点的弧线为顺时针方向。 当地坐标轴根据块定义中顶点出现的顺序来定义,如下: ?块定义中坐标原点为第一个入口,为顶点0; ? x1方向为从顶点0到顶点1; ? x2方向为从顶点1到顶点2; ?顶点0,1,2定义平面x3=0;
? 从顶点0沿x3方向移动从而得到顶点4;
? 从顶点1,2,3沿x3方向移动分别得到顶点5,6,7。
关键字 描述 示例 convertToMeters 顶点坐标尺度因子 0.001表示mm vertices edges block 顶点坐标列表 描述圆弧或曲线边线 顶点标号的顺序列表及网格尺寸 (0 0 0 ) arc 1 4 (0.939 0.342 -0.5) hex (0 1 2 3 4 5 6 7) (10 10 1) (x方向10等分...) simpleGrading (1.0 1.0 1.0) (均匀网格) patches 边界列表 symmetryPlane base ( (0 1 2 3) ) mergePatchPairs 合并边界的列表 见5.3.2节 表5.5:blockMeshDict 中的关键字
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 模型,这是标准 k ?ε 模型;用户还需确保湍流计算是开启的。
每个湍流模型的系数存储在各自的代码中,有一系列的默认值。设置printCoeffs 为on,
当模型在运行时间调用时,就使默认值输出为标准输出,也就是说终端,系数作为子目录输出,文件名为模型名字带有Coeffs的附加字样,例如,在 kEpsilon 模型案例中的
kEpsilonCoeffs 。模型(例如 kEpsilon )系数可以修正,通过可选地包括那个子目录在 RASProperties 目录中,然后相应地调整值。
用户下一步要在transportProperties 中设置层流动力粘度,为使Re=10^4,根据方程2.1对Re定义,则动力粘度为10^-5。
最后,需要早controlDict文件中设置 startTime, stopTime, deltaT 以及writeInterval ,设置 deltaT为0.005以满足Co数研制,设置endTime=10s。 2.1.8.2 运行代码
进入案例目录并输入“pisoFoam ”来执行,在该案例中,粘度很低,紧贴移动顶盖的边界层很薄,顶盖附近的单元相对较大,所以单元中心的速度远小于顶盖速度。事实上,在100个时间步之后,很明显地与顶盖相邻的单元速度达到一个上限大约为0.2ms^-1,因此最大Co数没有超过0.2很多。通过增加时间步使Co数更接近1,从而增加求解时间的做法是很明智的,因此重设deltaT为0.02s,并且在这种情况下,设置 startFrom 为latestTime ,这指示 pisoFoam 从最后时刻文件读取起始数据,也就是说10.0.endTime 应该设为20s,因为运行
收敛远比层流情况要慢。如前重新运行,监控收敛解。查看串行时间步的结果,作为结果的进步,看解是否收敛到稳态,或者也许达到周期震荡状态。在后一种情况下,也许无法达到收敛,但这并不意味着结果不准确。
2.1.9 改变案例几何结构
用户也许希望改变案例的几何结构,运行一个新的模拟。也许需要保持一部分或所有原始
结果作为新模拟的开始工况。这有点复杂因为原始解的流场与新案例的并不一致。但是mapFields应用程序可以映射不一致的流场,几何形状或边界类型都可以。
作为是示范,进入 icoFoam目录中的 cavityClipped 案例,这由标准cavity几何结构组成,但是在腔体的底部右端去除了一个边长为0.04m的正方形,这是根据blockMeshDict形
成的 :
convertToMeters 0.1;
vertices (
(0 0 0) (0.6 0 0) (0 0.4 0) (0.6 0.4 0) (1 0.4 0) (0 1 0) (0.6 1 0) (1 1 0)
(0 0 0.1) (0.6 0 0.1) (0 0.4 0.1) (0.6 0.4 0.1) (1 0.4 0.1) (0 1 0.1) (0.6 1 0.1) (1 1 0.1) );
blocks (
hex (0 1 3 2 8 9 11 10) (12 8 1) simpleGrading (1 1 1)
hex (2 3 6 5 10 11 14 13) (12 12 1) simpleGrading (1 1 1) hex (3 4 7 6 11 12 15 14) (8 12 1) simpleGrading (1 1 1) );
edges ( );
patches (
wall lid (
(5 13 14 6) (6 14 15 7) )
wall fixedWalls (
(0 8 10 2) (2 10 13 5) (7 15 12 4) (4 12 11 3) (3 11 9 1) (1 9 8 0) )
empty frontAndBack (
(0 2 3 1) (2 5 6 3) (3 6 7 4) (8 9 11 10) (10 11 14 13) (11 12 15 14) ) );
mergePatchPairs ( );
// ************************************************************************* //
用blockMesh产生网格,边界设置与之前cavity案例一样,为在描述场映射过程清晰起见,上壁面边界重命名为lid,原始的cavity中为movingWall 边界。
在非一致映射中,不能担保所有的场数据都能从源案例中映射过来 。残留的数据一定来
自目标案例自身的流场文件。因此,在映射之前,流场数据一定要存在于目标案例的时间文件中。在cavityClipped 案例中,设映射开始时间为0.5s,这是由于controlDict 中startTime 设为0.5s,因此用户需要复制初始场数据到该目录下,例如,从时刻0:
cd $FOAM RUN/tutorials/incompressible/icoFoam/cavityClipped cp -r 0 0.5
在映射数据之前,英乎应该查看几何形状及0.5s的流场。
现在要从cavity中映射速度及压力场到cavityClipped 中,由于映射是不一致的,需要编辑位于system目录的mapFieldsDict 文件,该文件包括两个关键词输入:patchMap 及 cuttingPatches 。 patchMap列表包括从源场到目的场的边界映射,用于当用户需要在目标场中集成源场中相应边界值时。 在cavityClipped 中,我们希望从cavity的movingWall 集成lid处的边界值,所以必须设置patchMap 为: patchMap
(
lid movingWall );
cuttingPatches列表包括目标边界的名字,它的值从源内部场映射过来,目标边界通过该内
部场剪切。在这种情况下,包括fixedWalls 来显示修改(插值)过程:
cuttingPatches (
fixedWalls );
现在用户从cavityClipped 目录运行mapFields : mapFields ../cavity
用户可以观察映射场如图2.13,正如所期望的,从源案例继承了边界值,但是实际上我们希望在fixedWalls 边界上重设速度为(0,0,0)。编辑U场,进入fixedWalls 边界,流场由nonuniform改为 uniform (0, 0, 0) ,nonuniform 是一系列要求整体删除的值,现在用icoFoam运行案例。
2.1.10 后处理修正的几何结构
速度图可以如正常案例一样产生,为比较最初及最后结果,首先是在时刻0.5s之后是时刻0.6s,另外,提供了几何结构的轮廓,它要求在产生2D案例时要小心。用户应从Filter菜单选择Extract Block ,在Parameter 面板,高亮所感兴趣的边界,名为 lid及 fixedWalls ,点击应用,在Display面板选择Wireframe来显示几何结构的这些项。图2.14显示了黑色边界,并且显示了在修改的几何形状底部拐角形成的漩涡。
6.1.5 视图操作
这节描述设置和操作paraFoam中物体视图的动作。
6.1.5.1 View settings
View settings 在Edit菜单中选择,打开了Render View Options 窗口,有3项:General, Lights 及
Annotation(注释)。 General 面板包括一般在启动时都需要设置几项: ? the background colour,:此处白色通常是输出图像的首选项; ? Use parallel projection :是CFD的常用选择,尤其是2D情况;
Lights 面板包括Light Kit 面板中的详细灯光控制。一个单独的Headlight 面板控制图像的直接亮度。用强度为1的白色灯光检查Headlight 按钮,似乎能有助于产生强光颜色的图像,比如,用isosurface 。 Annotation 面板包括图像注释选项。Orientation Axes 特性控制着图像窗口的轴标,比如,设置轴标x,y,z的颜色。
6.1.5.2 General settings
General settings 从Edit菜单选择,打开了一个general Options 窗口,其中有General和Render View 菜单选项。
General面板控制paraFoam的默认行为。特别地,有一个Auto Accept 按钮使paraFoam自动接受改
变而无需点击Properties 窗口的Apply按钮。对于大型案例,一般不选择此项:用户一般不希望图像在他做的每个选择之间重新显示,而可以一次整个的重显。
Render View面板包括3个子项 :General, Camera 和 Server.。General 面板包括详细水平(LOD) ,当进行操作时,控制着图像的显示比,比如:平移,调整大小,旋转;通过滑块降低其水平,使具有大量单元的实例可以在操作过程中快速重显。
Camera 面板包括2D和3D移动的控制设置。通过用鼠标联合Shift-和Control-keys,呈现给用户一个旋转,平移和变焦控制的列表。该列表可以编辑成适合用户的情况。
5.3共用程序blockMesh生成网格
本节描述OpenFOAM提供的网格生成共用程序:blockMesh, blockMesh共用程序通过分级及曲
线边界产生参量网格。
由实例中constant/polyMesh 目录下的blockMeshDict 文档文件生成网格。 blockMesh读取这个文档,生成网格并将网格数据输出到同一目录下的points,faces,cells及boundary文件中。
源自fixedValue的类型 movingWallVelocity pressureInletVelocity pressureDirectedInletVelocity surfaceNormalFixedValue 指定的数据 代替垂边界值的法线,所以穿value 过边界的流量为0 当入口p已知时,根据垂直于value 边界的流量估计U 当入口p已知时,根据入口方Value inletDirection 向的流量计算U 通过大小指定一个垂直于边界value 的向量边界条件;向量+ve指出区域(?) 总压p0 = p +1/2ρ|U|2;当U改p0 变时,p相应的调整 基于平均值尺度计算波动变量 referenceField, fluctuationScale totalPressure turbulentInlet 源自fixedGradient /zeroGradient 的类型 fluxCorrectedVelocity wallBuoyantPressure
正在阅读:
OpenFOAM使用手册(中文翻译版)11-02
财经法规与会计职业道德考试试题文件04-15
磷脂酶抑制剂新进展06-10
第一次坐飞机作文450字06-24
安全生产条件专项限期督办函回复09-03
夏天的色彩作文300字07-01
流量比值控制系统课程设计报告 - 图文10-12
乡镇“十三五”时期工作总结及“十四五”时期工作计划07-30
Java面向对象试题集03-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 中文
- OpenFOAM
- 翻译
- 手册
- 使用
- 2010年编制六车道高速公路路基工程施工组织设计(含桥涵) - 图文
- 盐酸溶液的配制与标定
- 2019精选教育初中数学知识点三角函数:三角函数公式关系 doc
- 家庭综合保障需求分析表
- 新概念英语第二册Lesson 12Mike最最经典绝对绝密,内部经典精品核心资料 - 图文
- 浙江省温州市普通高中2017届高三2月选考模拟考试地理试卷-Word版含答案
- 光伏发电厂家名单
- 看谱镜分析方法及图谱
- 全国通用版高考地理一轮复习第十章区域可持续发展课时提升作业三十10.4德国鲁尔区的探索 - 图文
- jFreeChart柱形图
- 《老人与海》作品主人公命运分析
- 企业微信管理制度汇总
- 东财 施工技术 随机作业大全 带答案
- 宗教改革对欧洲文明的影响
- 商业项目方案及深化设计关注内容
- 日处理50吨城市生活垃圾填埋场工程项目可行性研究报告
- 北师大版语文八上《孔孟论学习》word教案
- 调侃与王朔小说艺术个性论文
- 幼儿园自查自纠报告
- 升格语段 让作文彩教案