验证OpenFOAM中interFoam求解器

合集下载

基于OpenFOAM的化学危害扩散预测求解器的开发与验证

基于OpenFOAM的化学危害扩散预测求解器的开发与验证

基于OpenFOAM的化学危害扩散预测求解器的开发与验证韩朝帅;诸雪征;顾进;张宏远;张赫;左钦文
【期刊名称】《兵工学报》
【年(卷),期】2022(43)5
【摘要】化学危害扩散预测是精确化防护保障的关键基础,解决化学危害扩散预测的关键是如何精确表达下垫面、建筑物、湍流对危害物的扩散影响机理。

立足化学危害扩散预测实际需求,在计算流体力学软件OpenFOAM中创新性植入信息融合模块、数据同化模块、源项反演模块和智能寻优算法,设计开发适用于化学危害扩散预测的求解器ChdpFOAM,并对ChdpFOAM求解器的适用性进行实验分析。

研究结果表明:ChdpFOAM求解器在下垫面相对平坦、建筑物少的区域预测精度较高,在建筑物密集区域预测精度有所下降;相对于PISOFOAM求解
器,ChdpFOAM求解器的计算精度约提升6%,计算效率下降约32.57%,具备良好的可移植性和拓展性,为化学危害扩散预测提供了一种新思路与方法。

【总页数】12页(P1155-1166)
【作者】韩朝帅;诸雪征;顾进;张宏远;张赫;左钦文
【作者单位】陆军防化学院;军事科学院防化研究院;陆军装备部项目管理中心【正文语种】中文
【中图分类】X831
【相关文献】
1.基于OpenFOAM的投影法磁流体求解器开发与验证
2.基于变分同化的化学危害扩散预测研究
3.基于OpenFOAM的超临界CO2流动与传热求解器的开发与验证
4.基于PWB方法的电大尺寸腔体结构电磁耦合求解器的开发与验证
5.基于OpenFOAM的磁流体求解器的开发和应用
因版权原因,仅展示原文概要,查看原文内容请购买。

openfoam解方程

openfoam解方程

openfoam解方程OpenFOAM是一种自由、开源的计算流体力学(CFD)软件,用于解决各种流体流动方程。

它由C++编写,包含丰富的数值方法和求解器,可用于模拟各种复杂的流动现象。

本文将介绍OpenFOAM解方程的基本原理和应用。

一、OpenFOAM的基本原理OpenFOAM的基本原理是使用数值方法求解流动方程。

流动方程通常包括连续性方程、动量方程和能量方程。

首先,通过网格划分将流场离散化,然后使用数值方法将方程离散化。

最后,通过迭代求解,得到流场的数值解。

在OpenFOAM中,网格划分使用有限体积法(FVM)。

FVM将流场分割成有限的体积元,然后计算体积元之间的通量。

通量是通过边界面的流量和体积元内部的源项计算得到的。

对于不同的流动方程,通量的计算方法也不同。

二、OpenFOAM的应用OpenFOAM可用于模拟各种流动现象,包括自由表面流动、多相流动、湍流流动等。

以下是OpenFOAM的一些常见应用。

1.自由表面流动自由表面流动是指流体表面不受任何限制,如河流、湖泊、海洋等。

在OpenFOAM中,使用VOF方法(Volume of Fluid)模拟自由表面流动。

VOF方法将流体分为两个相,即液相和气相。

通过计算液相和气相的界面位置,可以确定自由表面的位置。

此外,还可以使用其他方法,如Level Set方法和Front Tracking方法等。

2.多相流动多相流动是指流体中存在两种或多种不同的相,如气液、固液、气固等。

在OpenFOAM中,采用欧拉-欧拉方法(Euler-Euler)模拟多相流动。

欧拉-欧拉方法将两种或多种相看作是连续介质,通过计算每个相的流场和相互作用力,得到多相流动的数值解。

3.湍流流动湍流流动是指流体中存在湍流现象。

湍流是一种复杂的现象,难以通过解析方法求解。

在OpenFOAM中,采用雷诺平均Navier-Stokes 方程(RANS)模拟湍流流动。

