ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:20.92KB ,
资源ID:27095148      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27095148.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OpenFOAM的程序开发初步共21页.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OpenFOAM的程序开发初步共21页.docx

1、OpenFOAM的程序开发初步共21页OpenFOAM的程序开发初步(chb)一.OpenFOAM应用(yngyng)的类型:使用OpenFOAM进行CAE模拟的,大致可分为(fn wi)三种类型:1)直接利用OpenFOAM的标准的求解器进行模拟,把OpenFOAM替代商业软件来使用,OpenFOAM已基本具有(jyu)这样的功能和人气,与Fuent,Star-CD等相比较,OpenFOAM显然具有更高的求解效率和灵活性。2)用户自定义求解器,即利用OpenFOAM的基本类库,如finiteVolume,OpenFOAM库来按照自己的求解流程来编写针对某类应用的求 解器。用户需要开发的求解器

2、就是类似于在OpenFOAM的applications中所看到的标准求解器icoFOAM,simpleFOAM等。显然 这一需求是非常大的,从OpenFOAM问世以来,已有很多用户定义了自己的求解器。这类需求的特点是,并不需要特别关心,离散和求解的最底层的知识,如 时间项离散,空间项离散等,关注的重点是求解的步骤或者流程。在编程中,通常是顶层的求解流程的开发,在多数情况下可以不编译OpenFOAM的 finiteVolume和OpenFOAM库。这种顶层的求解器的开发,是我们以前常常忽略的,或者是以前没有能力做到的。需要指出的是,商业软件中的 所谓udf,user subroutine和这是不

3、可相比的。3)用户自己定义离散方法等。对于研究离散格式、代数求解器等人来说,更关注时间项ddt,扩散项Laplacian,对流项div是如何离散的,能否有 更高效更高精度的离散方法,这需要修改finiteVolume库和OpenFOAM库中对应的代码。尤其是对流项,尽管OpenFOAM已经提供了基于 NVD和TVD的模板和40多种有名的高阶高精度格式,但可以预见,这仍然是不够的,毕竟对流项的离散仍然是目前CFD的重点研究方向。可以肯定的是,目前(mqin)有很多人关注类型2的应用,毕竟将OpenFOAM当成Fluent或Star-CCM来使用(shyng),并不见得方便。但是将OpenFOAM

4、作为类库来构建自己的求解器,这是其它软件无法实现的OpenFOAM的程序开发初步(chb)二OpenFOAM程序开发的基本知识2.1OpenFOAM的基本(jbn)术语重要的环境变量:$WM_PROJECT_USER_DIR OpenFOAM的用户目录$FOAM_TUTORIALS -OpenFOAM的算例目录$ FOAM _SRC -OpenFOAM库的源程序目录$ FOAM_APP - OpenFOAM的求解器目录$ FOAM_APPBIN - OpenFOAM的求解器执行文件目录$ FOAM_RUN -用户的算例目录重要的shell:run cd to $FOAM_RUNsrc = cd

5、 to $FOAM_SRCapp = cd to $FOAM_APPutil = cd to $FOAM_APP/utilitiessol = cd to $FOAM_APP/solverstut = cd to $FOAM_TUTORIALS求解(qi ji)器的基本文件结构appName 包含求解(qi ji)器源代码的目录+appName.C 求解(qi ji)器主程序 CreateFields.H 场变量(binling)的声明和初始化 +Make/ 编译指令+files 编译需要的源程序文件和生成的目标文件+options 编译选项,如链接库等appName/appName.C是求解

6、器的主程序appName/createFields.H声明变量,并从文件中读入初值,如p,物性。appName/Make/files 所有源程序的名称,一个文件一行,最后一行是目标代码的名称和存放位置,EXE=$(FOAM_USER_APPBIN)/appNameappName/Make/options设定查找头文件和库的路径,EXE_INCS,和需要链接的库EXE_LIBS算例的基本文件(wnjin)结构case/ 算例目录(ml)+0/ 包含(bohn)初始和边界条件+constant/ 包含初次读入后,不随时间变化(binhu)的数据+polyMesh/ 包含多面体网格数据+transp

