博文

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

阅读全文(3522) | 评论: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 ......

阅读全文(4451) | 评论: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类

 ......

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

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

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

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

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

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

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

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

阅读全文(507) | 评论: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类型常量对象的常量引用)。  ......

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

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

Meshing Software Survey(2008-03-04 22:10:00)

摘要:The URL of this survey http://www.andrew.cmu.edu/user/sowen/softsurv.html Some main points of this survey: As part of a survey of unstructured mesh generation technology, an informal survey was conducted during September 1998 of current mesh and grid generation software. Over 100 surveys were mailed to software vendors, research labs and educational institutions. This list is definitely not all-inclusive, but I believe is fairly representative of what is currently available, as well as what is state-of-the-art. Only those responding to the survey are included here. While the emphasis of the survey is unstructured codes, there is also a considerable number of structured codes included. The codes range from simple research codes that are used only by a few people, to commercial products incorporated into sophisticated analysis packages. Please send any corrections or additions to this list to Steve Owen at sjowen@sandia.gov or sowen@adelphia Another catalog of mesh generation softwa......

阅读全文(6853) | 评论: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:包含两方面的意义:
 ......

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

在OpenFOAM中做用户自定义库——编译library (2008-03-03 22:35:00)

摘要:OpenFOAM自己提供的标准类都是以库的形式提供的,并且利用头文件给出了库的应用接口。这样一来,用户的代码中即使用到了某个类,也不需要对源文件进行重新编译了。这样做有好有坏:好处是提高了效率;坏处是源文件(.c)进行修改了但如果不重新编译的话会导致库文件不会被更新,从而用户代码中用到的还是旧库。缺点可以弥补,那就是在修改了代码之后进行重新编译,但是一般情况下,我们完全可以不去动OpenFOAM的源文件。(前面提到了编译器会根据文件的修改情况决定是否重新编译,针对的是.h文件,而非.c源文件) 既然OpenFOAM采用的是上面的这种机制,那么用户在自己定义某个类之后该如何处理呢?标准的做法也是将其生成库文件,就像OpenFOAM本身提供的那样。当然用户很可能会修改自己的这个类,那么在修改之后记得重新编译就好了。那么,如何生成用户自定义的库呢? OpenFOAM提供了一个库:foamUser。如果查看目录$FOAM_LIBBIN会发现该库文件。不过OpenFOAM本身并未给此库提供什么功能,它相当于一个“空库”,等待用户自己去添加。与之对应,在$FOAM_SRC目录下可以找到一个foamUser文件夹,这是一个模版,提供了一个现成的框架,其中Make文件夹中的files和options文件提供了利用wmake进行编译时的选项。其中files文件内容如下:      libfoamUser.C        //指出源文件      LIB = $(FOAM_LIBBIN)/libfoamUser   //LIB指出编译为库,等号后为所添至库的路径 编译为库的命令为 wmake libso 。而libfoamUser.C中用到的头文件或者库同样在Make/options文件中说明,方式与编译可执行文件相同,不过关键字EXE要换成LIB,亦即:     LIB_INC = \
       -I<directoryPath> \
    &n......

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