博文
[转载]网格与网格技术(2006-11-29 10:53:00)
摘要:
网格与网格技术
1.块结构化网格
又称为组合网格,是求解不规则区域中的流动与传热问题的一种重要网格划分方法。根据问题的条件把整个求解区域划分为若干个小的区域(块),每一块中都用常见的结构化网格来离散,并且每一块中都可以采用适体坐标方法来生成网格。
块结构化网格可分为拼片式网格与搭接式网格,前者是在块与块交界处无重叠区域,通过一个界面相接,而后者则有部分区域重叠,搭接式网格又称为杂交网格。
2.边界层网格
CFD计算对计算网格有特殊的要求,一是考虑到近壁粘性效应采用较密的贴体网格,二是网格的疏密程度与流场参数的变化梯度大体一致。对于面网格,可以设置平行于给定边的边界层网格,可以指定第二层与第一层的间距比,及总的层数。对于体网格,也可以设置垂直于壁面方向的边界层,从而可以划分出高质量的贴体网格。Gambit中提供专门的边界层网格画法。
3.交错网格
所谓交错网格,是指将速度分量与压力在不同的网格系统上离散。也就是把速度u,v及压力p(包括其它所有标量场及物性参数)分别存储于三套不同网格上的网格系统。速度u存于压力控制容积的东、西界面上,速度v存于压力控制容积的南、北界面上,u,v各自的控制容积则是与速度所在位置为中心的。u控制容积与主控制容积(压力的控制容积)之间在x方向有半个网格步长的错位,而v控制容积与主控制容积在y方向上有半个网格步长的错位。
使用交错网格的目的:是为了解决在普通网格上离散控制方程时给计算带来严重问题。交错网格是SIMPLE算法实现的基础。
交错网格将标量(如压力,温度和密度)在正常网格节点上存储和计算,而将速度的各分量分别在错位后的网格上存储和计算,错位后网格的中心位于原控制体积大界面上。二维问题,就有三套不同的网格系统分别存储p,u和v,对于三维问题,就有四套网格系统,分别用于存储p,u,v和w。
自适应网格技术
自适应网格技术是指根据数值计算结果,反过来修改网格疏密布置或网格线的走向,使之与所计算的具体问题相适应的网格生成技术。转自:http://combust.hit.edu.cn/blog/......
[转载]控制方程的守恒性与非守恒性(2006-11-29 10:49:00)
摘要:
控制方程的守恒型与非守恒型
控制方程的守恒型与非守恒型:对流项采用散度的形式来表示的控制方程,一般称为守恒型的控制方程,或称控制方程的守恒形式。从微元体的角度,控制方程的守恒型与非守恒型是等价的,都是物理的守恒定律的数学表示。但是数值计算是对有限大小的计算单元进行的,对有限大小的计算体积,两种形式的控制方程则有不同的特性。讨论控制方程守恒型与非守恒型的目的在于:不论节点布置的疏密程度如何,根据控制方程而导出的离散方程也具有对任意大小容积守恒的特性。离散方程的守恒特性是工程计算所希望的。凡是从守恒型的控制方程出发,采用控制容积积分法导出的离散方程可以保证具有守恒特性,而从非守恒型控制方程出发所导出的离散方程则未必具有守恒特性。 摘自“数值传热学”。......
OpenFOAM中的哈希表类HashTable(2006-11-27 18:00:00)
摘要:在看OpenFOAM中的字典类时,其中有一个哈希表成员,所以今天就看看OpenFOAM中的哈希表类是怎么实现的!
我们知道哈希表一般是用来就是用来节省数据的存储和查找消耗的时间,所以在OpenFOAM这种要进行大量数据存储、查找及其他处理的计算程序中使用这样的类也就不足为奇了,那么它是怎样实现的呢,我们来看看!
首先看他的模板参数
template<class T, class Key=word, class Hash=string::hash>
class HashTable
其中T表示表中存储的数据的类型,Key为关键字(默认为word类)用于进行哈希函数运算的参数,Hash为使用的哈希函数(默认值为string类的内嵌类hash),我们先看看string中的hash是怎么定义的:
class hash
{
public:
inline hash();
inline size_type operator()(const string& key) const;
inline size_type operator()
(
const string& key,
const size_type tableSize
) const;
};
从中可见有两个版本的哈希函数:一......
[转载]OpenFOAM——编译过程(2006-11-26 11:13:00)
摘要:我在两台机器上编译了OpenFOAM,
一台CPU是DUAL XEON(带64位指令扩展),
操作系统是Linux RedHat Linux ES 3.0 for EM64T(64bit),
linux kernel是2.4.21 (x86-64,SMP),
GCC版本是3.2.3,glibc 2.3.2,
binutils的版本是2.14.90。
另一台是CPU是普通的Pentium 4,
操作系统是RedHat Fedora Core 5,
kernel 2.6.15 (i386),
GCC 4.1.0,glibc 2.4,
binutil 2.16.91。
两台机器OpenFOAM的安装都在用户权限下进行。
安装基本按照这个howto进行的。下面给出的一些信息仅是这个howto的补充。
在安装之前,如果对linux下的编译、静态和动态链接以及make过程不太了解,不妨可以看看GCC the complete reference。这个有英文的电子版,在新水木的linuxdev版不久之前还有人贴过,我觉得基本上看看第4、12以及14章就可以了。
大体上,OpenFOAM的编译从逻辑上可以分为三个部分,前处理、求解器和后处理
其包依赖性大致可以如下图所示。
不过在实际编译时,在安装gcc/binutil/java/cmake/paraview之后,三部分都是在一个make命令下同一完成的。
OpenFOAM源代码树中还包含了两个辅助的包的源代码,mico和lam-mpi。前者是用于FoamX用于浏览计算节点机器的一个支持库(大概吧,不是非常清楚)。后者用于支持并行计算。
起始,从我的经验来看,OpenFOAM的求解器的编译还是相对容易的,容易出问题的是FoamX和paraFoam(包括paraView)的编译,特别是后者。如果你的确遇到FoamX和paraFoam的编译问题,不妨统统不考虑java/cmake/paraview这些包,仅安装gcc/binut......
OpenFOAM—primitive—products.h(2006-11-22 13:20:00)
摘要:前面在介绍vectorSpace时提到了两个模板类——innerProduct及crossProduct。今天就简单介绍引入这两个模板类的头文件products.h文件。从文件名里就可以看出在该头文件中定义了与乘积相关的类,的确是这样的。在该文件中除了定义了innerProduct和crossProduct之外还定义了outterProduct,scalarProduct及powProduct。下面分别介绍一下:
1、outerProduct模板
template<class arg1, class arg2>
class outerProduct {...} //定义了arg1类和arg2类进行外积之后得到的积的秩及其类型
2、crossProduct模板
template<class arg1, class arg2>
class crossProduct {...} //定义了arg1类和arg2类进行叉乘之后得到的积的秩及其类型
3、innerProduct模板
template<class arg1, class arg2>
class innerProduct {...} //定义了arg1类和arg2类进行内积之后得到的积的秩及其类型
4、scalarProduct模板
template<class arg1, class arg2>
class scalarProduct {...} //定义了arg1类和arg2类进行数乘之后得到的积的秩及其类型
5、powProduct模板
template<class arg1,int arg2>
class powProduct {...} //定义了arg1类进行arg2次乘幂之后得到的积的秩及其类型
以上这些模板类给标量,矢量及张量之间的乘积运算带来了统一的形式,因此使用起来更加方便。
......
OpenFOAM——primitive——Random类(2006-11-20 13:22:00)
摘要:今天介绍Random类——实现随机数的生成,包括标量,矢量以及张量!
私有成员变量:整型的seed
公有部分:
构造函数:
Random(const label& a);//给定一个常整数a进行构造
成员函数:
int bit(): //根据得到的随机数,返回1或者是0
scalar scalar01();//得到一个0-1之间的随机标量值
vector vector01();//得到三个元素都在0-1之间的随机矢量
tensor tensor01();//得到所有元素都在0-1之间的随机张量
sphericalTensor sphericalTensor01();//得到所有元素都在0-1之间的sphericalTensor
&nbs......
OpenFOAM——primitive——Pair模板类(2006-11-19 21:44:00)
摘要:STL中有pair用于实现成对的元素,在OpenFOAM中叶实现了这一个模板类。
template<class Type>
Pair:public FixedList<Type,2>;//由此可见该模板类是FixedList的子类,且该FixedList容量为2,即只有两个元素,这里的Fixed是OpenFOAM的container模板类里的一个,以后再介绍container时再进行详细的介绍。
该模板类的公有部分:
构造函数:
Pair(){}//默认构造函数什么都不做
Pair(const Type& f, const Type& s)//给出pair对元素来进行构造
{
first()=f;
second()=s
} ......
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
&......