RANS方程通过对流场进行平均,将湍流现象转化为平均流场和湍流应力。

openfoam rhopimplefoam详细解析

openfoam rhopimplefoam详细解析

在 OpenFOAM 中,rhoPimpleFoam 是一个求解不可压缩流动问题的数值模拟求解器,基于 PISO 算法和 SIMPLE 算法。

它用于模拟液体流动问题,特别是不可压缩流体的压力-速度耦合问题。

以下是对 rhoPimpleFoam 的一些详细解析:1.求解器特点:–rhoPimpleFoam 是 OpenFOAM 中最常用的求解器之一,用于模拟不可压缩流动问题。

–它结合了 rhoCentralFoam 和 Pimple 算法,能够有效地解决不可压缩流体的流动问题。

–采用压力速度耦合的方式求解 Navier-Stokes 方程。

2.算法细节:–rhoPimpleFoam 使用了 PISO 算法,它是一种常用的压力速度耦合算法,通过预测-修正策略来解耦速度和压力。

–该求解器还使用了 SIMPLE 算法的变体,通过迭代方式解决连续方程,同时处理不可压缩流体的压力-速度耦合。

3.应用范围:–rhoPimpleFoam 适用于模拟各种不可压缩流体问题,如液体流动、液体传热等。

–在流体力学、热传导、传热学、生物力学和空气动力学等领域有广泛的应用。

4.输入和控制参数:–在使用 rhoPimpleFoam 求解器时,需要提供相应的网格文件、边界条件、物理参数和求解控制参数。

–控制参数包括时间步长、迭代收敛准则、求解器收敛准则等。

5.输出结果:–rhoPimpleFoam 求解器会生成包含流场、压力场、速度场等信息的输出文件,这些文件可以进一步用于后处理和分析。

总的来说,rhoPimpleFoam 是一个在 OpenFOAM 中常用的求解器,用于模拟不可压缩流体的流动问题。

它结合了 PISO 算法和 SIMPLE 算法的优势,能够有效地求解各种流体力学问题,并提供丰富的输出结果用于进一步分析和后处理。

使用OpenFOAM的基本流程

使用OpenFOAM的基本流程

使用OpenFOAM的基本流程任何CFD软件的使用无非通过3个基本步骤:前处理,CFD计算,后处理【前处理】主要包括:网格的生成,物理参数的设定,初始边界条件的设定,求解控制设定,方程求解方法的选择,离散格式的选择。

【CFD计算】设定上述参数后,直接在case文件中,在控制台中输入相应求解器的名字即可。

如果参数设置有误,会得到提示。

【后处理】openfoam推荐的后处理软件为paraview,当然你可以运用foamToTecplot功能将其转换为tecplot格式运用tecplot进行处理,或者运用foamDataToFluent转化为fluent格式进行后处理,所有支持的转化在/OpenFOAM-1.5/applications/utilities/postProcessing/dataConversion 文件夹中。

【前处理的详细步骤】一、网格生成:OpenFOAM带有自己的网格生成功能blockMesh,他可以生成块结构化网格,使用比较简单,但对于复杂几何,该功能实施比较复杂。

可以采用其网格软件如:gridgen,pointwise,gambit,icemcfd,tetgen,gmesh,ansys等生成网格,通过网格转换功能将其转换为openfoam可识别的网格。

我本人通常采用gridgen 生成fluent网格,再采用fluentMeshToFoam功能转换为openfoam可识别网格。

二、物理参数的设置:OpenFOAM中的物理参数文件都在当前case文件夹里面的constant文件夹中,里面常用的文件通常常有environmentalProperties:设定环境参数,重力加速度transportProperties:传输相关参数,比如黏性,密度,对于非牛顿流体的黏性模型及其参数等LESProperties:大涡模型及其相关的模型参数RASProperties: 雷诺时均模型及其相关模型参数thermodynamicProperties:热物理相关参数这些文件的名字由solver里面定义,可以任意更改,上面书写是openfoam中的一个惯例,至于如何更改,请参看solver说明。

OpenFOAM求解算例过程

OpenFOAM求解算例过程

2、求解实例的步骤:1)导入网格。