7、ortProperties/ 包含物性数据 +system/ 包含计算控制和离散格式设定+controlDict 包含计算控制,如时间步长等+fvSchemes 包含离散格式设定+fvSolutions 包含代数求解器或SIMPLE,PISO算法设定具体而言case/0 每个需求解的变量需要一个文件设定其初始边界条件case/constant/polyMesh 网格数据,如owner neighbour points faces boundarycase/system/transportProperties 物性数据case/system/controlDict 设定起始终止时间,时间步长,输

8、出控制case/system/fvSchemes 设定程序用到的每个微分算子的离散格式case/system/fvSolution 为每个变量选择代数方程求解器/收敛精度及PISO等算法设定三OpenFOAM程序开发的理论知识作求解开发,必须(bx)能写出需要求解的控制方程及其定解条件,并且对于如何求解方程或方程组的步骤已经明确。这些流体力学(l xu)、传热学以及相关的理论是必需的,所谓连续介质力学中的数学模型,控制方程和定解条件(tiojin)就是(jish)表示它的语言。在这里是不可能说清楚的,这要看个人的功底了。四 .OpenFOAM程序开发的最简单的例子下面采用OpenFOAM来开发

9、一个用户自己的求解器。主要是利用OpenFOAM的标准求解器icoFoam,用户不需要写任何代码,只为为了熟悉OpenFOAM程序开发的环境和步骤。步骤:1) 将icoFoam目录拷贝到新的目录可采用下面的Linux的命令实现:到OpenFOAM的incompressible目录cd applications/incompressiblecp r icoFoam myicoFoam以上只是复制目录icoFoam到新的位置,并且新目录名为myicoFoamcd myicoFoam进入新的目录,查看一下,可以看到里面的文件和icoFoam中是否一样2) 原文件改名,并且(bngqi)删除依赖文件将

10、icoFoam.C改名myicoFoam.Cmv icoFoam.C myicoFoam.C删除依赖(yli)文件rm icoFoam.dep3) 修改编译(biny)文件files和options进入Make目录(ml),打开files文件 将icoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/icoFoam 可执行文件名修改为myicoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/myicoFoam 可执行文件名此例中options不需修改,可以打开看看EXE_INC = 头文件包含 -I$(LIB_SRC)/finiteVolume/lnInc

11、ludeEXE_LIBS = 链接库-lfiniteVolume4)删除原来的obj文件 rm rf linuxGccDPOptcd .5)编译(biny) wmake6) 检验(jinyn)一下 到tutorial目录(ml),检验一下 myicoFoam . cavity六.OpenFOAM程序开发例子(l zi)一:在icoFoam中加入温度场求解准备:能量控制方程: dT/dt+div(den*U*T)=div(a gradT)在壁面上给定值条件。需要解决的问题:a)如何创建标量场,Tb) 如何创建物性,ac)如何定义温度方程,并求解d) 如何在算例中设定T和ae)如何设定T的离散格式

