正文

OpenFOAM——primitive——Random类2006-11-20 13:22:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bioexplore/20513.html

分享到:

今天介绍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
              label     integer(const label& lower, const label& upper);//返回lower和upper之间的随机数
              vector   position(const vector& v1, cosnt vector& v2);//返回位于矢量v1和v2之间的随
机矢量
              void     randomise(scalar& s); //将一个随机标量存入s中
              void     randomise(vector& v1);//将一个随机矢量存入v1中
              void     randomise(tensor& t);//将一个随机张量存入t中
              scalar   GaussNormal();  //没看太明白,下面是他的代码:


scalar Random::GaussNormal()
{
    static int iset = 0;
    static scalar gset;
    scalar fac, rsq, v1, v2;

    if (iset == 0)
    {
        do
        {
            v1 = 2.0*scalar01() - 1.0;
            v2 = 2.0*scalar01() - 1.0;
            rsq = v1*v1 + v2*v2;
        } while (rsq >= 1.0 || rsq == 0.0);

        fac = sqrt(-2.0 * log(rsq)/rsq);
        gset = v1*fac;
        iset = 1;

        return v2*fac;
    }
    else
    {
        iset = 0;

        return gset;
    }
}

今天就到这吧

阅读(5488) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册