博文

OpenFOAM类——Time类(2008-03-28 22:32:00)

摘要:

Time是一个很复杂的类,他继承了多达5个类——clock,cpuTime,TimePaths,OjbectRegistry和TimeState。上图是其引入的头文件列表。 下面将其组成进行分析:
从上面两图中可以看出该类十分庞大,具有大量的成员变量和成员函数,仅就其主要的进行详述,其他部分请参见原代码。

 ......

阅读全文(3895) | 评论:2

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;
 ......

阅读全文(4485) | 评论:0

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),如果调用失败,显示出错信息。
  ......

阅读全文(3320) | 评论:1

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 ......

阅读全文(4291) | 评论:0

已经看过的类(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类

 ......

阅读全文(4214) | 评论:0

OpenFOAM类——accessOp类(2008-03-21 20:25:00)

摘要:所在源文件:listlistOps.H 描述:用来获得某个类型的常量引用的函数对象类

模板类:是
模板参数:class T 代码:
const T& operator()(const T& x) const
    {
        return x;
    }

仅有一个成员函数operator(),说明了该类是一个函数对象类......

阅读全文(3265) | 评论:0

OpenFOAM的类(2008-03-21 20:20:00)

摘要:OpenFOAM共有1496个类
现在分析了10个,还有1486个。......

阅读全文(405) | 评论:0

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类型常量对象的常量引用)。  ......

阅读全文(537) | 评论:0

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_)的增加和减少. 对于一个继承自该类的子类即具有以上所有公有功能。......

阅读全文(3620) | 评论:0

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:包含两方面的意义:
 ......

阅读全文(5859) | 评论:0