|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
OpenFOAM中向量类vector和C++中的vector虽然同名,但功能可谓大相径庭。C++中vector是一个模板类,类本身是一个数组,用来连续存放一些变量。而OpenFOAM中的vector是向量类,而非模板(Vector为该类的模板,vector = Vector<scalar>),vector对象有三个分量,也就是三维空间中的xyz。openfoam对几何的点(point)定义就是采用向量形式,其实point为vector的一个别名,采用如下定义
typedef vector point;
(1) vector里面有两个静态变量one(1,1,1),zero(0, 0 ,0),通常可以使用这两个值进行初始化,调用这样个值可以采用vector:ne; vector::zero.
(2)vector计算相关(a b为两个矢量)
和: a+b
差: a-b
外积 a*b //得到是一个张量,很少用
内积 a&b 这里的&本身是按位操作符,OpenFOAM对其进行重载,变成内集
叉积 a^b 这里OpenFOAM重载了“^”
模 mag(a)
模的平方 magSqr(a)
(3) test
// OpenFOAM给了一个该类的test,在\applications\test\vector;该test并没有将向量的所有功进行测试
#include "vector.H" //向量头文件,别将其写成vector.h了,不然就变成了c++的了
#include "IOstreams.H" //输入
using namespace Foam;
int main()
{
Info<< vector::zero << endl // 打印zero (0 0 0)
<< vector:ne << endl //打印 one (1 1 1)
<< vector::dim << endl //打印维数,返回3
<< vector::rank << endl; //打印阶数,返回1, 标量:0阶,向量 1阶,张量2阶
vector d(0.5, 0.5, 0.5); //声明一个向量
d /= mag(d); //求向量方向。
//下面主要测试小向量的误差。
vector dSmall = (1e-100)*d;
dSmall /= mag(dSmall);
Info<< (dSmall - d) << endl;
//向量和标量相乘,各分量都相乘。
d *= 4.0;
//输出d
Info<< d << endl;
//测试求和
Info<< d + d << endl;
//模的平方
Info<< magSqr(d) << endl;
//
vector d2(0.5, 0.51, -0.5); //生命另外一个变量,注意个数的差别,看看输出结果是啥吧。
Info<< cmptMax(d2) << " " << cmptSum(d2) << " " << cmptMag(d2) << endl;
Info<< min(d, d2) << endl;
return 0;
}
上面列出的其他功能自己向里面写吧,如果有问题,请回复。
运行程序
编译:进入\applications\test\vector,输入wmake
看结果:输入vectorTest
转自OpenFOAM研究:http://blog.sina.com.cn/openfoamresearch
[ 本帖最后由 su_junwei 于 2009-5-7 03:13 编辑 ] |
|