将Fluent中生成的网格文件.msh导入到OpenFoam中需要执行fluentMeshToFoam命令。

通过该命令导入的网格由于软件转换的不足,需要使用者在执行前检查导入网格的边界条件是否正确,只有在网格边界条件正确的情况下才能执行计算命令。

2)检查网格。

命令为checkMesh3)设置相应的物性参数,如在case1/constant/transportProperties路径下设定运动粘度(nu)。

4)设定初始条件,如在case1/0/p路径下设定初始状态下的压力场。

5)对计算时间和输入/输出数据的控制。

如在case1/system/controlDict路径下设定相应的起始/终止时间,一定的时间步,输出的格式或精度,输出的时间间隔等。

6)设定各个求解量的离散格式,如在case1/system/fvSchemes路径下设定时间的离散格式为欧拉格式,即:ddtSchemes {default Euler}。

7)设定求解器,求解方法,以及松弛因子等,如在case1/system/fvSolution路径下设定求解方法为PISO方法。

8)执行求解命令,如icoFaom –case case1。

9)导出数据。

如果导出网格数据用foamMeshToFluent命令,如果导出计算结果数据用foamDataToFluent命令。

10) 用Fluent等软件查看计算结果。

3、并行求解实例1)在需要并行求解的例子目录下面创建decomposeParDict文件,对其中包含的内容进行设置。

注:在decomposeParDict文件中包含的内容有:需要的并行处理器的个数;分割数据的方法,包括simple(按照xyz的顺序,对各个方向的分块数进行设定),hierarchical(对各个方向的分块数进行设定,各方向的顺序可以更改),metis(按照各个处理器需要分配的比重进行分配),manual(手动进行人工分配,需包含分配的文件);分散后的数据是否需要分配在不同的磁盘,如果需要则应该写明分配磁盘的路径。

使用OpenFOAM的基本流程

使用OpenFOAM的基本流程

使用OpenFOAM的基本流程1. 安装OpenFOAMOpenFOAM是一个开源的、高性能的计算流体力学(CFD)软件包。

在开始使用OpenFOAM之前,首先需要将其安装在您的计算机上。

以下是在Linux系统上安装OpenFOAM的基本步骤:•打开终端,并使用以下命令来下载OpenFOAM软件包:$ sudo apt-get install openfoam•输入管理员密码,确认安装。

•安装完成后,您可以使用以下命令来验证OpenFOAM是否成功安装:$ foamInstallationTest2. 创建工作目录在开始使用OpenFOAM之前,您需要创建一个工作目录来存储您的模拟案例。

以下是创建工作目录的步骤:•打开终端,并使用以下命令创建工作目录:$ mkdir -p $FOAM_RUN•使用以下命令进入工作目录:$ cd $FOAM_RUN3. 准备模拟案例在使用OpenFOAM进行模拟之前,您需要准备模拟案例的几何模型和边界条件。

以下是准备模拟案例的基本步骤:•将几何模型文件复制到工作目录中,可以使用以下命令:$ cp /path/to/geometry.stl .•使用以下命令创建模拟案例的工作目录:$ mkdir case1•进入模拟案例的工作目录:$ cd case1•使用以下命令将模型文件导入模拟案例:$ gmshToFoam /path/to/geometry.stl•设置边界条件。

您可以使用文本编辑器打开constant/polyMesh/boundary文件,并设置各个边界的条件。

4. 运行模拟在模拟案例准备就绪后,您可以使用OpenFOAM来进行流场模拟。

以下是运行模拟的基本步骤:•使用以下命令生成网格:$ blockMesh•设置初始和边界条件:$ setFields•运行求解器来解决模拟问题。

例如,对于流动问题,您可以使用以下命令来运行求解器:$ icoFoam•等待模拟求解过程完成。

openfoam常用命令

openfoam常用命令openfoam是一款用于模拟流体动力学方面的强大工具,它提供了丰富的常用命令,使用起来十分方便,但对于初学者来说,理解其中的命令相当困难,为了帮助人们更好地了解openfoam,本文将介绍openfoam的常用命令的含义和使用方法。

1. blockMesh:blockMesh是openfoam中最常用的常用命令之一,它可以帮助用户为仿真创建网格,该命令可以按照用户的设计规划,将预定义的体积拆分成矩形单元。

该命令的使用方法是:(1)运行blockMesh程序:在终端中输入blockMesh命令,就可以运行blockMesh程序;(2)在blockMeshDict文件中指定网格参数:可以在blockMeshDict文件中指定网格参数,如网格边界、网格类型和尺寸等;(3)运行blockMesh命令:在终端中输入blockMesh命令,就可以生成网格文件;(4)查看网格:可以使用paraFoam工具查看生成的网格,并进行网格可视化,完成对网格参数的调整。

2.checkMesh:checkMesh是openfoam中另外一常用命令,该命令可以检查生成的网格的准确性,它可以检查网格单元的连接状态、封闭性以及体积是否正确等。

具体使用步骤如下:(1)运行checkMesh程序:在终端中输入checkMesh命令,就可以运行checkMesh程序;(2)运行 checkMesh令:在终端中输入checkMesh命令,就可以进行网格检查;(3)查看检查结果:检查结果会显示在终端中,可以根据检查结果判断网格的质量,如果网格质量不满足要求,可以重新生成网格。

3. decomposePar:decomposePar是openfoam中的一个并行计算程序,它可以将一个大仿真分解成多个更小的仿真,每个小仿真可以单独运行。

使用decomposePar程序的具体步骤如下:(1)在decomposeParDict文件中指定分解参数:可以在decomposeParDict文件中指定分解参数,如分解方向、分解数量和分解模式等;(2)运行 decomposePar序:在终端中输入decomposePar命令,就可以运行decomposePar程序,按照定义的参数,将原仿真分解成多个小仿真;(3)分发分解结果:可以使用simpleFoam等工具,将分解结果分发到多个计算机,进行并行计算;(4)收集结果:每个计算机上运行的结果需要收集到单一的计算机上,由reconstructPar程序完成,此时合成的仿真结果就可以用于深入分析。

OpenFOAM求解算例过程

OpenFOAM求解算例过程2、求解实例的步骤:1)导入网格。

在fluent中生成的网格文件要将MSH导入openfoam,需要执行fluent mesh of OAM命令。

由于缺乏软件转换,用户需要在执行之前检查导入网格的边界条件是否正确。

仅当网格的边界条件正确时,才能执行计算命令。

2)检查网格。

该命令设置checkmesh3)的相应物理参数,例如,设置case1/constant/transportproperties 路径下的运动粘度(nu)。

4)设置初始条件,例如在case1/0/p路径下将压力场设置为初始状态。

5)对计算时间和输入/输出数据的控制。

如在case1/system/controldict路径下设定相应的起始/终止时间,一定的时间步,输出的格式或精度,输出的时间间隔等。

6)设置每个溶液量的离散格式。

例如,在case1/system/fvschemes路径下,将时间的离散格式设置为Euler格式,即ddtschemes{defaulteuler}。

7)设定求解器,求解方法,以及松弛因子等,如在case1/system/fvsolution路径下设定求解方法为piso方法。

8)执行solve命令,例如icofaomcasecase1。

9)导出数据。

如果导出网格数据用foammeshtofluent命令,如果导出计算结果数据用foamdatatofluent命令。

10)使用fluent和其他软件查看计算结果。

3.并行解决方案示例3)执行并行运算命令,其格式为:mpirun--hostfile-np-parallel>log&4)重新组织计算结果,例如重建Parccase1scientificgeneral±m.dddddd±x x指数在-4~4之间用fixed格式,之外Timeprecision与timeformat结合使用,以整数表示原始时间精度原ascii格式列数据是枪图格式的数据采用grace/xmgr格式数据是jplot格式的gnuplotGraphformat(使用软件输出图形数据)xmgr杰普洛特yes运行时可修改(无论openfoam是否在每个时间步的开头读取不同的目录)nolibsfunctionsdatreadingOpenfoam在每个时间步的开头读取数据openfoam不是在每个时间步的开始录运行TimeLoadableFunction增加的库的列表在运行时间开始下载函数列表在运行时开始下载5、fvshemes中包含的内容:fvschemeslinearcentredschemescubiccorrectionmidpiontupwindinterpolationschemes (值的点对点的upwindedconvectionschemes差值)linearupwindskewlinearquicklimitedlineartvdschemesvanleermuscllimitedcubicnvds hemescorrecteduncorrectedsngradschemes(网格法向梯度limited∮项的离散格式)boundedfourthgaussgradschemes(梯度的离散格leastsquares式)fourthlimitedgausscorrectedgaussuncorrectedlaplacianschemes(拉普拉斯算子gauss 的离散格式)sfcdgamma∮式)gausslinearupwindgaussquickgausstvdschemesgausssfcdgaussnvdschemes。

OpenFOAM根据自带求解器计算自己的算例-生成网格-边界条件总结

采用OpenFOAM自带求解器计算算例——网格生成&边界条件自己的公众号:一介UDFer,不定期更新个人Fluent+UDF和OpenFOAM学习经验,交流学习。

说明:此处的应用只限于使用OpenFOAM自带的求解器计算自己想计算的case,对求解的离散格式,求解方法,湍流模型,燃烧模型等均未做修改。

1 OpenFOAM的case结构OpenFOAM(OF)和fluent有很大的区别,OF完全是靠代码设置,fluent有很好的用户界面,通过下拉菜单选择。

OF自带了很多求解器,这些求解器适用于固定的工况,比如说物理模型的几何结构及边界条件,方程的离散方式及求解方式等。

以XiFoam(OF中的预混燃烧求解器)为例,OpenFOAM计算的case 构架如下:1.1 System文件夹:controlDict文件:对时间步、输入输出时间、场数据读取和写入进行控制fvSchemes文件:指定有限体积法的离散格式fvSolution文件:指定方程组矩阵求解器、残差以及其他算法控制1.2 constant文件夹:存在网格文件(ployMesh文件夹下)湍流模型选择字典文件、流动特性参数、流体热物理性参数,化学反应相关参数,重力等1.3 0文件夹:存放初始条件字典文件(速度、压力、温度,其他与流动或者燃烧相关的参数初始值)2 生成网格如果使用OF自带的求解器计算自己想要计算的case,第一步是生成相应的网格文件。

采用代码画网格,费时间,并且对于几何结构比较复杂的几何结构也不适合,所以可以采用专业的网格生成软件画网格,然后转化为OpenFOAM网格文件。

将自己画好的网格(此处指*.mesh文件),采用命令fluentMeshToFoam转化成OF网格。

命令详细介绍参考/index.php/FluentMeshToFoam;这里我常用的是fluentMeshToFoam +空格+网格文件名字+空格+-scale+空格+0.001。

【OpenFOAM博士课程2020】04_ 在源代码中找到求解器和实用程序教程并学习如何使用它们

How tofigure out how to use other solvers and utilities•There are only written tutorials to some of the applications and utilities in Open-FOAM.Be aware of the documentation that actually does exist in the UserGuide and ProgrammersGuide!•We will now learn how to search the installation for information on how to use solvers and utilities.•A documentation might be lagging,but the source code is not!How tofind solver tutorials•Type tut to go to the$FOAM_TUTORIALS directory.Here youfind many case-setups for the solvers in OpenFOAM.•Type:tree-d-L2$FOAM_TUTORIALSto get a list of for which solvers there are tutorial cases available.•Type:tree-d-L2$FOAM_TUTORIALS/incompressible/icoFoamto get a list of which tutorial cases are available for the icoFoam solver.•All the solver tutorials have Allrun scripts that describe the use of those tutorials.We will now have a look at the Allrun script of the$FOAM_TUTORIALS/incompressible/icoFoam tutorials.This is actu-ally what you will do manually when you do the cavity tutorials in the UserGuide.In other words,you can use the Allrun script as a short summary of the description in the UserGuide.Read Allrun scripts to learn more(1/7)(Note that the following description shows the principle.There might be small differences in exactly what is done by the Allrun script between versions.)In the icoFoam tutorial directory there is an Allrun script.When running this script it is preferred to copy the entire directory to your run directory,so that you keep a clean version of the tutorials in the installation directory.Type:cp-r$FOAM_TUTORIALS/incompressible/icoFoam$FOAM_RUNcd$FOAM_RUN/icoFoam/cavity./Allrun>&log_Allrun&Looking in the Allrun script,you can see a list of cases that will be executed:cavityCases="cavity cavityFine cavityGrade cavityHighRe cavityClipped" Some of those cases are actually created by the script.At the end of the script it also runs the elbow case.The script contains Linux commands and calls for OpenFOAM applications in order to set up and run the simulations.first runs the cavity case#Running blockMesh on cavity:blockMesh#Running icoFoam on cavity:icoFoamRead Allrun scripts to learn more(3/7) The Allrun script for the icoFoam cavity tutorials actuallythen runs the cavityFine case:#Cloning cavityFine case from cavity:mkdir cavityFinecp-r cavity/{0,system,constant}cavityFine[change"20201"in blockMeshDict to"41411"][set startTime in controlDict to0.5][set endTime in controlDict to0.7][set deltaT in controlDict to0.0025][set writeControl in controlDict to runTime][set writeInterval in controlDict to0.1]#Running blockMesh on cavityFineblockMesh#Running mapFields from cavity to cavityFinemapFields-case cavity-sourceTime latestTime-consistent #Running icoFoam on cavityFineicoFoamthen runs the cavityGrade case:#Running blockMesh on cavityGradeblockMesh#Running mapFields from cavityFine to cavityGrademapFields-case cavityFine-sourceTime latestTime-consistent #Running icoFoam on cavityGradeicoFoamRead Allrun scripts to learn more(5/7) The Allrun script for the icoFoam cavity tutorials actuallythen runs the cavityHighRe case:#Cloning cavityHighRe case from cavitymkdir cavityHighRecp-r cavity/{0,system,constant}cavityHighRe#Setting cavityHighRe to generate a secondary vortex [set startFrom in controlDict to latestTime;][set endTime in controlDict to 2.0;][change0.01in transportProperties to0.001]#Copying cavity/0*directory to cavityHighRecp-r cavity/0*cavityHighRe#Running blockMesh on cavityHighReblockMesh#Running icoFoam on cavityHighReicoFoamRead Allrun scripts to learn more(6/7) The Allrun script for the icoFoam cavity tutorials actuallythen runs the cavityClipped case:#Running blockMesh on cavityClippedblockMesh#Running mapFields from cavity to cavityClippedcp-r cavityClipped/0cavityClipped/0.5mapFields-case cavity-sourceTime latestTime[Reset the boundary condition for fixedWalls to:][type fixedValue;][value uniform(000);][We do this since the fixedWalls got][interpolated values by cutting the domain]#Running icoFoam on cavityClippedicoFoamfinally runs the elbow caseNow,open each case with paraFoam and have a look.Run ALL the tutorials using the Allrun scriptsWe will not do this now!•You can also run another Allrun script,located in the$FOAM_TUTORIALS direc-tory.This script will run through ALL the tutorials(calls Allrun in each solver directory).It can also check the logfiles for errors,using a test loop(have a look at the Allrun script).•Use the Allclean script to clean up when you no longer need the results from all the tutorials(only removesfiles that are created when running the cases).•You can use this script as a tutorial of how to generate the meshes,how to run the solvers,how to clone cases,how to map the results between different cases etc.•Again,I suggest that you copy thefiles to your run directory:cp-r$FOAM_TUTORIALS$FOAM_RUNHow tofind tutorials for the utilities•There are no’case’tutorials for the utilities,but we can search for examples:find$WM_PROJECT_DIR-name\*Dict|grep-v blockMeshDict|grep-v controlDict You will get a list of example dictionaries for the utilities that use a dictionary.Some of those examples can be found next to the source code of each particular utility,and some are also used in the solver tutorials.The ones that don’t use a dictionary are usually easier to learn how to use,in particular when using the-helpflag.Now you should be ready to go on exploring the applications by yourself.•The ProgrammersGuide,chapter3•The OpenFOAM Wiki(e.g.the Turbomachinery Working Group)•The OpenFOAM Forum•The OpenFOAM Workshop trainings。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

