博文
OpenFOAM类——Time类(2008-03-28 22:32:00)
摘要:
Time是一个很复杂的类,他继承了多达5个类——clock,cpuTime,TimePaths,OjbectRegistry和TimeState。上图是其引入的头文件列表。
下面将其组成进行分析:
从上面两图中可以看出该类十分庞大,具有大量的成员变量和成员函数,仅就其主要的进行详述,其他部分请参见原代码。
......
OpenFOAM类——argList类(2008-03-28 21:37:00)
摘要:argList类的组成如下图所示:
私有成员变量的类型:
stringList args_;
HashTable<string> options_;
word executable_;
fileName rootPath_;
fileName globalCase_;
fileName case_;
bool parRun_;
ParRunControl parRunControl_;
// 与信号处理有关的成员变量
sigFpe sigFpe_;
sigInt sigInt_;
sigQuit sigQuit_;
sigSegv sigSegv_;
公有静态成员变量:
static SLList<string> validArgs;
......
OpenFOAM类——ParRunControl类(2008-03-28 20:19:00)
摘要:ParRunControl类的成员情况如下
从上图可见,该类为非模板类,相对比较简单。
私有成员变量:
RunPar,bool型变量
公有构造函数:
ParRunControl(), 该构造函数只是初始化RunPar=false;
共有析构函数:
~ParRunControl(),如果RunPar=true,则显示信息“Finalising parallel run”,并调用Pstream的exit()函数。
共有成员函数:
void runPar(int& argc, char**& argv); 设置RunPar=true,并调用Pstream的
init(argc,argv),如果调用失败,显示出错信息。
......
OpenFOAM——autoPtr模板类(2008-03-28 14:54:00)
摘要:autoPtr类是一个模板类,其主体结构如下:
其中,可以看出有一个私有变量T* ptr_;ptr_用来保存一个T类型的对象的指针。
该类提供两个构造函数:inline explicit autoPtr(T* = NULL);和复制构造函数inline autoPtr(const autoPtr<T>&);
析构函数:inline ~autoPtr();用来在析构对象时,删除ptr_指向的对象所占的内存
成员函数:
inline bool valid() const; 如果ptr_指向某个对象,则返回true,否则返回false
inline T* ptr(); 返回指向ptr_指向对象的指针,并设置ptr_=NULL;
inline void set(T* p); 如果ptr_已经指向具体的对象,则抱错否则ptr_=p
inline void reset(T* p); 如果ptr_已经指向具体的对象,则首先删除该对象的内存,并设置ptr_=p;
inline void clear(); 调用reset(NULL);
inline T& operator()(); 如果ptr_指向了具体的对象,则返回该对象的拷贝
inline const T& operator()() const; operator()的const版本
inline operator ......
已经看过的类(2008-03-28 14:31:00)
摘要:已经理解并在此整理的类:
提供连接,可直接点开各类的链接:
A
accessOp
C
clock
D
dimensionSet
dimesioned<Type>
F
Field
H
HashTable
HashTable详解
I
IOstream
P
Pair模板类
ParRunControl类
primitive类
products
R
Random类
refCount
T
Time类
TimePaths
tmp<class T>
V
Vector类
VectorSpace类
VectorSpaceOps类
......
OpenFOAM类——accessOp类(2008-03-21 20:25:00)
摘要:所在源文件:listlistOps.H
描述:用来获得某个类型的常量引用的函数对象类
模板类:是
模板参数:class T
代码:
const T& operator()(const T& x) const
{
return x;
}
仅有一个成员函数operator(),说明了该类是一个函数对象类......
OpenFOAM的模板类tmp<class T>(2008-03-11 12:32:00)
摘要:tmp<T>是为实现创建T类型临时对象而设计的类。
该类有三个私有变量bool isTmp_(判断是否为临时对象的标志,是则为true,否为false); mutable T* ptr_(指向T类型对象的指针)和const T& ref_(指向T类型常量对象的常量引用)。
......
OpenFOAM的refCount类描述(2008-03-11 12:23:00)
摘要:refCount类是专门为tmp<Field>类定制的引用次数计数类。
该类仅有一个私有变量int count_;用来保存计数个数,并通过私有化封闭了其复制构造及赋值操作子功能。
默认构造函数,将count_设为0。
提供公有函数int count() const (返回被引用的个数,即count_的值),bool okToDelete() const (当count_>0时返回false,count_=0时返回true )及void resetRefCount() (重置类的对象,将私有变量count_设为0)。
另外,该类还支持自增(++)及自减(--)操作子,实现计数(count_)的增加和减少.
对于一个继承自该类的子类即具有以上所有公有功能。......
openfoam 网格类的编程方法(2008-03-03 22:36:00)
摘要:openfoam对于读入的网格,会进行一系列严格的检验,所以下面也会写一些它到底检测了写什么东西。
Points:
在Openfoam中,point是用单位为m的3维矢量来定义的。所有的点都被保存在一个list中,用list中的位置标号来代表这个点。
对于点,openfoam检测如下两个方面:
1. 包含points的list中是否有坐标完全相同的点。
2. list中的point是否都至少属于一个面。
Faces:
在openfoam中,包含有序点的一个list(A face is an ordered list of points)。在这个list中,点是用标号来表示的。点标号按照如下要求排列:每两个相邻的点都构成面的一条边。也就是所在这里list中,可以任意选取一个点作为list的第一个元素,然后按照顺时针或者逆时针方向依次找到面上的点,插入到list中。在openfoam中,所有的面都被包含在一个 list中。并且用该面在list中的位置标号来表示这个面。面的法线方向按照该面中包含点走向的右手法则来定。(如果点是按照逆时针方向排列的,则法线方向指向我们自己)。
在openfoam中有如下两种面:
1. 内部面:这些面连接并且只能连接2个cell,对于每个内部面,面中点按照下面的规则来排序:面的法线方向指向cell标号比较大的那个cell。
2.边界面:这些面只属于一个cell。一个边界面is addressed by one cell(only) and a boundary patch。 边界面上点的排序规则如下:面的法线方向point outside 计算区域。
面需要满足如下的条件:
一般来说面应该是凸面,或者至少面的质心应该位于面里面。面可以是弯曲的(所有的点不需要共面)。
Cells:
在openfoam中,cell是faces的一个list。在list中faces可以任意排列。
cell需要满足如下的条件:
1. contiguous
2. convex:Every cell must be convex and its cell centre inside the cell
3. closed:包含两方面的意义:
 ......