openfoam学习心得—基本类以及偶然发现的一个学习网站

openfoam虽然来自于C++,但完全可以将其当做一门新的语言来学习,其代码在运行过程中,与字典交互,调用库函数。
1.基本数据类型:
编译前的先验知识将决定lable和scalar到底对应C++中何种类型
word–字符与字符串
lable–整型–具体占位由compiler option:WM_LABEL_SIZE决定
scalar–float or double or long double–具体由compiler option:WM_PRECISION_OPTION决定
switch--true or flase,可从字典中读入,读入y、on等将会自动转化为true

2.tmp:
tmp< scalarField > =scalarField* 但是由tmp<>指定的指针,其一般是指向堆内存的指针,而且当此指针指向别处时,其还会自动释放之前的堆内存,详情看博客:
OpenFOAM瞬态对象模板类tmp的分析及其使用

**3.volScalarField:**包括内部场和边界场
此类称为几何场,有vol场、surface场以及point场,其比Field类多记录了几何信息,Field类可以理解为一系列冰冷的数字(包括内部场和边界场),其可以进行数学操作,polymesh是记录拓扑结构,真正在有限体积运算中参与运行的是fvmesh,Field与fvmesh结合起来就是此类。
以此类推fvPatchField是记录边界的一系列冰冷数字,GeometricBoundaryField则是将这堆冰冷的数字与几何联系起来。
其实质上是某个模板类的重命名:
typedef GeometricField volScalarField
此类型及其重要,其初始化一般是用IOobject对象+mesh(也可能是别的)+内部场初值
由边界条件来计算边界场fvPatchField的值,此外,如果是MUST_READ,则不能够指定初值。

4.IOobject—是个类旨在在目录下查找文件与文件建立链接
更像是一个流,其一般用来初始化GeometricField类以及IOdictionary类,MUST_READ是指GeometricField类以及IOdictionary类类对象必须从文件中读取数据来创建,NO_WRITE是说这两个对象不必写入文件中。
IOobject io
(
“fvOptions”, --文件名
mesh.time().constant(), --文件路径
mesh, --registry 我的理解是将field与mesh相匹配。
IOobject::MUST_READ, --必须读文件
IOobject::NO_WRITE --不写
);–类对象初始化
io.headerOk()–检测文件是否存在于当前路径bool
io.instance()–返回文件路径
io.name()–返回文件名
io.readOpt() = IOobject::MUST_READ_IF_MODIFIED–类的static成员,如果被修正了是否读源项

5.runTime
其为Time类对象,runTime.loop()方法与runTime.run()方法均为while循环控制,其中loop()方法中调用了run()方法,返回的是一个bool值。
run()方法返回的也是一个bool值,其根据当前时间的value()以及timeIndex判断当前时间是否out of range。
runtime对象还可以执行很多函数:如返回case路径,将当前时间步计算出来的场量写进文件中等,具体查阅源代码
run and loop

mesh.time().constant()以及runTime.timeName()都是文件所在路径,有何区别?
runTime.timeName()是将当前时间值scalar类型转化为word类型,并且舍去三位之后的小数。
runTime.constant()实例路径,给出字典的位置,在本例中存在于算例的constant路径下

6.IOdictionary—是个类
IOdictionary(io)–以io为参数创建对象,从与io相链接的文件中读取或者写入内容,io规定是否能读能写,文件修正了是否读取等权限其间接继承于 IOobject类
还有一个类是dictionary类,这个是用来读取自定义字典里面的内容的,与IOdictionary类功能类似,而IOdictionary多是用来读取默认字典的–个人理解!
dict.subDict(“options”)–返回options对应的子字典
dict.found(“options”)–从字典中寻找关键字

7.fvMesh—是个类
polymesh的延伸为fvmesh,值得一提的是,time类与polymesh均继承于objestRegisty,下面这段话解释的很好

Thus, the mesh(es) are registered with the object registry runTime, whereas fields are registered with the appropriate mesh.
An OpenFOAM solver has a number of object registries in use, the most prominent are the runTime and the mesh objects. For fields it is important to know that they belong to a mesh, since the entity field is a mere list of values. Only the connection to the mesh gives the field an actual meaning, i.e. the entry at position i in the list is the cell centre value of cell i. Furthermore, the field also needs a connection to the actual time state of the simulation, otherwise there would be no meaningful way to define or calculate a temporal derivative

8.fvMatrix< Type >
隐式离散的系数矩阵A便是fvMatrix< Type >类对象,其继承于IduMatrix,方程离散后LHS还有b,b是GeometricField类对象,有了A和b,方程就可以迭代求解了

学习网站:
http://blog.pfan.cn/bioexplore/list/7144

你可能感兴趣的:(笔记)