您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > OpenFOAM顶盖驱动流详解!使用手册(中文翻译版)
引言这是开源场运算和操作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$FOAMRUNcp-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$FOAM_RUN/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//文件头{version2.0;//版本号formatascii;//存储形式二进制或者asciiclassvolScalarField;//场的类型,体心标量场objectp;//场的名字}在手册其他部分:为清楚起见并节省空间,文件头,包括寬显线及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是该速度方向上的单元尺寸。流速在穿过区域时是变化的,必须确保任何地方的Co1。因此我们以最糟的状况选择δt的取值:Co的最大值必须与大尺度流速和小的单元尺度联合的效果相一致。这里,这个整个区域的单元尺寸固定,所以Co的最大值发生在紧挨着盖子的地方,这里速度接近1米每秒。单元尺寸为:因此为了达到全部区域内Co=1,时间步长deltaT的设置必须小于等于:
本文标题:OpenFOAM顶盖驱动流详解!使用手册(中文翻译版)
链接地址:https://www.777doc.com/doc-3398630 .html