OpenFOAM顶盖驱动流详解使用手册.docx
- 文档编号:18145598
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:23
- 大小:31.09KB
OpenFOAM顶盖驱动流详解使用手册.docx
《OpenFOAM顶盖驱动流详解使用手册.docx》由会员分享,可在线阅读,更多相关《OpenFOAM顶盖驱动流详解使用手册.docx(23页珍藏版)》请在冰点文库上搜索。
OpenFOAM顶盖驱动流详解使用手册
引言
这是开源场运算和操作c++库类(openfoam)的使用指南。
他详细描述了OpenFOAM的基本操作。
首先通过第二章一系列教程练习。
然后通过对更多的独立组件的更详细的描述学习openfoam。
Of首先主要是一个c++库类,主要用于创建可执行文件,比如应用程(application)。
应用程序分成两类:
求解器,都是为了解决特定的连续介质力学问题而设计的;公用工程,这些是为了执行包括数据操作等任务而设计的。
Of包括了数量众多的solver和utilities,牵涉的问题也比较广泛。
将在第三章进行详尽的描述。
Of的一个强项是用户可以通过必要的预备知识(包括数学,物理和编程技术)创建新的solvers和utilities。
Of需要前处理和后处理环境。
前处理、后处理接口就是of本身的实用程序(utilities),以此确保协调的数据传输环境。
图是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$FOAMRUN
盖驱动腔流Lid-drivencavityflow
本节将介绍如何进行预处理,运行和后处理一个例子,涉及二维正方形区域内的等温,不可压缩流动。
图中几何体的所有边界都是由壁面。
在x方向顶层墙体以1米/秒的速度移动,而其他3个墙壁是静止的。
最初,流动会假设为层流,将在均匀网格上使用icoFoam求解器来求解层流等温不可压流动。
在本教程中,将研究加强网格的划分的效果和网格朝向壁面分级的效果。
最终,流动雷诺数增加,必须使用用于恒温不可压缩紊流的pisoFoam求解器.
前处理
通过编辑实例文件在OpenFOAM中设置实例,用户应选择一个xeditor进行前处理,如emacs,vi,gedit,kate,nedit等。
编辑文件可能在OpenFOAM中,因为I/O的目录格式的关键字意思很明确,很容易使没有经验的用户理解。
模拟实例涉及网格,流场,属性,控制参数等数据。
如节所述,在OpenFOAM,这些数据是存储在实例目录下的一组文件中,而不是单个实例文件,如许多其他流体力学软件包。
实例目录给予适当的描述性名称,例如:
该教程中的第一个例子就叫cavity。
在编辑实例文件和运行cavity实例前的准备工作中,用户应打开该案例的目录:
cd/home/turtlebot/OpenFOAM/生成网格
OpenFOAM经常运行在三维直角坐标系统中,生成的都是三维几何结构。
OpenFOAM默认求解三维问题,可以通过在某些边界上指定一个'special'empty边界条件,这些边界垂直于不要求解的第三维,从而来求解二维问题。
(三维如何求解二维的问题)
cavity腔域是一个在xy平面上边长d=的正方形。
起初用20*20的均匀网格。
块结构见图。
网格生成器是OpenFOAM的blockMesh,根据一个输入文档blockMeshDict(在给定实例的constant/polyMesh目录下)中的指定描述生成网格。
对该实例输入的blockMeshDict如下所示:
11formatascii;
12classdictionary;
13objectblockMeshDict;
14}
15.}大括号界定。
注释(来自苏军伟博客):
FoamFile ...Properties的文件里,放在Dictionaries目录树。
对于这个icoFoam例子,唯一必须指定的运动粘度是存储在transportProperties目录中。
用户可以检查运动粘度是否正确设置,通过打开transportProperties目录来查看或编辑的入口。
运动粘度的关键字是nu,在方程中用同音的希腊字母ν代表。
最初,例子运行时雷诺数为10,其中雷诺数定义为:
式中,d和1U1分别为特征长度和特征速度,ν为运动粘度。
此处d=,1U1=1m/s,所以Re=10时,ν=s−1。
因此正确的动力粘度文件入口指定为:
control
与时间控制、解数据的读取与存储相关的输入数据都是从controlDict目录读入的。
读者应看看这个文件;作为实例控制文件,他放在system目录中。
运行的开始/结束时刻及时间步长必须设置。
节详细介绍了OpenFOAM提供够灵活的时间控制。
在这个教程我们设置开始运行时刻从t=0开始,这意味着of需要从文件夹0读取流场数据,更多案例文件结构信息见小节。
因此我们设置startFrom关键词为startTime并指定关键词startTime为0。
对于结束时间,我们希望获得流动绕空腔循环(即稳定)时的稳态解。
一般而言,层流中,流体通过该区域10次才能达到稳态。
在这个例子里,流动没有通过该区域,因为这里没有进口也没有出口。
取而代之,设盖子穿过腔体10次为结束时间,即1s;事实上,事后发现就足够了,因此应采用该值。
指定stopAt关键词为endTime,并赋值
现在我们需要设置时间步长,由关键词deltaT代表。
运行icoFoam时为达到瞬时精确及数值稳定,要求Courant数小于1。
对于一个单元Courant数定义如下:
δt是时间步长,|U|是通过单元的速度大小,δx是该速度方向上的单元尺寸。
流速在穿过区域时是变化的,必须确保任何地方的Co<1。
因此我们以最糟的状况选择δt的取值:
Co的最大值必须与大尺度流速和小的单元尺度联合的效果相一致。
这里,这个整个区域的单元尺寸固定,所以Co的最大值发生在紧挨着盖子的地方,这里速度接近1米每秒。
单元尺寸为:
因此为了达到全部区域内Co<=1,时间步长deltaT的设置必须小于等于:
作为模拟进程,我们希望能写下每隔一段时间的结果,这样我们就能在后处理包里查看结果。
关键词writeControl表示设置输出结果时刻的一些可选项。
这里我们选择timeStep选项:
每隔n次时间步长输出一次结果,n值由关键词writeInterval指定。
假设我们要设置在时刻,,...,s输出结果,时间步长是,因此是每20次步长输出一次结果,故给writeInterval赋值20。
Of会根据当前时间创建一个新的目录,例如,在每个时刻输出一系列的数据,在章节有具体介绍。
在icoFoam求解器输出的每个流场信息U和p放在时间目录里。
对于这个例子,在controlDict中的输入如下:
离散和线性求解器设置
用户可以在system目录下fvSchemes文件中指定选择有限体积离散法。
线性方程求解器规范和限差和其他算法控制在fvSolution文件中,同在system目录下。
用户可以自由的查看这些库类,但是目前我们不需要讨论入口数据,除了fvSolution中PISO子目录下的pRefCell和pRefValue。
在封闭系统如腔体内,用的是相对压力:
是压力范围而不是绝对值。
在这种情况下,求解器在pRefCell单元中通过pRefValue设置一个相对值,在该实例中都设为0。
改变其中任何一个的值都会只改变绝对压力场,而不会改变相对压力场或速度场。
查看网格
在实例运行前,最好查看一下网格以检查是否有错。
网格在OpenFOAM提供的后处理工具paraFoam中查看,通过在终端在案例目录下
(ying@ying-desktop:
~$cd/home/ying/RUN/tutorials/incompressible/icoFoam/cavity回车)输入:
paraFoam
来启动paraFoam后处理。
也可以通过另一个目录位置执行:
paraFoam-case$FOAM_RUN/tutorials/incompressible/icoFoam/cavity
从而打开了ParaView窗口如图所示。
在PipelineBrowser,用户可以看到ParaView已经打开了cavity案例模块:
。
在点击Apply按钮前,用户需要从RegionStatus和面板上选择一些几何结构。
因为该案例很小,通过检查RegionStatus面板标题相邻的box可以很容易地选择所有的数据,这可以自动检查各个面板中的所有独立部件。
然后用户可以点击Apply按钮将几何结构加载到ParaView中。
节中介绍了一些常用设置,请查阅该章节中的相关设置。
之后用户应该打开Display面板,其控制着所选模块的可视化重现。
在Display面板中,用户应该做如下工作,如图所示:
(1)设置Color为SolidColor;
(2)点击SetSolidColor选择适当的颜色,如黑色(对于白色背景);(3)在Style面板,从Representation菜单选择Wireframe。
背景颜色可以在顶部菜单面板的Edit中选择ViewSettings...来设置。
尤其是第一次启动ParaView,必须如节描述的一样操作。
特殊的,由于这是一个2D的情况,要求在Edit菜单中选择ViewSettings窗口,在General面板必须选择UseParallelProjection。
在Annotation窗口OrientationAxes可以勾选或不宣,或通过鼠标拖曳来移动。
运行应用程序
正如一切UNIX/Linux可执行软件,OpenFOAM应用程序可以按以下两种方式运行:
作为前台处理器,也就是说,前台处理器中的shell一直等候,直到命令在给定命令提示符之前完成为止;作为后台处理器,不需要在shell接受附加要求之前完成。
在该情况下,可以在前台运行icoFoam。
icoFoam求解器即可以通过进入案例目录,在命令提示符处输入以下命令:
icoFoam
ThatmeansthatParaViewhasnotbeenbuiltyet.Youcanfollowtheinstructionsfromstepnumber#9fromthispage:
In...u#
从而执行,也可以是可选择的-case,给定案例目录,如:
icoFoam-case$FOAMRUN/tutorials/incompressible/icoFoam/cavity
进程写入终端,显示当前时间,最大Courant数,所有场的初始及最终残差。
后处理
当结果一写入时间目录,就可以用paraFoam来查看。
回到paraFoam窗口,并且选择模块的Properties面板。
如果案例模块的正确的窗口面板似乎在任何时刻都不存在,则确保:
是高亮蓝色的;旁边的eye按钮是开的以显示图像是可行的;
为了使paraFoam准备好显示所感兴趣的数据,首先使要求运行时间为,如果当ParaFoam开着时运行案例,时间目录中的输出数据不会自动在Paraview中加载。
为装载数据,用户必须在Properties窗口中选择UpdateGUI,然后点击绿色的Apply按钮。
时间数据就会加载到ParaView中。
等值面及等值线的绘制
为查看压力,用户应该打开Disply面板,由于它控制着所选模型的可视化表现。
为绘制一个简单的压力曲线,用户需要按照下面来选择,如图具体所示:
在Style面板,从Representation菜单选择Surface;在Color面板,选择。
p及RescaletoDataRange,为了看早t=时刻的结果,用VCRControls或者CurrentTimeControls将时间设为,这些位于ParaView窗口顶部菜单下方的工具栏中,见图.压力场如预期一样,腔体左上部为低压区,右上角为高压区,如图所示。
通过点图标。
p,压力场在各个单元间内插,从而得到连续的流场。
相反的,如果用户选择单元图标
,在每个单元上就是一个蛋度的压力值,所以每个单元都由单一的颜色表示而没有梯度。
颜色棒图可以在ActiveVariableControls中点击ToggleColorLegendVisibility而出现,也可以在View菜单选择ShowColorLegend。
点击ActiveVariableControls工具栏或Disply窗口中Color面板中的EditColorMap按钮,用户就可以设置颜色棒图特性的范围,比如文字大小,字型选择及尺度计数形式等。
通过鼠标拖动可以改变颜色棒图在图像窗口的位置。
ParaView的新版本默认使用颜色尺度为蓝色到白色到红色万恶不是更常见的蓝色到绿色到红色(彩虹)。
因此用户第一次执行ParaView时,可能希望改变颜色尺度,者可以通过在ColorScaleEditor中选择ChoosePreset(初调),然后选择BluetoRedRainbow。
在点击OK确认以后,用户就可以点击MakeDefault按钮以便ParaView一直采用这种颜色色棒。
如果用户旋转图像,可以发现整个几何表面的都按压力上色了。
为产生真实的等值线,用户首先要产生一个切割面,或者说“slice(切片)”,穿过整个几何形状使用Slice滤波器,见节描述。
切割面中心在,,,垂直线设为(0,0,1)。
一旦产生了切割面,通过使用节所介绍的Contourfilter来产生等值线。
引入切割面
通常用户都希望产生一个穿过平面的等值线,而不是等值面。
用户就需要用Slicefilter来创造一个切割面,等值线就在这个切割面上绘制。
Slicefilter允许用户在SliceType中通过设定center及normal/radius来指定切割Plane,Box或Sphere。
用户可以用鼠标操作切割面。
然后用户可以在切割面上运行Contourfilter易产生等值线,操作见等值线绘制
在顶部菜单栏的Filter菜单中选择Contour,就可绘制等值线。
filter在指定的模块上运行,所以如果模型本身是3D的,则等值线会是一系列的2D表面分别代表恒定的值,也就是说等值面。
Contour的Properties面板包括Isosurfaces列表,可以编辑,最方便的就是使用NewRange窗口,所选择的尺度场从下拉菜单中选择。
所得等值线图如下所示:
向量绘制
在绘制流速向量之前,需要移走其他已经创建的模块,比如上面使用的Slice及Contourfilters。
可通过在以PipelineBrowser中高亮相关模块,然后在各自的Properties面板中点击Delete,从而整体移除,也可以通过切换PipelineBrowser中相关模块的eye按钮来使其处于不工作状态。
现在我们希望在每个单元的中心产生一个速度向量点符,首先要过滤单元中心的数据,如所描述。
在PipelineBrowser中使模块高亮,用户从Filter菜单中选择CellCenters,点击Apply。
在PipelineBrowser中使Centers高亮,然后在Filter菜单中选择Glyph(点符),则Properties窗口应该如图所示,在Properties面板,速度流场U自动在vectors菜单中选择,因为它是目前唯一的向量场。
默认图像的ScaleMode为速度的VectorMagnitude,但是由于我们想看到贯穿整个区域的速度,应该选择off,SetScaleFactor为.点击应用,出现图像,但可能是一个单一的颜色,比如白色。
用户
应该根据速度量级用颜色标识图像,通过在Disply面板中设置ColorbyU来控制,也可以在EditColorMap中选择ShowColorLegend(图例)。
输出如图所示,在图中,大写的TimesRomanfonts是在ColorLegend标题中选择的,通过取消选定AutomaticLabelFormat,在LabelFormat文字框中输入%-#将其标记为2个固定的有效数字。
在ViewSettings的General面板中设置背景色为白色,见节描述。
向量绘制
向量平面图由Glyphfilter产生,filter读取Vectors中选择的场,且提供一个GlyphTypes范围,Arrow提供一个清晰的向量平面图给GlyphTypes。
在一个用户可以操作其为最佳效果的面板,每个图形都有图形控制选项。
剩下的Properties面板主要包括图像的ScaleMode菜单,最常见的ScaleMode选项为:
Vector,其中图像长度正比于向量量级;Off,其中每个图像都是一样的长度。
SetScaleFactor参数控制图像的基本长度。
在单元中心绘制
向量默认在单元顶点绘制,但通常希望在单元中心绘制数据。
首先对案例模块应用CellCentersfilter,然后对产生的单元中心数据应用Glyphfilter。
流线绘制
同样的,在ParaView中继续后处理之前,要使之前所描述的向量绘制等模块退出,现在希望绘制速度流线,见节所述。
在PipelineBrowser中保持模块高亮,在Filter菜单选择StreamTracer,点击应用。
参数窗口应设置如图所示。
指定Seedpoints(原点)沿着LineSource,其运行垂直于几何中心,也就是说,从,0,到,,,在本教程中的图像应用:
pointResolution为21;MaxPropagation为Length;初始StepLength为CellLength;以及IntegrationDirectionBOTH。
默认参数使用Runge-Kutta2IntegratorType。
点击应用产生轨迹,然后从Filter中选择Tube来产生高质量的流线图。
在本图中,选择:
Nun.Sides6;Radius;Radiusfactor10.流管根据速度量级上色。
点击Apply产生如图所示。
增加网格分辨率
在每个方向上通过一个2因数增加网格分辨率,粗网格得出的结果可以映射到细网格上,作为问题的初始条件。
然后将细网格的解与粗网格的解作对比。
用已存在的案例创建一个新的案例
现在希望根据cavity创建一个名为cavityFine的新案例,用户需要克隆cavity案例,并且编辑必须的文件。
首先,在于cavity相同的目录下创建一个新的案例文件,如:
cd$FOAMRUN/tutorials/incompressible/icoFoam
mkdircavityFine
然后从cavity案例中拷贝基本的文件到cavityFine中,然后进入cavityFine案例:
cp-rcavity/constantcavityFine
cp-rcavity/systemcavityFine
cdcavityFine
创建细网格
希望用blockMesh增加网格单元数。
打开blockMeshDict文件,编辑block的指定信息。
块的指定在blocks关键词下的列表中。
Block定义的句法结构见节的完整描述;在该阶段只需知道紧随hex的首先是块顶点的列表,然后是是每个方向上许多单元数的列表。
最初在cavity案例中设为(20201),现在改为(40401)并保存文件.像之前一样运行blockMesh,得到新的细网格。
将粗网格结果映射到细网格
mapFields应用程序将与一个给定几何结构相关的场映射到另外一个几何结构的相应场中,在我们的例子中,流场认为是连续的,由于源场及目的场的几何结构及边界类型或条件都是恒定的。
在该例子中执行mapFields时使用-consistent命令行。
从目标案例controlDict中startFrom/startTime指定的时间目录中读取mapFields映射的流场数据,也就是说,结果被映射到的地方。
在本例中,希望从cavity案例粗网格的最终结果映射到cavityFine案例中的细网格,因此,由于这些结果存储在cavity的文件中,在controlDict文件中设置startTime为,
startFrom设为startTime。
现在案例已准备好运行mapFields,输入mapFields-help快速显示mapFields要求源案例目录作为自变量。
使用-consistent选项,所以应用程在cavityFine目录执行:
mapFields../cavity-consistent
应用程序将运行并在终端输出:
Source:
"..""cavity"
Target:
".""cavityFine"
Createdatabasesastime
Sourcetime:
Targettime:
Createmeshes
Sourcemeshsize:
400
Targetmeshsize:
1600
Consistentlycreatingandmappingfieldsfortime
Open∇
Lid-drivencavityflow
U-33
interpolatingp
interpolatingU
End
控制调整
为保持Courant数小于1,见节所讨论的,由于所有单元的尺寸都评分了所以时间步长必须评分,所以controlDict文件中deltaT设为。
流场数据在固定数目的时间步长间隔时输出。
此处演示如何在固定时间间隔指定数据输出。
在controlDict中的writeControl关键词下,在用runTime输入产生的输出结果间指定一个固定数量的运行时间,而不是通过timeStep输入固定书目的时间步来输出。
在该案例中,用户应该指定没输出,因此应设置writeInterval为且writeControl为runTime。
最终,由于案例是在粗网格结果上开始的,只需要运行很短的时间就能达到合理的收敛为稳态。
所以endTime设为这些设置正确并保存文件。
运行代码作为后台过程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenFOAM 顶盖 驱动 详解 使用手册