




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OpenFOAM常用类的一些总结OpenFOAM中有许多类,每个类的功能都很强大,这也使它面向对象设计得以实现。 对于程序,最常用到的,也是最底层的就是数据,在OpenFOAM中引入了三类基础数据类型:标量scalar, 向量vector, 张量tensor.这三个中数据类型,也是FOAM中最基础的三个类。(还有一个比较重要的就是bool和label,前者就是是非型,及对错型,只不过是更扩展一些,后者是标签型数据,相当于c中的整型。关于更多的其它数据类型可以参看目录.srcOpenFOAMprimitives里面) 在上述数据类的基础上,增加场(field)的概念,就引入了
2、标量场scalarField, 向量场vectorField, 张量场tensorField。 实际上这三个类又是field类的typedef,如typedef field<scalar> saclarField。这些场类中都有对应的成员函数进行加减乘除运算,还有复杂的点积叉积等。说到这field class,其实他就像是一个数据存放的区域一样,存放上scalar,那它成了标量场scalarField。这些类中可以有接口实现数据的计算。从field类中又派生出了FieldField类,这个就是说场中场类,其实这个主要用于边界条件类的一个基类。因为边界条件算是网格类场中的一个特殊的场
3、,后面会介绍。 比field类高一点的就是几何场类 GeometricField class,其相比field class多了纪录场位置的相关信息。说到这里请大家注意他和polyMesh class的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class中对应有pointMesh,surfaceMesh,volMesh等类,从字面上很容易理解其处理和记录网格点、网格面、网格体等信息。而GeometricField类,其则是记录了在什么样的网格上有量a的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundaryField cl
4、ass)、网格、尺度单位、计算的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM网上说明):volScalarField体标量场,volVectorField体向量场,volTensorField体张量场。这里说的场与field有所不同,这里指的是网格区域上所对应的数据信息。上述的vol就是指ployMesh中的volMesh,如volscalarField类来说:见下例volScalarField p( IOobject (
5、 "p", runTime.timeName(), mesh, &
6、#160; IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压力值存储到网格体中心。为加深对GeometricField类的理解,贴张PG中的图
7、片:OpenFOAM中有许多类,每个类的功能都很强大,这也使它面向对象设计得以实现。 对于程序,最常用到的,也是最底层的就是数据,在OpenFOAM中引入了三类基础数据类型:标量scalar, 向量vector, 张量tensor.这三个中数据类型,也是FOAM中最基础的三个类。(还有一个比较重要的就是bool和label,前者就是是非型,及对错型,只不过是更扩展一些,后者是标签型数据,相当于c中的整型。关于更多的其它数据类型可以参看目录.srcOpenFOAMprimitives里面) 在上述数据类的基础上,增加场(field)的概念,就引入了标量场scalarField
8、, 向量场vectorField, 张量场tensorField.实际上这三个类又是field类的typedef,如typedef field<scalar> saclarField。这些场类中都有对应的成员函数进行加减乘除运算,还有复杂的点积叉积等。说到这field class,其实他就像是一个数据存放的区域一样,存放上scalar,那它成了标量场scalarField。这些类中可以有接口实现数据的计算。从field类中又派生出了FieldField类,这个就是说场中场类,其实这个主要用于边界条件类的一个基类。因为边界条件算是网格类场中的一个特殊的场,后面会介绍。 比f
9、ield类高一点的就是几何场类 GeometricField class,其相比field class多了纪录场位置的相关信息。说到这里请大家注意他和polyMesh class的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class中对应有pointMesh,surfaceMesh,volMesh等类,从字面上很容易理解其处理和记录网格点、网格面、网格体等信息。而GeometricField类,其则是记录了在什么样的网格上有量a的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundaryField class)、网格、尺度单位、计算
10、的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM网上说明):volScalarField体标量场,volVectorField体向量场,volTensorField体张量场。这里说的场与field有所不同,这里指的是网格区域上所对应的数据信息。上述的vol就是指ployMesh中的volMesh,如volscalarField类来说:见下例 volScalarField p ( IOobject
11、60; ( "p", runTime.timeName(), mesh,
12、160; IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压
13、力值存储到网格体中心。为加深对GeometricField类的理解,贴张PG中的图片: 除了体的向量标量张量场外,还有面标量场surfaceScalarField、面向量场surfaceVectorField、面张量场surfaceTensorField。看下面的例子: surfaceScalarField phi ( IOobject (
14、0; "phi", runTime.timeName(), mesh ), &
15、#160; fvc:interpolate(alpha)*phia + fvc:interpolate(beta)*phib );这里的phi既是一个面向量场对象,他用来是纪录单元体面上流过的通量值。除了常用到的标量向量张量的几何场外,还有一些特殊量的场:surfaceSymmTensor面对称张量几何场、体球面张量场等等。几何场里面还有一个比较重要的类就是GeometricBoundaryField,用来专门对边界进行处理的一个类。 如果说数据场类是处
16、理数据的基础,那么时间类则是控制计算步进必不可少的一部分。Time class在进行瞬态计算,用它跟踪时间阶,并使时间按一定步长或者变步长累加,及输出计算参数,计算时间等。见下例:(相关说明见老苏博客:OpenFOAM>>solver>>incompressible>>icoFoam的说明) Info<< "nStarting time loopn" << endl; for (runTime+; !runTime.end(); runTime
17、+) Info<< "Time = " << runTime.timeName() << nl << endl; / runTime.write();
18、; Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s"
19、160; << nl << endl; 谈到时间大家很容易想到的就是空间,time and space是cfd中非常重要的概念,在离散过程中时间和空间都需要进行离散(非稳态情况),与空间相关的类其实上面已经提到:ployMesh class,在这不在累述。需要附加说明的是边界条件类:边界条件在OpenFOAM被定义作为场的一个完整部分而不是场上额外附加的。在fvMatrix类中并入了patch用来定义区域的外部边界。每一个patch有一个边界条件,再由fvm用合适的方式进行操作处理。patch有多种类
20、型:calculated,fixed value, fixed gradient, zero gradient, symmetry, cyclic等。这些类型都继承于基类patchField。 在求解之前,需要对偏微分方程组进行离散,转化为线性方程组Ax=b的形式。其中x就是我们所要求的量,他也就是咱们前面介绍的GeometricField类,而A代数方程的系数,他就是我们下面所要提到的fvMatrix类。对于偏微分方程的每一项,OpenFOAM应用两个类来离散:finiteVolumeMethod和finiteVolumeCalculus,分别用typedef声明为fvm和fvc.
21、 fvm是计算隐式导数从而返回fvMatrix,而fvc是计算显式导数或者其它隐式计算返回geometricField,该类不存储私有数据,仅是执行操作从一个量map到另外一个量上。对于偏微分方程,其中有很多种导数形式:拉普拉斯、时间导数、二阶时间导数、对流项、散度、梯度、梯度梯度平方、旋度、源等,在OpenFOAM中的表示见下图:离散化时空之后,就是解方程,其实求解方程的过程主要分成如下几部:1.离散偏微分方程,2.线性化方程组,3.对应不同的倒数格式选择差分格式,4.求解系数矩阵,5.解方程。在这就涉及到了一个重要的部分:矩阵。Matrix是OpenFOAM中的一个模板类,他是一个用来存储
22、及运算标量张量等类型数据的2维矩阵。这个矩阵类有点像数学上的矩阵一样。对于应用于数值求解矩阵,OpenFOAM引入了fvMatrix类,这个就是有限体积(finite volume)矩阵类,他是一个特殊的矩阵类型,应用于求解有限体积标量方程组,该类成员函数可以实现给定相应场的求解、通量的计算、残差的计算和控制、方程松弛因子的实现,方程中心系数(central coefficient, 公共成员函数A()和H操作源(H operation source,成员函数H())的计算、设定计算参考等。在此需要提到的是fvMesh类,该类和GoeMesh类差不多,不同之处在于fvMesh类它包含相应网格信
23、息和拓扑结构的同时,还对网格进行实时更新(动网格的时候)。这些更新包括删除单元体面等,并按要求重新定位并计算新的信息。下面举一些关于fvMatrix应用的例子:(选自icoFoam) fvVectorMatrix UEqn ( fvm:ddt(U)
24、160; + fvm:div(phi, U) /div,散度是代表某量通过单元体的面积分,此处phi为一个通量场,该场的值被记录在单元体的面上,而U就是由通量所输运的量,而该速度值则被记录在单元体中心点上。 - fvm:laplacian(nu, U) );/源项可以使显式的,在离散时进入方程的右端,当源项为隐式的时候他进入方程的系数矩
25、阵中。 solve(UEqn = -fvc:grad(p);/关于=,一直有所疑问,听老苏分析挺有道理,最近你看到一篇文章上说=的定义是用来表示数学意义上的方程左右两端的等于,这个运算符为了使其有最低的的运算优先级所以采用了=,而非=,同时也强调了方程两端得等的概念,而非赋值。在OpenFOAM中,对=的操作实际上是形式上的,而非实质上有什么运算,它自动重排方程各项:所有隐式项写进方程矩阵中,而所有显式项则归于方程的b中。
26、60;volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); pEqn.setReference(pRefCell, pRefValue); pEqn.solve();例子中fvVectorMatrix为一向量有限体积矩阵类,OpenFOAM中定义 typedef f
27、vMatrix<Vector> fvVectorMatrix,其他的还有标量、张量等。其他关于上述程序的说明参看老苏博客。 再看如下例子:fvMatrixScalar rhoEq( fvm:ddt(rho)+fvc:div(phi);/此处是一个关于质量守恒方程的求解,对于phi为密度与速度的积,而此时采用fvc即表示速度通量在方程中作为已知量,出现在方程的b项中,它是计算前一时间阶的值。 说了一些常用的类,下面介绍一些比较基础底层的类:IOdictionary,argList,IOobject,IOdictionary类是继承于regI
28、Oobject类和dictionary类,其主要作于是读入和写入数据。如读取PISO控制参数,或读入transportProperties参数等等。它派生出许多类: 1. basicThermo(用于基本热力学参数读取和计算) 2. LESModel(大涡模拟模型控制参数) 3. RASModel (RAS模型控制参数)
29、0; 4. fvSchemes (离散格式参数) 5. motionSolver (动网格控制参数) 6. radiationModel (辐射模型控制参数) 7. solution (求解方程控制参数)
30、 8. SRFModel (SRF模型控制参数) 9. tolerances (方程残差控制) 10. transportModel (输运模型参数)见下例: IOdictionary transportProperties /在transportProperties字典中读入参数 (
31、; IOobject ( "transportProperties", runTime.constant(), &
32、#160; mesh, IOobject:MUST_READ, IOobject:NO_WRITE ) );IOobject类:读入写入数据,他与IOdictionary不同之处在于后者是读取
33、一个文件中的一个字典“”之内的数据,而IOobject则是读入整个文件,如读入压力场,速度场等,并且有读入写出的控制参数,见上例中的“MUST_READ,NO_WRITE”等等。(老苏博客中有详细介绍,在此不多说了) argList类:读入外部命令参数的一个类,如在命令窗口键入icoFoam -case <dir>,则对目录dir执行icoFoam计算,其参数有:-case 选择一个case目录替代当前工作目录;-parallel 指定并行计算参数; -doc显式该程序文档; -srDoc 在浏览器里显示该程序的源文件; -help 显示改程
34、序的使用方法 dimensionSet类是对基本类型的单位设定,并检查其正确性。 tmp类是管理临时对象的一个类。OpenFOAM的程序开发初步一.OpenFOAM应用的类型:使用OpenFOAM进行CAE模拟的,大致可分为三种类型:1)直接利用OpenFOAM的标准的求解器进行模拟,把OpenFOAM替代商业软件来使用,OpenFOAM已基本具有这样的功能和人气,与Fuent,Star-CD等相比较,OpenFOAM显然具有更高的求解效率和灵活性。2)用户自定义求解器,即利用OpenFOAM的基本类库,如finiteVolume,OpenFOAM库来按照自己的求解流程来编
35、写针对某类应用的求解器。用户需要开发的求解器就是类似于在OpenFOAM的applications中所看到的标准求解器icoFOAM,simpleFOAM等。显然这一需求是非常大的,从OpenFOAM问世以来,已有很多用户定义了自己的求解器。这类需求的特点是,并不需要特别关心,离散和求解的最底层的知识,如时间项离散,空间项离散等,关注的重点是求解的步骤或者流程。在编程中,通常是顶层的求解流程的开发,在多数情况下可以不编译OpenFOAM的finiteVolume和OpenFOAM库。这种顶层的求解器的开发,是我们以前常常忽略的,或者是以前没有能力做到的。需要指出的是,商业软件中的所谓udf,u
36、ser subroutine和这是不可相比的。3)用户自己定义离散方法等。对于研究离散格式、代数求解器等人来说,更关注时间项ddt,扩散项Laplacian,对流项div是如何离散的,能否有更高效更高精度的离散方法,这需要修改finiteVolume库和OpenFOAM库中对应的代码。尤其是对流项,尽管OpenFOAM已经提供了基于NVD和TVD的模板和40多种有名的高阶高精度格式,但可以预见,这仍然是不够的,毕竟对流项的离散仍然是目前CFD的重点研究方向。可以肯定的是,目前有很多人关注类型2的应用,毕竟将OpenFOAM当成Fluent或Star-CCM来使用,并不见得方便。但是将OpenF
37、OAM作为类库来构建自己的求解器,这是其它软件无法实现的。二OpenFOAM程序开发的基本知识2.1OpenFOAM的基本术语重要的环境变量:$WM_PROJECT_USER_DIR OpenFOAM的用户目录$FOAM_TUTORIALS -OpenFOAM的算例目录$ FOAM _SRC -OpenFOAM库的源程序目录$ FOAM_APP
38、160; - OpenFOAM的求解器目录$ FOAM_APPBIN - OpenFOAM的求解器执行文件目录$ FOAM_RUN -用户的算例目录重要的shell:run cd to $FOAM_RUNsrc = cd to $FOAM_SRCapp =
39、60;cd to $FOAM_APPutil = cd to $FOAM_APP/utilitiessol = cd to $FOAM_APP/solverstut = cd to $FOAM_TUTORIALS求解器的基本文件结构appName 包含求解器源代码的目录+appName.C 求解器主程序 CreateFields.H
40、160;场变量的声明和初始化 +Make/ 编译指令+files 编译需要的源程序文件和生成的目标文件+options 编译选项,如链接库等appName/appName.C是求解器的主程序appName/createFields.H声明变量,并从文件中读入初值,如p,物性。appName/Make/files 所有源程序的名称,一个文件一行,最后一行是目标代码的名称和存放位置,EXE=$(FOAM_USER_APPBIN)
41、/appNameappName/Make/options设定查找头文件和库的路径,EXE_INCS,和需要链接的库EXE_LIBS算例的基本文件结构case/ 算例目录+0/ 包含初始和边界条件+constant/
42、; 包含初次读入后,不随时间变化的数据+polyMesh/ 包含多面体网格数据+transportProperties/ 包含物性数据 +system/ 包含计算控制和离散格式设定+controlDict
43、 包含计算控制,如时间步长等+fvSchemes 包含离散格式设定+fvSolutions 包含代数求解器或SIMPLE,PISO算法设定具体而言case/0 每个需求解的变量需要一个文件设定其初始边界条件case/constant/polyMesh
44、0; 网格数据,如owner neighbour points faces boundarycase/system/transportProperties 物性数据case/system/controlDict 设定起始终止时间,时间步长,输出控制case/system/fvSchemes 设定程序用到的每个微分算子的离散格式case/system/fvSolution 为每个变量选择代数方程求解
45、器/收敛精度及PISO等算法设定三OpenFOAM程序开发的理论知识作求解开发,必须能写出需要求解的控制方程及其定解条件,并且对于如何求解方程或方程组的步骤已经明确。这些流体力学、传热学以及相关的理论是必需的,所谓连续介质力学中的数学模型,控制方程和定解条件就是表示它的语言。在这里是不可能说清楚的,这要看个人的功底了。四 .OpenFOAM程序开发的最简单的例子下面采用OpenFOAM来开发一个用户自己的求解器。主要是利用OpenFOAM的标准求解器icoFoam,用户不需要写任何代码,只为为了熟悉OpenFOAM程序开发的环境和步骤。步骤:1) 将icoFoam目录
46、拷贝到新的目录可采用下面的Linux的命令实现:到OpenFOAM的incompressible目录cd applications/incompressiblecp r icoFoam myicoFoam以上只是复制目录icoFoam到新的位置,并且新目录名为myicoFoamcd myicoFoam进入新的目录,查看一下,可以看到里面的文件和icoFoam中是否一样2) 原文件改名,并且删除依赖文件将icoFoam.C改名myicoFoam.Cmv icoFoam.C myicoFoam.C删除依赖文件rm icoFoam.dep3) 修改
47、编译文件files和options进入Make目录,打开files文件, 将icoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/icoFoam 可执行文件名修改为myicoFoam.C 源程序文件名EXE = $(FOAM_APPBIN)/myicoFoam 可执行文件名此例中options不需修改,可以打开看看EXE_INC = 头文件包含 -I$(LIB_SRC)/finiteVolume/lnInclud
48、eEXE_LIBS = 链接库-lfiniteVolume4)删除原来的obj文件 rm rf linuxGccDPOptcd .5)编译 wmake6) 检验一下 到tutorial目录,检验一下 myicoFoam . cavity六.OpenFOAM程序开发例子一:在icoFoam中加入温度场求解准备:能量控制方程: dT/dt+div(den*U*T)=div(a gradT)在壁面上给定值条件。需要解决的问题:a)如何创建标量场,Tb) 如何创建物性,ac)如何定义温度方程,并求解d) 如何在算例中设定T和a
49、e)如何设定T的离散格式f)如何设定T的求解器的收敛标准等步骤:1)创建程序需要的新物性和新变量场打开myicoFoam.C可以看到,程序开始运行时调用CreateFields.H,创建变量场。打开CreateFields.H,可以看到程序首先从transportProperties文件中读入物性, Info<< "Reading transportPropertiesn" << endl; IOdictionary transportProperties (
50、60; IOobject ( "transportProperties", 从字典文件transportProperties读入runTime.constant(), /transportProperties文件位于目录runTime.constant()中
51、 mesh, 网格对象 IOobject:MUST_READ, IOobject:NO_WRITE ); 创建了Iodictionary类型对象 trans
52、portProperties dimensionedScalar nu /首先读入粘性系数 ( transportProperties.lookup("nu") ); 创建有量纲标量nu,nu通过从字典transportProperties查找”nu”来赋值可以加上新方程需要的物性 dimensionedScalar DT
53、 /首先读入热扩散率 ( transportProperties.lookup("DT") ); 创建有量纲标量DT,DT通过从字典transportProperties查找”DT”来赋值此外还要从createFields中读入p,U场,我们要加入的新的变量场为温度场T,最快的加入温度场的方法是拷贝p场的代码,修改为 Info<< "Reading field Tn" << endl;
54、 volScalarField T ( IOobject ( "T", runTime.timeName(), mesh,
55、0;IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );这样,创建了新的vol标量场T,从文件T中读入。对于T的创建具体解释如下:a)创建了标量场Tb)T通过读(IOobject:MUST_READ)在runTime.timeName()目录下名称为“T”的文件创建,在开始计算时,runTime.timeName()是contorlDict中
56、设定的startTime值决定的。c)T将自动写入(IOobject:AUTO_WRITE)计算结果到runTime.timeName()目录中,runTime.timeName()随迭代是变化的,写入控制由contorlDict中设定。d)T是定义在mesh对象上的,这意味着T在内部cell上有值internalField,在边界上还需要边界条件,这与polyMesh/boundary中要一致。2)在求解器中加入新的求解方程 下一步回到myicoFoam.C加入新的微分方程,由于温度场依赖于速度场,可放在PISO循环后面。#
57、 include "continuityErrs.H" U -= rUA*fvc:grad(p); U.correctBoundaryConditions(); / Add the temperature equation
58、; fvScalarMatrix Teqn 温度是标量方程 ( fvm:ddt(T) + fvm:div(phi, T) 要用到界面流量 - f
59、vm:laplacian(DT, T) 扩散项 ); TEqn.solve(); 求解3)编译wmake4)在算例中加入新方程的初始和边界条件4.1拷贝一个cavity算例到mycavity4.2修改transportProperties字典文件,设定DTcd constant修改transportProperties文件,前面已提到DT要从该字典文件读入。
60、设定DT=0.002m2/sDT DT 0 2 -1 0 0 0 0 0.002;4.3修改T文件,设定初始值和边界cd 0 进入0目录拷贝一个T文件cp p T修改T文件为FoamFile version 2.0; format ascii; class
61、; volScalarField; object T;/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /dimensions 0 0 0 1 0 0 0;internalField uniform 300; 初始内部点为300 movingWall
62、 type fixedValue;value uniform 350.; 边界为350 fixedWalls type fixedValue;value uniform 300.;
63、0; 边界为3005)修改离散格式和代数求解器求解控制文件A进入system目录由于温度方程有非稳态项,对流项,扩散项,分别要在ddt,div,laplacian中设置打开fvSchemes文件,添加divSchemes default none; div(phi,U) Gauss upwind; div(phi,T) Gauss upwind;laplacianSchemes&
64、#160; default none; laplacian(nu,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; laplacian(1|A(U),p) Gauss linear corrected;在fvSolution中设置代数求解器选项 T PBiCG
65、preconditioner DILU; tolerance 1e-06; relTol 0; 注意T方程形成的矩阵是非对称的,不要用PCG和DIC6)运行myicoFoam . mycavity七.OpenFOAM程序开发求解器的详细分析1进入icoFoam目录可以看到createFields.H icoFoam.C
66、160;icoFoam.dep Make/ Make/为wmake编译所需的文件IcoFoam.C为主程序文件,它包含createFields.H编辑icoFoam.C可以看到icoFoam.C首先引入的头文件为fvCFD.H。所以你可以看到,在编译选项options中EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude /fvCFD.H的存放目录EXE_LIBS = -lfiniteVolume
67、 /需要链接的库找到fvCFD.H,编辑,可以看出这些是主程序必须的类库#ifndef fvCFD_H#define fvCFD_H#include "parRun.H"#include "Time.H" 时间类#include "fvMesh.H" 网格类#include "fvc.H"
68、; fvc类#include "fvMatrices.H" fvMatrix类#include "fvm.H" fvm类#include "linear.H"#include "calculatedFvPatchFields.H"#include "
69、fixedValueFvPatchFields.H"#include "adjustPhi.H"#include "findRefCell.H"#include "mathematicalConstants.H"#include "OSspecific.H"#include "argList.H"#ifndef namespaceFoam#define namespaceFoam using namespace Foam;#endif#endif再看看icoFo
70、am的程序体,了解一下求解程序的结构#include "fvCFD.H" (头文件) 通常位于main函数前,是程序所需的类的定义/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /int main(int argc, char *argv)
71、160; (包含文件)# include "setRootCase.H" # include "createTime.H"# include "createMesh.H"包含文件通常是程序片断,如创建时间、创建网格等(求解器代码)# include "createFields.H"
72、; 需要根据应用,单独写的代码,如"createFields.H"和Main,以及Ueqn,pEqn等 # include "initContinuityErrs.H" / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
73、 /。八.OpenFOAM程序开发求解器的详细分析2a.场变量的定义引用前面的温度场 Info<< "Reading field Tn" << endl; volScalarField T ( IOobject ( "T",
74、 runTime.timeName(), mesh, IOobject:MUST_READ, IOobject:AUTO_WRITE ), mesh );例如volScalarField CO2(IOobje
75、ct("CO2",runTime.timeName(),mesh,IOobject:READ_IF_PRESENT,IOobject:AUTO_WRITE),mesh,/ Optional declaration, this can be done by accessing a file in "case/0/",量纲可在文件中读/ dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), value);b.场变量的使用场变量有定义在内部cell上的值,也有边界上的值例如给组分限
76、值Example of a mass fraction 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 < 0.0)
77、CO2Internalcelli = 0.0;/ Limits the mass fraction to max 1.0if (CO2Internalcelli > 1.0)CO2Internalcelli = 1.0;c.定义输运方程OpenFOAM 定义方程时要选择一种类型的fvMatrix,有fvScalarMatrix和fvVectorMatrix离散格式在case/system/fvSchemes.中设定/ Define a ScalarMatrix as a objectfvScalarMatrix CO2Eqn 定义系数矩阵(fvm:div(phi, CO2)
78、 对流项离散fvm:div- fvm:laplacian(turbulence->nuEff(),CO2) 扩散项离散fvm:div= S_CO2 源项 );/ Apply underrelaxation to the equation/ Under relaxation factors defined in file: fvSolutionCO2Eqn.relax(); 松弛CO2Eqn.solve(); 求解运用OpenFOAM编译器wmake编译自己的程序本文将OpenFoam的编译系统介绍一下,并给出了如何在OpenFOAM下编译“h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海建设管理职业技术学院《外汇交易模拟》2023-2024学年第二学期期末试卷
- 福州英华职业学院《园林建筑设计Ⅱ》2023-2024学年第二学期期末试卷
- 宁夏幼儿师范高等专科学校《副教学训练理论与实践(1)》2023-2024学年第二学期期末试卷
- 北京理工大学《建筑消防设备工程》2023-2024学年第二学期期末试卷
- 西安航空职业技术学院《自动控制原理B实验》2023-2024学年第二学期期末试卷
- 潍坊食品科技职业学院《德育原理》2023-2024学年第二学期期末试卷
- 广州涉外经济职业技术学院《意识形态前沿问题研究》2023-2024学年第二学期期末试卷
- 民办合肥财经职业学院《精神病护理学》2023-2024学年第二学期期末试卷
- 赣州师范高等专科学校《面向对象程序设计-JAVA语言》2023-2024学年第二学期期末试卷
- 天津外国语大学《原理与应用实训》2023-2024学年第二学期期末试卷
- 2024-2030年中国餐饮连锁行业发展状况及投资经营模式分析报告
- 中储粮安全生产培训
- 2024年江西省公务员录用考试《行测》试题及答案解析
- 2024年财会业务知识竞赛题库及答案(600题)
- DB11T 1470-2022 钢筋套筒灌浆连接技术规程
- 2024秋期国家开放大学专科《EXCEL在财务中的应用》一平台在线形考(形考作业一至四)试题及答案
- 现金日记账模板(出纳版)
- 临床常见操作-灌肠
- 探寻中国茶:一片树叶的传奇之旅学习通超星期末考试答案章节答案2024年
- 检验科降低检测报告超时率PDCA持续改进案例
- 冷却塔清洗合同模板
评论
0/150
提交评论