找回密码
 注册
查看: 4334|回复: 0

[转载]OpenFOAM中的矢量类vector的使用解析

[复制链接]
发表于 2009-5-7 03:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表