12、f)如何设定T的求解器的收敛标准等步骤:1)创建程序需要的新物性和新变量场打开myicoFoam.C可以看到,程序(chngx)开始运行时调用CreateFields.H,创建变量场。打开CreateFields.H,可以看到程序首先(shuxin)从transportProperties文件中读入物性, Info Reading transportPropertiesn endl; IOdictionary transportProperties ( IOobject ( transportProperties, 从字典(zdin)文件transportProperties读入runTime

13、.constant(), /transportProperties文件(wnjin)位于目录runTime.constant()中 mesh, 网格对象 IOobject:MUST_READ, IOobject:NO_WRITE ); 创建了Iodictionary类型对象 transportProperties dimensionedScalar nu /首先读入粘性系数 ( transportProperties.lookup(nu) ); 创建有量纲(lin n)标量nu,nu通过从字典transportProperties查找”nu”来赋值可以加上新方程需要(xyo)的物性 dimen

14、sionedScalar DT /首先(shuxin)读入热扩散率 ( transportProperties.lookup(DT) ); 创建(chungjin)有量纲标量DT,DT通过从字典transportProperties查找”DT”来赋值此外还要从createFields中读入p,U场,我们要加入的新的变量场为温度场T,最快的加入温度场的方法是拷贝p场的代码,修改为 Info Reading field Tn endl; volScalarField T ( IOobject ( T, runTime.timeName(), mesh, IOobject:MUST_READ, IO

15、object:AUTO_WRITE ), mesh );这样,创建(chungjin)了新的vol标量场T,从文件T中读入。对于T的创建具体解释(jish)如下:a)创建(chungjin)了标量场Tb)T通过读(IOobject:MUST_READ)在runTime.timeName()目录下名称为“T”的文件创建,在开始计算(j sun)时,runTime.timeName()是contorlDict中设定的startTime值决定的。c)T将自动写入(IOobject:AUTO_WRITE)计算结果到runTime.timeName()目录中,runTime.timeName()随迭代是

16、变化的,写入控制由contorlDict中设定。d)T是定义在mesh对象上的,这意味着T在内部cell上有值internalField,在边界上还需要边界条件,这与polyMesh/boundary中要一致。2)在求解器中加入新的求解方程 下一步回到myicoFoam.C加入新的微分方程,由于温度场依赖于速度场,可放在PISO循环后面。# include continuityErrs.H U -= rUA*fvc:grad(p); U.correctBoundaryConditions(); / Add the temperature equation fvScalarMatrix Teqn

17、 温度是标量(bioling)方程 ( fvm:ddt(T) + fvm:div(phi, T) 要用到界面(jimin)流量 - fvm:laplacian(DT, T) 扩散(kusn)项 ); TEqn.solve(); 求解(qi ji)3)编译wmake4)在算例中加入新方程的初始和边界条件4.1拷贝一个cavity算例到mycavity4.2修改transportProperties字典文件,设定DTcd constant修改transportProperties文件,前面已提到DT要从该字典文件读入。设定DT=0.002m2/sDT DT 0 2 -1 0 0 0 0 0.002

18、;4.3修改(xigi)T文件,设定初始值和边界cd 0 进入(jnr)0目录拷贝一个(y )T文件cp p T修改(xigi)T文件为FoamFile version 2.0; format ascii; class volScalarField; object T;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /dimensions 0 0 0 1 0 0 0;internalField uniform 300; 初始内部点为300 movingWall type fixedValue

19、;value uniform 350.; 边界(binji)为350 fixedWalls type fixedValue;value uniform 300.; 边界(binji)为3005)修改离散格式和代数求解(qi ji)器求解控制文件A进入(jnr)system目录由于温度方程有非稳态项,对流项,扩散项,分别要在ddt,div,laplacian中设置打开fvSchemes文件,添加divSchemes default none; div(phi,U) Gauss upwind; div(phi,T) Gauss upwind;laplacianSchemes default non

20、e; laplacian(nu,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; laplacian(1|A(U),p) Gauss linear corrected;在fvSolution中设置(shzh)代数求解器选项 T PBiCG preconditioner DILU; tolerance 1e-06; relTol 0; ;注意T方程(fngchng)形成的矩阵是非对称的,不要用PCG和DIC6)运行(ynxng)myicoFoam . mycavity七.OpenFOAM程序开发求解(qi ji)

21、器的详细分析1进入icoFoam目录可以看到createFields.H icoFoam.C icoFoam.dep Make/Make/为wmake编译(biny)所需的文件IcoFoam.C为主程序(chngx)文件,它包含createFields.H编辑(binj)icoFoam.C可以(ky)看到icoFoam.C首先引入的头文件为fvCFD.H。所以你可以看到,在编译选项options中EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude /fvCFD.H的存放目录EXE_LIBS = -lfiniteVolume /需要链接的库找到fvCFD.

