当前位置: 首页 > 工具软件 > OpenFOAM > 使用案例 >

openFOAM的基础类型汇总

卜方伟
2023-12-01

openFOAM代码非常非常多,但是让人比较郁闷的是很多是基础类的实现,openFOAM中很多基础的类,包括char,string,int等等,都添加功能封装在了Foam这个名字域中。

好处就是同样使用int,可以比在C++使用更多的功能,坏处就是一个很简单的功能,依赖的文件数量惊人。

把这么多的封装全部读完总结完可能头发都白了,但是只把常用的拿出来总结一下是可以的,这篇帖子就是做这个工作,当然这里是针对chemFoam这个求解器。这个帖子会在编写其他帖子的过程中持续更新

基础类的源码组织特点

通常为一个xxx.H文件,外加一个xxxI.H文件,一个xxx.C文件。可能会出现的xxxIO.C文件,以及通过List类创建的xxxList.H文件,以及他们的IO处理,xxxIOList.H,以及他们的List创建的xxxListIOList.H.C文件(大型套娃现场)。

但是总之都是一个基础类不断封装得到的,只要知道其中一个的套路就都明白了

xxxI.H文件通常为xxx.H文件中inline函数的具体实现
xxx.C文件通常为xxx.H文件中一般函数的具体实现
xxxIO.C文件是和IO相关的实现,例如>><<的重定义,以及readxxx这种函数的实现
xxxList.H其实是用List创建了新的类型,这里的List可以暂时理解成一个数组。例如:

typedef List<label> labelList; 
typedef List<labelList> labelListList; 
typedef List<labelListList> labelListListList;
(三重套娃现场)

xxxIOList.HxxxIOList.C中前者为新类型typedef IOList<xxx> xxxIOList;,而后者为通过一系列的宏实现一些基础的函数功能,这些宏的说明会在其他帖子中解释
xxxListIOList.H就是typedef IOList<xxxList> xxxListIOList;

规律还是很明显的,看名字就可以大概了解文件中的内容。

int相关的类

分unsigned和一般两种,前者的文件最前有一个u字母,源文件有:

int32.C  int32.H  int32IO.C
int64.C  int64.H  int64IO.C
int.H  intIO.H
label.H  label.C labelList.H  labelIOList.H  labelIOList.C labelListIOLit.H 
uint32.C  uint32.H  uint32IO.C
uint64.C  uint64.H  uint64IO.C
uint.H  uintIO.H
uLabel.H  uLabel.C 

其中继承关系为int32 int64->int->label,其中32和64分别代表32bit和64bit的整数。他们分别使用int32_tint64_t进行定义,并给定了和文件流相关的函数。

char相关的类

继承关系为char->string->word->wordRe fileName keyType。源文件有:

char.H charIO.C wchar.H wcharIO.c
string.H stringI.H string.C stringIO.C stringIOList.H stringIOList.C stringOps.H stringOps.C
word.H word.C  wordI.H wordIO.C wordIOList.H wordIOList.C
wordRe.H wordRe.C wordReI.H wordList.H wordReList.H wordReListMatcher.H wordReListMatcherI.H
keyType.H keyTypeI.H keyType.C
fileName.H fileNameI.H fileName.C fileNameIO.C fileNameList.H

char直接使用了C语言内置的char,但是添加了和文件流操作相关的运算符和函数,这些话函数均可以独立调用。而wchar则使用了更多字节的编码形式(A wide-character and a pointer to a wide-character string)

string则使用了std:stringFoam的名字空间进行封装,添加了内置的变量typeName debug null,以及一系列的功能性函数。

word keyType fileName在均为string的子类,他们在string的基础上添加了更多的功能,使得他们可以用在更加具体的情形中。

bool相关的类

bool中有一个很重要的拓展类是Switch,这里也写在这里,他们的源文件如下:

bool.H bool.C boolIO.C boolList.H boolList.C
Switch.H  Switch.C  SwitchIO.C

其中bool类型也使用了C语言内置的bool类型,但是对文件流相关的操作符和函数进行了定义,可以直接调用。

Switch的功能,在源文件中也有解释(A simple wrapper around bool so that it can be read as a word: true/false, on/off, yes/no, y/n, t/f, or none/any.),就是将bool类型写成rue/false, on/off, yes/no, y/n, t/f, or none/any的多个形式。另外其中添加了若干功能性函数和操作符重定向。

scalar相关的类

这里并没有定义新的类,而是使用了typedef,然后添加了一些新的功能:

typedef double doubleScalar;
typedef long double longDoubleScalar;

源文件如下:

Scalar.H  Scalar.C
doubleFloat.H
doubleScalar.H  doubleScalar.C
floatScalar.H  floatScalar.C
longDoubleScalar.H  longDoubleScalar.C
scalar.H  scalar.C
scalarList.H  scalarList.C
scalarIOList.H  scalarIOList.C
scalarListIOList.H scalarListIOList.C

除去基本的文件流功能外,还添加了很多开方求三阶函数等等的功能。

OK!这部分先这样,这些是在其他源码中会大量会用的基础类型,在阅读其他代码前,最好了解这部分最基础的功能。

 类似资料: