openfoam常用类的一些总结

上传人:mg****85 文档编号:34187068 上传时间:2018-02-21 格式:DOC 页数:43 大小:525KB
返回 下载 相关 举报
openfoam常用类的一些总结_第1页
第1页 / 共43页
openfoam常用类的一些总结_第2页
第2页 / 共43页
openfoam常用类的一些总结_第3页
第3页 / 共43页
openfoam常用类的一些总结_第4页
第4页 / 共43页
openfoam常用类的一些总结_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《openfoam常用类的一些总结》由会员分享,可在线阅读,更多相关《openfoam常用类的一些总结(43页珍藏版)》请在金锄头文库上搜索。

1、OpenFOAM 常用类的一些总结OpenFOAM 中有许多类,每个类的功能都很强大,这也使它面向对象设计得以实现。对于程序,最常用到的,也是最底层的就是数据,在 OpenFOAM 中引入了三类基础数据类型:标量 scalar, 向量 vector, 张量 tensor.这三个中数据类型,也是 FOAM 中最基础的三个类。(还有一个比较重要的就是 bool 和 label,前者就是是非型,及对错型,只不过是更扩展一些,后者是标签型数据,相当于 c 中的整型。关于更多的其它数据类型可以参看目录.srcOpenFOAMprimitives 里面)在上述数据类的基础上,增加场(field)的概念,就

2、引入了标量场 scalarField, 向量场vectorField, 张量场 tensorField。 实际上这三个类又是 field 类的 typedef,如 typedef field saclarField。这些场类中都有对应的成员函数进行加减乘除运算,还有复杂的点积叉积等。说到这 field class,其实他就像是一个数据存放的区域一样,存放上 scalar,那它成了标量场 scalarField。这些类中可以有接口实现数据的计算。从 field 类中又派生出了 FieldField类,这个就是说场中场类,其实这个主要用于边界条件类的一个基类。因为边界条件算是网格类场中的一个特殊的

3、场,后面会介绍。比 field 类高一点的就是几何场类 GeometricField class,其相比 field class 多了纪录场位置的相关信息。说到这里请大家注意他和 polyMesh class 的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class 中对应有pointMesh,surfaceMesh, volMesh 等类,从字面上很容易理解其处理和记录网格点、网格面、网格体等信息。而 GeometricField 类,其则是记录了在什么样的网格上有量 a 的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundary

4、Field class)、网格、尺度单位、计算的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM 网上说明):volScalarField 体标量场, volVectorField 体向量场,volTensorField 体张量场。这里说的场与 field 有所不同,这里指的是网格区域上所对应的数据信息。上述的 vol就是指 ployMesh 中的 volMesh,如 volscalarField 类来说:见下例volScalarField p(IOobject(p, runTime.timeName(),mesh,IOobject:MUST_READ,I

5、Oobject:AUTO_WRITE),mesh);看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压力值存储到网格体中心。为加深对 GeometricField 类的理解,贴张 PG 中的图片:OpenFOAM 中有许多类,每个类的功能都很强大,这也使它面向对象设计得以实现。对于程序,最常用到的,也是最底层的就是数据,在 OpenFOAM 中引入了三类基础数据类型:标量 scalar, 向量 vector, 张量 tensor.这三个中数据类型,也是 FOAM 中最基础的三个类。(还有一个比较重要的就是 bool 和 label,前者就是是非型,及对错型,只不过是更扩展一

6、些,后者是标签型数据,相当于 c 中的整型。关于更多的其它数据类型可以参看目录.srcOpenFOAMprimitives 里面)在上述数据类的基础上,增加场(field)的概念,就引入了标量场 scalarField, 向量场vectorField, 张量场 tensorField.实际上这三个类又是 field 类的 typedef,如 typedef field saclarField。这些场类中都有对应的成员函数进行加减乘除运算,还有复杂的点积叉积等。说到这 field class,其实他就像是一个数据存放的区域一样,存放上scalar,那它成了标量场 scalarField。这些类中

7、可以有接口实现数据的计算。从 field 类中又派生出了 FieldField 类,这个就是说场中场类,其实这个主要用于边界条件类的一个基类。因为边界条件算是网格类场中的一个特殊的场,后面会介绍。比 field 类高一点的就是几何场类 GeometricField class,其相比 field class 多了纪录场位置的相关信息。说到这里请大家注意他和 polyMesh class 的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class 中对应有pointMesh,surfaceMesh,volMesh 等类,从字面上很容易理解其处理和记录网格点、