22、H,编辑,可以看出这些是主程序必须的类库#ifndef fvCFD_H#define fvCFD_H#include parRun.H#include Time.H 时间类#include fvMesh.H 网格类#include fvc.H fvc类#include fvMatrices.H fvMatrix类#include fvm.H fvm类#include linear.H#include calculatedFvPatchFields.H#include fixedValueFvPatchFields.H#include adjustPhi.H#include findRefCel

23、l.H#include mathematicalConstants.H#include OSspecific.H#include argList.H#ifndef namespaceFoam#define namespaceFoam using namespace Foam;#endif#endif再看看icoFoam的程序体,了解一下(yxi)求解程序的结构#include fvCFD.H (头文件) 通常位于(wiy)main函数前,是程序所需的类的定义/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

24、 * * * /int main(int argc, char *argv) (包含(bohn)文件)# include setRootCase.H # include createTime.H# include createMesh.H包含文件通常(tngchng)是程序片断,如创建时间、创建网格等(求解(qi ji)器代码)# include createFields.H 需要根据应用,单独写的代码(di m),如createFields.H和Main,以及Ueqn,pEqn等 # include initContinuityErrs.H / * * * * * * * * * * * *

25、 * * * * * * * * * * * * * * * * * * * * * * * * * /。八.OpenFOAM程序开发求解(qi ji)器的详细分析2a.场变量(binling)的定义引用(ynyng)前面的温度场 Info Reading field Tn endl; volScalarField T ( IOobject ( T, runTime.timeName(), mesh, IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );例如(lr)volScalarField CO2(IOobject(CO2,runTime.t

26、imeName(),mesh,IOobject:READ_IF_PRESENT,IOobject:AUTO_WRITE),mesh,/ Optional declaration, this can be done by accessing a file in case/0/,量纲(lin n)可在文件中读/ dimensionedScalar(zero, dimensionSet(1,-1,-3,0,0,0,0), value);b.场变量(binling)的使用场变量有定义(dngy)在内部cell上的值,也有边界上的值例如(lr)给组分限值Example of a mass fractio

27、n limiter used in this project:/ Initialize the variable Y_i for use in a loopscalarField& CO2Internal = CO2.internalField(); 引用内部点/ Loop for all mesh points 遍历内部点forAll(CO2, celli)/ Limits the mass fraction to a positive numberif (CO2Internalcelli 1.0)CO2Internalcelli = 1.0;c.定义(dngy)输运方程OpenFOAM 定

28、义方程(fngchng)时要选择一种类型的fvMatrix,有fvScalarMatrix和fvVectorMatrix离散(lsn)格式在case/system/fvSchemes.中设定/ Define a ScalarMatrix as a objectfvScalarMatrix CO2Eqn 定义(dngy)系数矩阵(fvm:div(phi, CO2) 对流项离散fvm:div- fvm:laplacian(turbulence-nuEff(),CO2) 扩散项离散fvm:div= S_CO2 源项);/ Apply underrelaxation to the equation/

29、Under relaxation factors defined in file: fvSolutionCO2Eqn.relax(); 松弛(sn ch)CO2Eqn.solve(); 求解(qi ji)内容摘要(1)OpenFOAM的程序开发初步一.OpenFOAM应用的类型:使用OpenFOAM进行CAE模拟的,大致可分为三种类型:1)直接利用OpenFOAM的标准的求解器进行模拟,把OpenFOAM替代商业软件来使用,OpenFOAM已基本具有这样的功能和人气,与Fuent,Star-CD等相比较,OpenFOAM显然具有更高的求解效率和灵活性(2)c)T将自动写入(IOobject:AU

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1