验证OpenFOAM中interFOAM求解器 1. OpenFOAM简介 OpenFOAM是Open Field Operation and Manipulation的简称,顾名思义,它实现的是(张量)场的运算和操作,实质上是一个应用于计算连续介质力学的C++类库。这一开源软件起源于八十年代后期英国帝国理工大学的Gosman教授的团队。当时的CFD代码普遍采用FORTRAN语言编写,为了寻求一种更为强大灵活通用的模拟平台,在以后的若干年里,他们利用上了C++语言的高级特性,采用更为有效的方式重新编写了很多代码。其中最初的一些C++类出自Charlie Hill的博士论文,到1993年由Henry Weller和Hrvoje Jasak以及后来的帝国理工博士生们持续不断的开发。这一软件起初叫做 FOAM,直到2004年由Henry创立的OpenCFD公司以开放源代码的形式公之于众,更名为OpenFOAM,目前最新版本是OpenFOAM-1.7,另外还有一个Jasak引导的克罗地亚版本,目前的版本是OpenFOAM-1.5-dev,两个版本在底层类库和上层应用的涵盖范围上有许多差异。OpenFOAM的优越性表现在以下几个方面: 1. 是最早利用C++语言编写而成的科学软件包之一(其它的主流CFD软件公司已经发布或正在开发新一代C++代码); 2. 利用C++的运算符重载功能使得顶层代码在对偏微分方程的描述上相对简单了许多,且可读性强,这使得OpenFOAM看上去就像一种非常自然的适用于模拟物理问题的编程语言; 3. 是最早采用多面体单元网格的通用CFD软件包,而这个功能得以实现是源于对模拟对象采用分层描述的自然结果; 4. 是目前发布于开源许可下的最强大的通用CFD软件包。

OpenFOAM为CFD领域研究工作者们提供了一个强大的开源研究平台,基于OpenFOAM展开的学习和研究目前正在欧美国家的研究院校和技术公司如火如荼的进行:Chalmer University of Technology从2006年开始开设了针对OpenFOAM的博士课程,他领导的涡轮机小组开发出用于模拟空泡和回旋流的代码,在瑞典还有另外几所大学也开设了OpenFOAM相关课程,Niklas Nordin和他的研究小组开发出强大的模拟燃烧的求解器(dieselFoam),瑞典的几家公司开始将它们应用于工业;2008年丹麦的工业界和研究院校发起了提升国家开源CFD软件的倡议,八家公司和两所院校(Aalborg University和Technical University of Denmark)联合开发丹麦的开源CFD软件平台,他们选用OpenFOAM开展了诸多项目;在德国,许多研究院校已经开始用OpenFOAM来工作,他们几乎每半年就组织一次OpenFOAM的用户交流研讨会;挪威的Risavika燃气能源公司开展了数值模拟传热多相流研究二氧化碳的捕捉和封存,该研究机构已经发表了他们的研究成果并给出了含传热过程的可压缩VOF两相流求解器(compressibleInterFoam)的算例;另外,我们也可以从CFD-Online论坛上看到OpenFOAM板块的帖子数仅次于ANSYS(Fluent and CFX),其用户交流活跃程度非同一般。当然,基于OpenFOAM开展工作也面临着一定程度的挑战和困难,相比较商业CFD软件,OpenFOAM缺乏详尽的用户使用手册,相关学习资料也很有限,它对研究工作者提出了更高的要求,需要研究者更加积极主动地去探索和持续不断地深入学习。CFD-Online的OpenFOAM板块是很好学习交流平台,OpenFOAMwiki是很好的资料库,对审视OpenFOAM的所有相关内容很有帮助,Jasak的克罗地亚网站提供了很多演讲报告和OpenFOAM相关的博士论文,是深入学习的好资料,官方发布的UserGuide和ProgrammerGuide,尽管写得远远不够详尽,初学者会觉得对读程序没有多大帮助,但是只要对OpenFOAM自定义化的语言一定程度的熟悉之后,再回过头来看,会对OpenFOAM的认识有一个整体上的提升。

