博文
OpenFOAM——primitive--bool & int & label(2006-11-16 19:44:00)
摘要:今天介绍OpenFOAM中实现的几个最基本的东西:bool、 int及label
在介绍这几个之前首先介绍一个特殊的类pTraits(primitive trait的简写,意思即为primitive类的基本特征),正如其名字所示该类用于描述所有primitive类的基本特征。
那么primitive类都有哪些基本特征呢,让我们来看看类pTraits的定义:
template<class primitive>
class pTraits
: public primitive //这里可以看出来pTraits为primitive的子类
{
public:
pTraits(Istream& is)
: primitive(is) {}
};
是不是很简单啊,不过对于每一个具体的primitive类型,pTraits类都进行了特化。因为是primitive类的子类所以可以通过特化为特定的primitive类加上我们希望它具有的特性。
下面分别从bool、label介绍pTraits的这种特化:
对于bool,特化了pTraits<bool>
成员变量(私有):
bool p_; //私有的数据成员
公有属性:
静态常量成员://所有的pTraits<primitive>都实现了以下几个常量
static const char* const typeName="bool";
&nbs......
OpenFOAM——primitives——Vector类(2006-11-15 11:57:00)
摘要:接着上回介绍的VectorSpace类,今天介绍它的子类——Vector类。
该类也是一个模板类,仅一个模板参数<class Cmpt>
其父类为VectorSpace<Vector<Cmpt>, Cmpt, 3>
下面是其原代码描述
Templated 3D Vector derived from VectorSpace adding construction from
3 components, element access using x(), y() and z() member functions and
the inner-product (dot-product) and cross product operators.
A centre() member function which returns the Vector for which it is called
is defined so that point which is a typedef to Vector<scalar> behaves as
other shapes in the shape hierachy
公有属性(public)
成员常量
enum{rank=1};//表明秩为1,这里秩的概念清参阅OpenFOAM的ProgramersGuide
&nb......
OpenFOAM——primitive——VectorSpace类(2006-11-13 12:32:00)
摘要:今天介绍VectorSpace类,该类定义了矢量空间类,是Vector类的基类。该类为模板类具有三个模板参数:class Form,class Cmpt,int nCmpt,其中Form指明要创建Form类型的VectorSpace对象,Cmpt为该空间中元素的类型,nCmpt为空间中矢量的元素个数。
公有属性(public)
成员变量:
Cmpt v_[nCmpt];定义了公有的数据成员v_;因此对外该成员是公开的可以随意访
问。
构造函数(3个):
VectorSpace();默认构造函数
VectorSpace(Istream& is);丛输入流构造
VectorSpace(const VectorSpace<Form,Cmpt,nCmpt>& vs);复制构造函数
成员函数:
const Cmpt& component(const direction d) const; const VectorSpace对象的component
&......
OpenFOAM——源文件ops.h(2006-11-13 12:00:00)
摘要:文件名:ops.h
上次在VectorSpaceOps类中定义的一些函数用到了操作函数类,所以这里专门讨论OpenFOAM中的操作函数类的定义源文件ops.h,他也是primitive中的一部分。
从文件名中可以看出来,该文件定义的是一些操作符方面的东西。正是这样该文件通过宏定义(#define)的方式定义了多个函数对象类!
下面是通过宏定义的所有函数对象的列表:振动联盟.m{8lXyv
他们可以分成两类:一类是带=号的操作符函数类,另一类是不带=号的操作符函数类,不知道这样说是不是合适,凑合吧!
1、=操作符函数类振动联盟 F*{!N.G`G6|5f F6W
eqOp<class T>(T& x,T& y) {x=y}; 振动联盟t*d-? Z*F3@5uT
eqOp2<class T1,class T2>(T1& x,T2& y) {x=y};振动联盟M,@q{"D {O(?+~,@ y
plusEqOp<class T>(T& x,T&......
OpenFOAM——primitive——VectorSpaceOps类(2006-11-12 19:00:00)
摘要:今天介绍primitives中的VectorSpace类相应的操作符函数类VectorSpaceOps
VctorSpaceOps为一个模板类,具有两个模板参数<int N,int I>
首先定义静态成员变量endLoop,并初始化该变量,若I<N-1则endLoop=1,否则endLoop=0
该类的成员函数,均为静态无返回值的模板函数,下面是他们的列表:
template<class V,class S,class EqOp>
|Z)`%u ~o5}5gbioexplore eqOpS(V& vs,const S& s,EqOp eo) //将V型变量vs与S型变量s进行eo操作,V一般为
Jk(s ^H;gk+_I&WGbioexplore VectorSpace,S一般为Scalar,eo多为赋值操作振动联盟8z"a)o?B(Y+QX
template<class S,class V,class EqOp>振动联盟j JW yHFXsv.p
SeqOp(S& s,const V& vs,EqOp eo) //将S型变量s与V型变量vs进行eo操作,V一般为 振动联盟0zp;t(n$_;I8k.t5y6M
&nbs......
OpenFOAM——primitive类(2006-11-12 09:59:00)
摘要:解开OpenFOAM源代码文件可以在OpenFOAM文件夹下看到primitives文件夹,里面有一系列的文件夹,这些文件夹里保存的就是所有OpenFOAM中实现的基础数据类;
最基本的几个有
label(其实就是整形,不过可能为int也可能为long),
bool(自己的逻辑变量类),
char(自己的char类),
scalar(标量类,single或double),
Vector(矢量类,具有三个分量,秩=1,关于秩的概念可参见软件的programmerguide:)),
Tensor(张量类,具有9个分量,秩=2),
complex(复数类,好久没接触过这个概念了,应该是高中时讲过的了:)再翻翻书了!~~~),
word(string的一个子类,用来保存单词,可以自己判断给出的字符能否在单词中使用!应该是这样~~~),
string(std::string的子类,内嵌了自己的哈希表类,增强了std::string的功能,现在知道的就这么多了。。。。。),
fileName(string的子类,用来表示文件名----具有路径的哦好像),
Pair(具有2个配对元素的list类,FixedList的子类,类似于stl中的pair),
Hash(哈希函数类,用来进行哈希运算)
。。。。。。。。还没完呢<<<<<<<<~~~~~~~~~~~~~
今天先介绍这么多吧,时间长着呢,我再慢慢加!
希望更多的人了解OpenFOAM!大家一起来解读OpenFOAM!......
OpenFOAM——主要的类及他们之间的关系(2006-11-12 09:35:00)
摘要:今天介绍OpenFOAM中主要的类及其相互之间的作用。
1、Primitive与Container----基础类及容器类
2、描述空间及时间的类
3、张量的数学运算类
4、Field、Dimension Set、Boundary Conditon和Geometric Field---场、量纲、边界条件及几何场
5、Mesh---网格类
6、积分、微分及离散类
7、矩阵类
8、描述PDE(偏微分方程)的类
9、物理模型类
在OpenFOAM中代码的组织,及类的区分和实现都是基于以上这些部分分别编写的。
......