OpenFOAM常用类的一些总结

2019-03-27 20:31

OpenFOAM常用类的一些总结

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

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

比field类高一点的就是几何场类 GeometricField class,其相比field class多了纪录场位置的相关信息。说到这里请大家注意他和polyMesh class的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class中对应有pointMesh,surfaceMesh,volMesh等类,从字面上很容易理解其处理和记录网格点、网格面、网格体等信息。而GeometricField类,其则是记录了在什么样的网格上有量a的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundaryField class)、网格、尺度单位、计算的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM网上说明):volScalarField体标量场,volVectorField体向量场,volTensorField体张量场。这里说的场与field有所不同,这里指的是网格区域上所对应的数据信息。上述的vol就是指ployMesh中的volMesh,如volscalarField类来说:见下例 volScalarField p (

IOobject ( \

runTime.timeName(), mesh,

IOobject::MUST_READ, IOobject::AUTO_WRITE ), mesh );

看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压力值存储到网格体中心。为加深对GeometricField类的理解,贴张PG中的图片:

OpenFOAM中有许多类,每个类的功能都很强大,这也使它面向对象设计得以实现。

对于程序,最常用到的,也是最底层的就是数据,在OpenFOAM中引入了三类基础数据类型:标量scalar, 向量vector, 张量tensor.这三个中数据类型,也是FOAM中最基础的三个类。(还

有一个比较重要的就是bool和label,前者就是是非型,及对错型,只不过是更扩展一些,后者是标签型数据,相当于c中的整型。关于更多的其它数据类型可以参看目录..\\src\\OpenFOAM\\primitives里面)

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

比field类高一点的就是几何场类 GeometricField class,其相比field class多了纪录场位置的相关信息。说到这里请大家注意他和polyMesh class的区别,后者只是纪录网格的结构,如点的位置、面的组成、体的组成等等,polyMesh class中对应有pointMesh,surfaceMesh,volMesh等类,从字面上很容易理解其处理和记录网格点、网格面、网格体等信息。而GeometricField类,其则是记录了在什么样的网格上有量a的相关信息或数据。它包括了内部区域、边界区域(GeometricBoundaryField class)、网格、尺度单位、计算的先前时间阶的值等。在该类中有常用的三种(实际上还有其他的许多,可以参看OpenFOAM网上说明):volScalarField体标量场,volVectorField体向量场,volTensorField体张量场。这里说的场与field有所不同,这里指的是网格区域上所对应的数据信息。上述的vol就是指ployMesh中的volMesh,如volscalarField类来说:见下例 volScalarField p (

IOobject ( \

runTime.timeName(), mesh,

IOobject::MUST_READ,

IOobject::AUTO_WRITE ), mesh );

看过老苏博客的朋友肯定都知道这是什么意思,这是读入标量压力场文件,把压力值存储到网格体中心。为加深对GeometricField类的理解,贴张PG中的图片:

除了体的向量标量张量场外,还有面标量场surfaceScalarField、面向量场surfaceVectorField、面张量场surfaceTensorField。看下面的例子: surfaceScalarField phi (

IOobject (

\

runTime.timeName(), mesh ),

fvc::interpolate(alpha)*phia + fvc::interpolate(beta)*phib

);这里的phi既是一个面向量场对象,他用来是纪录单元体面上流过的通量值。

除了常用到的标量向量张量的几何场外,还有一些特殊量的场:surfaceSymmTensor面对称张量几何场、体球面张量场等等。几何场里面还有一个比较重要的类就是GeometricBoundaryField,用来专门对边界进行处理的一个类。

如果说数据场类是处理数据的基础,那么时间类则是控制计算步进必不可少的一部分。Time class在进行瞬态计算,用它跟踪时间阶,并使时间按一定步长或者变步长累加,及输出计算参数,计算时间等。见下例:(相关说明见老苏博客:OpenFOAM>>solver>>incompressible>>icoFoam的说明)

Info<< \ for (runTime++; !runTime.end(); runTime++) {

Info<< \ //……

runTime.write();

Info<< \ << \ClockTime = \ << nl << endl;

谈到时间大家很容易想到的就是空间,time and space是cfd中非常重要的概念,在离散过程中时间和空间都需要进行离散(非稳态情况),与空间相关的类其实上面已经提到:ployMesh class,


OpenFOAM常用类的一些总结.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:11.4分式加减法(2)学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: