版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。引言这是开源场运算和操作c++库类(openfoam)的使用指南。她详细描述了OpenFOAM的基本操作。首先经过第二章一系列教程练习。然后经过对更多的独立组件的更详细的描述学习openfoam。Of首先主要是一个c++库类,主要用于创立可执行文件,比如应用程(application)。应用程序分成两类:求解器,都是为了解决特定的连续介质力学问题而设计的;公用工程,这些是为了执行包括数据操作等任务而设计的。Of包括了数量众多的solver和utilities,牵涉的问题也比较广泛。将在第三章进行详尽的描述。Of的一个强项是用户能够经过必要的预备知识(包括数学,物理和编程技术)创立新的solvers和utilities。Of需要前处理和后处理环境。前处理、后处理接口就是of本身的实用程序(utilities),以此确保协调的数据传输环境。图1.1是of总体的结构。第4章和第五章描述了前处理和运行of的案例。既包括用of提供的meshgenerator划分网格也包括第三方软件生成的网格数据转换。第六章介绍后处理。Chapter2
指导手册
在这一章中我们详细描述了安装过程,模拟和后进程处理一些OpenFOAM测试案例,以引导用户运行OpenFOAM的基本程序。$FOAM_TUTORIALS目录包含许多案件演示of提供的所有求解器以及许多共用程序的使用,在试图运行教程之前,用户必须首先确保她们已经正确地安装了OpenFOAM。
该教程案件描述blockMesh预处理工具的使用,paraFoam案例设置和运行OpenFOAM求解器及使用paraFoam进行后处理。使用OpenFOAM支持的第三方后处理软件的用户能够选择:她们要么能够按照教程使用paraFoam,或当需要后处理时参阅第六章的第三方软件使用说明。OpenFOAM安装目录下的tutorials目录中所有的指导手册都是可复制的。教程根据流动类型分列在不同的目录下,对应子目录根据求解器slover分类。例如,所有icoFoam的案件存储在一个子目录”incompressible/icoFoam”,incompressible表示流动类型为不可压。如果用户希望运行一套例子,建议该用户复制tutorials目录到本地运行目录。她们能够轻松的经过输入下边的命令来复制:
mkdir-p$FOAMRUN
cp-r$FOAMTUTORIALS$FOAMRUN2.1盖驱动腔流Lid-drivencavityflow本节将介绍如何进行预处理,运行和后处理一个例子,涉及二维正方形区域内的等温,不可压缩流动。图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/home/turtlebot/OpenFOAM/OpenFOAM-2.3.0/tutorials/incompressible/icoFoam/cavity2.1.1.1生成网格OpenFOAM经常运行在三维直角坐标系统中,生成的都是三维几何结构。OpenFOAM默认求解三维问题,能够经过在某些边界上指定一个'special'empty边界条件,这些边界垂直于不要求解的第三维,从而来求解二维问题。(三维如何求解二维的问题)cavity腔域是一个在xy平面上边长d=0.1m的正方形。起初用20*20的均匀网格。块结构见图2.2。网格生成器是OpenFOAM的blockMesh,根据一个输入文档blockMeshDict(在给定实例的constant/polyMesh目录下)中的指定描述生成网格。对该实例输入的blockMeshDict如下所示:11formatascii;12classdictionary;13objectblockMeshDict;14}15//*************************************//1617convertToMeters0.1;1819vertices20(21(000)22(100)23(110)24(010)25(000.1)26(100.1)27(110.1)28(010.1)29);3031blocks32(33hex(01234567)(20201)simpleGrading(111)34);3536edges37(38);3940patches41(42wallmovingWall43(44(3762)45)46wallfixedWalls47(48(0473)49(2651)50(1540)51)52emptyfrontAndBack53(54(0321)55(4567)56)57);5859mergePatchPairs60(61);6263//*************************************************************************//
头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=0s,因此初始流场数据被设置在cavity目录下面的名字为0的子文件夹里。文件夹0里包括两个文件,p和U。每个压力(p)和速度(U)的初始值和边界条件都必须设置。让我们来检验下文件p:17dimensions[02-20000];1819internalFielduniform0;2021boundaryField22{23movingWall24{25typezeroGradient;26}2728fixedWalls29{30typezeroGradient;31}3233frontAndBack34{35typeempty;//空边界条件,说明求解是二维流动,这个在openFOAM是独有的,如果遇到该类边界,该边界不参与方程//离散,也就是什么都不做。36}37}3839//*************************************************************************//流场数据文件有3个主要的输入:dimensions:指定流场尺度(单位的指数),这里的运动学压力,即m2s-2(02-20000)(见第4.2.6节获取更多信息);internalField:其内部文件数据能够是统一的,由单一值确定;不均匀时,流场所有值必须指定(详细信息见4.2.8节);boundaryField:边界的流场数据,包括边界条件和及所有边界块的数据(详细信息见4.2.8节)。对于这个腔体例子,边界仅由壁面组成,分为两种边界:(1)fixedWall:固定墙包括侧墙和低墙(2)movingWall:移动墙的顶盖。作为壁面,两者的P文件都是zeroGradient边界条件,即”压力垂直梯度为零”。frontAndBack代表二维情况下的前后两个块,因此必须设置为empty。该实例中,正如大多数我们遇到的情况一样,初始场被设置为是均匀的。在这里,压力是运动学上的压力,作为一种不可压缩的情况,其绝对值是不相关,因此为方便起见设置为uniform0。(为什么跟绝对值不相关?)用户可用同样的方式检测0/U文件中的速度场。dimensions为对速度所期望的因次,内部流场初始化为uniformzero,在这个例子里速度场必须由由3个矢量表示,即均匀的(000)见第4.2.5节获取更多信息)。对frontAndBack块,速度边界流场要求相同的边界条件。其它方向都是墙:固定墙需要假定无滑移条件,因此fixedValue条件其值为统一(000)。顶面以1米每秒的速度沿x方向移动,因此也需要fixedValue条件,但为统一(100)值。2.1.1.3物理特性实例的物理属性存储在后缀为Properties的文件里,放在Dictionaries目录树。对于这个icoFoam例子,唯一必须指定的运动粘度是存储在transportProperties目录中。用户能够检查运动粘度是否正确设置,经过打开transportProperties目录来查看或编辑的入口。运动粘度的关键字是nu,在方程中用同音的希腊字母ν代表。最初,例子运行时雷诺数为10,其中雷诺数定义为:式中,d和1U1分别为特征长度和特征速度,ν为运动粘度。此处d=0.1m,1U1=1m/s,因此Re=10时,ν=0.01m2s−1。因此正确的动力粘度文件入口指定为:2.1.1.4control与时间控制、解数据的读取与存储相关的输入数据都是从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.5s输出结果,时间步长是0.005s,因此是每20次步长输出一次结果,故给writeInterval赋值20。Of会根据当前时间创立一个新的目录,例如0.1s,在每个时刻输出一系列的数据,在4.1章节有具体介绍。在icoFoam求解器输出的每个流场信息U和p放在时间目录里。对于这个例子,在controlDict中的输入如下:2.1.1.5离散和线性求解器设置用户能够在system目录下fvSchemes文件中指定选择有限体积离散法。线性方程求解器规范和限差和其它算法控制在fvSolution文件中,同在system目录下。用户能够自由的查看这些库类,可是当前我们不需要讨论入口数据,除了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所示。在PipelineBrowser,用户能够看到ParaView已经打开了cavity案例模块:cavity.OpenFOAM。在点击Apply按钮前,用户需要从RegionStatus和面板上选择一些几何结构。因为该案例很小,经过检查RegionStatus面板标题相邻的box能够很容易地选择所有的数据,这能够自动检查各个面板中的所有独立部件。然后用户能够点击Apply按钮将几何结构加载到ParaView中。6.1.5.1节中介绍了一些常见设置,请查阅该章节中的相关设置。之后用户应该打开Display面板,其控制着所选模块的可视化重现。在Display面板中,用户应该做如下工作,如图2.3所示:(1)设置Color为SolidColor;(2)点击SetSolidColor选择适当的颜色,如黑色(对于白色背景);(3)在Style面板,从Representation菜单选择Wireframe。背景颜色能够在顶部菜单面板的Edit中选择ViewSettings...来设置。特别是第一次启动ParaView,必须如6.1.5节描述的一样操作。特殊的,由于这是一个2D的情况,要求在Edit菜单中选择ViewSettings窗口,在General面板必须选择UseParallelProjection。在Annotation窗口OrientationAxes能够勾选或不宣,或经过鼠标拖曳来移动。2.1.3运行应用程序正如一切UNIX/Linux可执行软件,OpenFOAM应用程序能够按以下两种方式运行:作为前台处理器,也就是说,前台处理器中的shell一直等候,直到命令在给定命令提示符之前完成为止;作为后台处理器,不需要在shell接受附加要求之前完成。在该情况下,能够在前台运行icoFoam。icoFoam求解器即能够经过进入案例目录,在命令提示符处输入以下命令:icoFoamThatmeansthatParaViewhasnotbeenbuiltyet.Youcanfollowtheinstructionsfromstepnumber#9fromthispage:从而执行,也能够是可选择的-case,给定案例目录,如:icoFoam-case$FOAMRUN/tutorials/incompressible/icoFoam/cavity进程写入终端,显示当前时间,最大Courant数,所有场的初始及最终残差。2.1.4后处理当结果一写入时间目录,就能够用paraFoam来查看。回到paraFoam窗口,而且选择cavity.OpenFOAM模块的Properties面板。如果案例模块的正确的窗口面板似乎在任何时刻都不存在,则确保:cavity.OpenFOAM是高亮蓝色的;旁边的eye按钮是开的以显示图像是可行的;为了使paraFoam准备好显示所感兴趣的数据,首先使要求运行时间为0.5s,如果当ParaFoam开着时运行案例,时间目录中的输出数据不会自动在Paraview中加载。为装载数据,用户必须在Properties窗口中选择UpdateGUI,然后点击绿色的Apply按钮。时间数据就会加载到ParaView中。2.1.4.1等值面及等值线的绘制为查看压力,用户应该打开Disply面板,由于它控制着所选模型的可视化表现。为绘制一个简单的压力曲线,用户需要按照下面来选择,如图2.4具体所示:在Style面板,从Representation菜单选择Surface;在Color面板,选择。p及RescaletoDataRange,为了看早t=0.5s时刻的结果,用VCRControls或者CurrentTimeControls将时间设为0.5,这些位于ParaView窗口顶部菜单下方的工具栏中,见图6.4.压力场如预期一样,腔体左上部为低压区,右上角为高压区,如图2.5所示。经过点图标。p,压力场在各个单元间内插,从而得到连续的流场。相反的,如果用户选择单元图标,在每个单元上就是一个蛋度的压力值,因此每个单元都由单一的颜色表示而没有梯度。颜色棒图能够在ActiveVariableControls中点击ToggleColorLegendVisibility而出现,也能够在View菜单选择ShowColorLegend。点击ActiveVariableControls工具栏或Disply窗口中Color面板中的EditColorMap按钮,用户就能够设置颜色棒图特性的范围,比如文字大小,字型选择及尺度计数形式等。经过鼠标拖动能够改变颜色棒图在图像窗口的位置。ParaView的新版本默认使用颜色尺度为蓝色到白色到红色万恶不是更常见的蓝色到绿色到红色(彩虹)。因此用户第一次执行ParaView时,可能希望改变颜色尺度,者能够经过在ColorScaleEditor中选择ChoosePreset(初调),然后选择BluetoRedRainbow。在点击OK确认以后,用户就能够点击MakeDefault按钮以便ParaView一直采用这种颜色色棒。如果用户旋转图像,能够发现整个几何表面的都按压力上色了。为产生真实的等值线,用户首先要产生一个切割面,或者说”slice(切片)”,穿过整个几何形状使用Slice滤波器,见6.1.6.1节描述。切割面中心在(0.05,0.05,0.005),垂直线设为(0,0,1)。一旦产生了切割面,经过使用6.1.6节所介绍的Contourfilter来产生等值线。6.1.6.1引入切割面一般见户都希望产生一个穿过平面的等值线,而不是等值面。用户就需要用Slicefilter来创造一个切割面,等值线就在这个切割面上绘制。Slicefilter允许用户在SliceType中经过设定center及normal/radius来指定切割Plane,Box或Sphere。用户能够用鼠标操作切割面。然后用户能够在切割面上运行Contourfilter易产生等值线,操作见6.1.6.6.1.6等值线绘制在顶部菜单栏的Filter菜单中选择Contour,就可绘制等值线。filter在指定的模块上运行,因此如果模型本身是3D的,则等值线会是一系列的2D表面分别代表恒定的值,也就是说等值面。Contour的Properties面板包括Isosurfaces列表,能够编辑,最方便的就是使用NewRange窗口,所选择的尺度场从下拉菜单中选择。所得等值线图如下所示:2.1.4.2向量绘制在绘制流速向量之前,需要移走其它已经创立的模块,比如上面使用的Slice及Contourfilters。可经过在以PipelineBrowser中高亮相关模块,然后在各自的Properties面板中点击Delete,从而整体移除,也能够经过切换PipelineBrowser中相关模块的eye按钮来使其处于不工作状态。现在我们希望在每个单元的中心产生一个速度向量点符,首先要过滤单元中心的数据,如6.1.7.1所描述。在PipelineBrowser中使cavity.OpenFOAM模块高亮,用户从Filter菜单中选择CellCenters,点击Apply。在PipelineBrowser中使Centers高亮,然后在Filter菜单中选择Glyph(点符),则Properties窗口应该如图2.6所示,在Properties面板,速度流场U自动在vectors菜单中选择,因为它是当前唯一的向量场。默认图像的ScaleMode为速度的VectorMagnitude,可是由于我们想看到贯穿整个区域的速度,应该选择off,SetScaleFactor为0.005.点击应用,出现图像,但可能是一个单一的颜色,比如白色。用户应该根据速度量级用颜色标识图像,经过在Disply面板中设置ColorbyU来控制,也能够在EditColorMap中选择ShowColorLegend(图例)。输出如图2.7所示,在图中,大写的TimesRomanfonts是在ColorLegend标题中选择的,经过取消选定AutomaticLabelFormat,在LabelFormat文字框中输入%-#6.2f将其标记为2个固定的有效数字。在ViewSettings的General面板中设置背景色为白色,见6.1.5.1节描述。6.1.7向量绘制向量平面图由Glyphfilter产生,filter读取Vectors中选择的场,且提供一个GlyphTypes范围,Arrow提供一个清晰的向量平面图给GlyphTypes。在一个用户能够操作其为最佳效果的面板,每个图形都有图形控制选项。剩下的Properties面板主要包括图像的ScaleMode菜单,最常见的ScaleMode选项为:Vector,其中图像长度正比于向量量级;Off,其中每个图像都是一样的长度。SetScaleFactor参数控制图像的基本长度。6.7.1.7在单元中心绘制向量默认在单元顶点绘制,但一般希望在单元中心绘制数据。首先对案例模块应用CellCentersfilter,然后对产生的单元中心数据应用Glyphfilter。2.1.4.3流线绘制同样的,在ParaView中继续后处理之前,要使之前所描述的向量绘制等模块退出,现在希望绘制速度流线,见6.1.8节所述。在PipelineBrowser中保持cavity.OpenFOAM模块高亮,在Filter菜单选择StreamTracer,点击应用。参数窗口应设置如图2.8所示。指定Seedpoints(原点)沿着LineSource,其运行垂直于几何中心,也就是说,从(0.05,0,0.005)到(0.05,0.1,0.005),在本教程中的图像应用:pointResolution为21;MaxPropagation为Length0.5;初始StepLength为CellLength0.01;以及IntegrationDirectionBOTH。默认参数使用Runge-Kutta2IntegratorType。点击应用产生轨迹,然后从Filter中选择Tube来产生高质量的流线图。在本图中,选择:Nun.Sides6;Radius0.0003;Radiusfactor10.流管根据速度量级上色。点击Apply产生如图2.9所示。2.1.5增加网格分辨率在每个方向上经过一个2因数增加网格分辨率,粗网格得出的结果能够映射到细网格上,作为问题的初始条件。然后将细网格的解与粗网格的解作对比。2.1.5.1用已存在的案例创立一个新的案例现在希望根据cavity创立一个名为cavityFine的新案例,用户需要克隆cavity案例,而且编辑必须的文件。首先,在于cavity相同的目录下创立一个新的案例文件,如:cd$FOAMRUN/tutorials/incompressible/icoFoammkdircavityFine然后从cavity案例中拷贝基本的文件到cavityFine中,然后进入cavityFine案例:cp-rcavity/constantcavityFinecp-rcavity/systemcavityFinecdcavityFine2.1.5.2创立细网格希望用blockMesh增加网格单元数。打开blockMeshDict文件,编辑block的指定信息。块的指定在blocks关键词下的列表中。Block定义的句法结构见5.3.1.3节的完整描述;在该阶段只需知道紧随hex的首先是块顶点的列表,然后是是每个方向上许多单元数的列表。最初在cavity案例中设为(20201),现在改为(40401)并保存文件.像之前一样运行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:"..""cavity"Target:".""cavityFine"CreatedatabasesastimeSourcetime:0.5Targettime:0.5CreatemeshesSourcemeshsize:400Targetmeshsize:1600Consistentlycreatingandmappingfieldsfortime0.5Open∇FOAM-1.7.12.1Lid-drivencavityflowU-33interpolatingpinterpolatingUEnd2.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&catlog2.1.5.6在细网格上绘制向量用户能够在ParaView中同时打开多个案例,这是由于本质上每个新的案例就是PipelineBrowser中一个新的模块。当在ParaView中打开一个新的案例时有一个次要的不便,因为有一个前提,所选数据是一个带有扩展名的文件。可是在OpenFOAM中,每个案例存储在指定目录结构的大批没有扩展名的文件中,paraFoam程序自动运行的结果,就是产生一个带有扩展名.OpenFOAM的空白文件,因此,cavity案例模块称为cavity.OpenFOAM。然而,如果用户希望在ParaView中直接打开另一个案例,就需要创立这样一个空白文件。例如,为加载cavityFine案例,经过输入下列命令来创立该文件:cd$FOAMRUN/tutorials/incompressible/icoFoamtouchcavityFine/cavityFine.OpenFOAM现在经过在File菜单选择Open,而且经过浏览目录选择cavityFine.OpenFOAM,cavityFine案例能够加载到ParaView中。用户现在能够在ParaView中由细网格绘制向量图。经过同时使两个案例的glyph激活,图像能够与cavity案例相比较。2.1.5.7绘制图像用户可能希望经过抽取一些速度标量及沿着穿过区域的轴线绘制2维图像来使结果具体化。OpenFOAM对这种数据处理很在行。有无数的应用程序能够做专门的数据处理,一些简单的计算包括在一个单个的应用程序foamCalc中。作为一个应用程序,它是独特的,因为它是这样的:foamCalc<calcType><fieldName1...fieldNameN>在<calcType>中指定计算器操作;在输出时,采用下列操作:addSubtract;randomise;div;components;mag;magGrad;magSqr;interpolate。用户能够经过故意调用一个不存在的操作来获得<calcType>列表,因此foamCalc产生一个错误信息而且列出可用的类型,例如:>>foamCalcxxxxSelectingcalcTypexxxxunknowncalcTypetypexxxx,constructornotinhashtableValidcalcTypeselectionsare:8(randomisemagSqrmagGradaddSubtractdivmaginterpolatecomponents)components及magcalcTypes提供有用的速度标量。当在案例如cavity上运行”foamCalccomponentsU”时,它从每个时间文件中读取速度矢量场,在相应的时间文件中,输出标量场Ux,Uy,Uz分别代表速度的x,y,z分量。类似的,”foamCalcmagmagU”输出一个标量场magU到每个时间文件中,代表速度的量级。用户能够在cavity及cavityFine案例上用componentscalcType运行foamCalc。例如,对于cavity案例,用户应该进入cavity目录并执行foamCalc如下:cd/home/ying/RUN/tutorials/incompressible/icoFoam/cavityfoamCalccomponentsU单独的分量能够在ParaView中绘制成图。这是很快速的,方便的,而且在标志及格式上有合理的好的控制,因此打印的输出是相当好的标准品。可是为发表图像,用户可能偏好输出未加工的数据,然后用专门的图像工具来绘制,比如gnuplot或Grace/xmgr。为此,我们推荐使用sample应用程序,见6.5节和2.2.3节。在开始绘制之前,用户需要加载新产生的Ux,Uy及Uz场到ParaView中。为此,在所工作的基本模块例如cavity.OpenFOAM中,需要检查Properties面板顶部的UpdateGUI按钮。点击应用使新的场加载到ParaView中,将出现在VolFieldStatus窗口。确保已选择新的场且改变得到应用,也就是说如果需要再次点击Apply。同样,如果在RegionStatus面板上选择了boundaryregions,边界上的数据插入错误。因此用户应该取消RegionStatus面板中的边界,也就是说movingWall,fixedWall及frontAndBack,然后应用这些改变。现在为了在ParaView中显示图像,用户应该选择所感兴趣的模块,例如cavity.OpenFOAM,从Filter->DataAnalysis菜单应用PlotOverLine。这在已存在的3DView窗口旁边打开了一个新的XYPlot窗口,创立了一个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文件划分网格。convertToMeters0.1;vertices((000)(0.500)(100)(00.50)(0.50.50)(10.50)(010)(0.510)(110)(000.1)(0.500.1)(100.1)(00.50.1)(0.50.50.1)(10.50.1)(010.1)(0.510.1)(110.1));blocks(hex(01439101312)(10101)simpleGrading(221)hex(125410111413)(10101)simpleGrading(0.521)hex(347612131615)(10101)simpleGrading(20.51)hex(458713141716)(10101)simpleGrading(0.50.51));edges();patches(wallmovingWall((615167)(716178))wallfixedWalls((312156)(09123)(01109)(121110)(251411)(581714))emptyfrontAndBack((0341)(1452)(3674)(4785)(9101312)(10111413)(12131615)(13141716)));mergePatchPairs();//*************************************************************************//在终端执行:cd/home/ying/RUN/tutorials/incompressible/icoFoam/cavityGradeblockMeshparaFoam所形成的网格为靠近上下左右壁面处密集,中间稀疏,如右图所示: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/cavityGrademapFields../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/icoFoamcp-rcavitycavityHighRe2.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产生网格,当使用带有壁面函数的standardk−ε模型时,没有必要使网格朝向壁面分级,这是由于近壁单元的流动已经建模,而不用分辨。在1.6版本以前,一系列壁面函数模型在OpenFOAM中可用,在单个的边界上作为边界条件来提供。这使得在不同的壁面区域能够使用不同的壁面函数模型。壁面函数模型经过湍流粘度场来指定,在0/nut文件中的νt:dimensions[02-10000];internalFielduniform0;boundaryField{movingWall{typenutWallFunction;valueuniform0;}fixedWalls{typenutWallFunction;valueuniform0;}frontAndBack{typeempty;}}//*************************************************************************//这个案例使用标准壁面函数,在movingWall和fixedWalls由nutWallFunction关键词指定,其它的壁面函数模型包括roughwallfunctions,由关键词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关键词,用户能够看到://*************************************//simulationTypeRASModel;//*************************************************************************//simulationType的选择有laminar,RASModelandLESModel,在这个案例中选择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形成的:convertToMeters0.1;vertices((000)(0.600)(00.40)(0.60.40)(10.40)(010)(0.610)(110)(000.1)(0.600.1)(00.40.1)(0.60.40.1)(10.40.1)(010.1)(0.610.1)(110.1));blocks(hex(0132891110)(1281)simpleGrading(111)hex(236510111413)(12121)simpleGrading(111)hex(347611121514)(8121)simpleGrading(111));edges();patches(walllid((513146)(614157))wallfixedWalls((08102)(210135)(715124)(412113)(31191)(1980))emptyfrontAndBack((0231)(2563)(3674)(891110)(10111413)(11121514)));mergePatchPairs();//*************************************************************************//用blockMesh产生网格,边界设置与之前cavity案例一样,为在描述场映射过程清晰起见,上壁面边界重命名为lid,原始的cavity中为movingWall边界。在非一致映射中,不能担保所有的场数据都能从源案例中映射过来。残留的数据一定来自目标案例自身的流场文件。因此,在映射之前,流场数据一定要存在于目标案例的时间文件中。在cavityClipped案例中,设映射开始时间为0.5s,这是由于controlDict中startTime设为0.5s,因此用户需要复制初始场数据到该目录下,例如,从时刻0:cd$FOAMRUN/tutorials/incompressible/icoFoam/cavityClippedcp-r00.5在映射数据之前,英乎应该查看几何形状及0.5s的流场。现在要从cavity中映射速度及压力场到cavityClipped中,由于映射是不一致的,需要编辑位于system目录的mapFieldsDict文件,该文件包括两个关键词输入:patchMap及cuttingPatches。patchMap列表包括从源场到目的场的边界映射,用于当用户需要在目标场中集成源场中相应边界值时。在cavityClipped中,我们希望从cavity的movingWall集成lid处的边界值,因此必须设置patchMap为:patchMap(lidmovingWall);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菜单选择ExtractBlock,在Parame
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉真有趣说课稿部编版
- 滴滴司服经理述职报告
- 医疗物联网科技公司劳动合同
- 剧场版编剧合作协议样本
- 通讯技术助理聘用合同
- 农村供水工程招投标制度研究
- 渔业发展项目鱼塘施工合同模板
- 仓储物流区域副总招聘协议
- 特种设备应急演练
- 2022年大学生物科学专业大学物理二期末考试试卷D卷-含答案
- 产科理论题库含答案
- 纤维素的分子结构课件
- 四年级上册第十课美化我的文字《美化我的文字》课标版四年级上册
- 《中国当代文艺思潮》第九章形式主义文艺思潮
- 领导力与团队建设教材课件
- 《思想道德与法治》 课件 第六章 学习法治思想 提升法治素养
- 全文图解进一步加强新时代中小学思政课建设的意见教育学习PPT
- 2023年浙江省国有资本运营有限公司校园招聘笔试题库及答案解析
- 同仁堂-老字号的营销典范案例分析课件
- 《城镇燃气输配工程施工及验收规范》CJJ33-
- 国家开放大学《操作系统》形考任务1-3参考答案
评论
0/150
提交评论