8、网格面、网格体等信息。而 GeometricField 类,其则是记录了在什么样的网格上有量 a 的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundaryField class)、网格、尺度单位、计算的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM 网上说明):volScalarField 体标量场,volVectorField 体向量场,volTensorField体张量场。这里说的场与 field 有所不同,这里指的是网格区域上所对应的数据信息。上述的vol 就是指 ployMesh 中的 volMesh,如 volscala

9、rField 类来说:见下例volScalarField p(IOobject(p,runTime.timeName(),mesh,IOobject:MUST_READ, IOobject:AUTO_WRITE),mesh);看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压力值存储到网格体中心。为加深对 GeometricField 类的理解,贴张 PG 中的图片:除了体的向量标量张量场外,还有面标量场 surfaceScalarField、面向量场surfaceVectorField、面张量场 surfaceTensorField。看下面的例子:surfaceScala

10、rField phi(IOobject( phi,runTime.timeName(),mesh),fvc:interpolate(alpha)*phia+ fvc:interpolate(beta)*phib);这里的 phi 既是一个面向量场对象,他用来是纪录单元体面上流过的通量值。除了常用到的标量向量张量的几何场外,还有一些特殊量的场:surfaceSymmTensor 面对称张量几何场、体球面张量场等等。几何场里面还有一个比较重要的类就是GeometricBoundaryField,用来专门对边界进行处理的一个类。如果说数据场类是处理数据的基础,那么时间类则是控制计算步进必不可少的一部

11、分。Time class 在进行瞬态计算,用它跟踪时间阶,并使时间按一定步长或者变步长累加,及输出计算参数,计算时间等。见下例:(相关说明见老苏博客:OpenFOAMsolverincompressibleicoFoam 的说明)Info fvVectorMatrix,其他的还有标量、张量等。其他关于上述程序的说明参看老苏博客。再看如下例子:fvMatrixScalar rhoEq( fvm:ddt(rho)+fvc:div(phi);/此处是一个关于质量守恒方程的求解,对于 phi 为密度与速度的积,而此时采用 fvc 即表示速度通量在方程中作为已知量,出现在方程的 b 项中,它是计算前一时

12、间阶的值。说了一些常用的类,下面介绍一些比较基础底层的类:IOdictionary,argList,IOobject,IOdictionary 类是继承于 regIOobject 类和 dictionary 类,其主要作于是读入和写入数据。如读取 PISO 控制参数,或读入 transportProperties 参数等等。它派生出许多类:1. basicThermo(用于基本热力学参数读取和计算)2. LESModel(大涡模拟模型控制参数)3. RASModel (RAS 模型控制参数)4. fvSchemes (离散格式参数)5. motionSolver (动网格控制参数)6. rad

13、iationModel (辐射模型控制参数)7. solution (求解方程控制参数)8. SRFModel (SRF 模型控制参数)9. tolerances (方程残差控制)10. transportModel (输运模型参数)见下例:IOdictionary transportProperties /在 transportProperties 字典中读入参数( IOobject(transportProperties,runTime.constant(),mesh,IOobject:MUST_READ,IOobject:NO_WRITE);IOobject 类:读入写入数据,他与 IO

14、dictionary 不同之处在于后者是读取一个文件中的一个字典“”之内的数据,而 IOobject 则是读入整个文件,如读入压力场,速度场等,并且有读入写出的控制参数,见上例中的“MUST_READ,NO_WRITE”等等。(老苏博客中有详细介绍,在此不多说了)argList 类:读入外部命令参数的一个类,如在命令窗口键入 icoFoam -case ,则对目录 dir 执行 icoFoam 计算,其参数有:-case 选择一个 case 目录替代当前工作目录;-parallel 指定并行计算参数; -doc 显式该程序文档; -srDoc 在浏览器里显示该程序的源文件; -help 显示改

15、程序的使用方法dimensionSet 类是对基本类型的单位设定,并检查其正确性。tmp 类是管理临时对象的一个类。OpenFOAM 的程序开发初步一.OpenFOAM 应用的类型:使用 OpenFOAM 进行 CAE 模拟的,大致可分为三种类型:1)直接利用 OpenFOAM 的标准的求解器进行模拟,把 OpenFOAM 替代商业软件来使用,OpenFOAM 已基本具有这样的功能和人气,与 Fuent,Star-CD 等相比较,OpenFOAM 显然具有更高的求解效率和灵活性。2)用户自定义求解器,即利用 OpenFOAM 的基本类库,如 finiteVolume,OpenFOAM 库来按照

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号