2. 基本两相流求解器interFOAM简介 2.1简介两相流(two fluid system)问题 interFOAM是OpenFOAM中用来解决two-fluid systems一类问题的求解器,属于the flow of two immiscible fluids的现象有:水波、溃坝、水中气泡等,two-fluid system按照界面的拓扑结构可分为三类:分离(segregated)、混合流(mixed)、分散流(dispersed)。比如一个盛有部分水的封闭容器,当低频小幅度晃动时,界面完好,此时为第一种情况;当晃动频率振幅增加到一定时,界面变得不稳定,界面部分破碎,致使液体包进了气泡,此属第二类情况;当容器剧烈晃动时,大量空气以悬浮的气泡形式存在液体中,为第三类情况。interFOAM中没有引入湍流模型,因此它主要针对第一二类问题,所有的方法能够模拟界面发生较大变形,破裂或融合等现象,但也不排除第三类情况。这类问题的关键技术在于要模拟出两种流体的界面interface,由于在整个体系的运动过程中,界面往往是不断变化的,整个流体域的运动相互耦合,从而需要在求解过程中不断生成界面,要解决好这个问题,需要考虑以下几点:

1. 在离散网格中表示出界面 2. 如何处理分布了两种流体的计算单元 3. 界面的运动 4. 界面条件与运动方程的耦合 总的来说,interFOAM中使用了VOF(volume of fluid)来处理这类问题。自由面或流体界面的模拟方法总的可归为两类:面法(假想界面上有粒子,高度函数,Level Set 法,贴面法等)和体积法(假想流体中有粒子,体积分数法等)。interFOAM 使用了体积法(volume method)中的体积分数法(volume fraction)来表示计算域中两种流体的分布,但是仅仅知道计算单元(cell)中的两种流体体积比还是不够的(图1),还要能进一步表示出每个计算单元中的流体分界面,这需要良好的interface capturing method,以期望模拟出真实的界面。目前出现的技术有:线技术(line techniques),施主受主法(donor-accepter method),高阶差分法(higher order differencing schemes),interFOAM使用了基于施主受主法的VOF法。 图1. 离散网格中的体积分数 2.2 数学建模 对于two-fluid system 这类问题,首先引入体积分数函数,定义1表示一种流体的存在,0表示另一种流体的存在,10表示两种流体的界面区域,因此(10)表示了整个流场中两种流体的分别,在建立运动方程时将两种流体当作一种流体来处理,该流体的物理属性表示为:

211)( (1)

211)( (2)

OpenFOAM采用FVM法离散计算区域,函数在界面区域经历非连续变化(a step function),这导致,成为分段连续函数,为了能够使用连续介质力学方法建立数学模型并计算界面曲率,需要对函数进行光滑处理,定义流体的过渡区域厚度为,则有:

1 for the point(x,t) inside fluid 1(,)0 for the point(x,t) inside fluid 201 for the point(x,t) inside the transitional areaxt



满足的输运方程:

(3) 0utDt

D (4)

若用表示任何守恒物理量,它满足控制体形式的守恒方程为: VVVVsVVDcdSQdVQdSFdSFdV

t

(5)

方程(5)的微分形式为: sVDcQQFFt

 (6)

取,表示单位体积质量,由于我们研究的系统中无化学反应或相变,因此无源无扩散,方程简化为:

0ut



(7)

利用方程(1)(4)可进一步简化为 0u (8)

动量守恒时,取u,表示单位体积动量,认为系统中无动量扩散,因此0DF,源项由内部力和外部力组成,流体微元内部力相互抵消,微元表面存在应力,切向表现为粘性力,法向表现为压力,把流体视为局部热平衡的牛顿流,则应力张量表示为:

TuuIupT

3

2

(9)

另外,液体在自由面上还受到表面张力的影响,是张力系数,表示自由面每增加单位面积所需做的功,用表示界面曲率,n表示界面的单位法向量,用f表示表面张力沿界面法向的一个分量,此力的作用是平衡界面两边的压力差,此力只在界面处存在,在非界面处其值为零。

nxf)( (10)

其中

边界处的源项 源项 边界处的扩散项 边界处的对流项

相关文档
最新文档