在StochasticDispersionRAS模型中调用颗粒位置的值



  • 现想通过修改StochasticDispersionRAS的C文件,使颗粒的随机扰动UTurb,和颗粒所处的位置(距离原点的位置)相关。请问在颗粒的C文件中应该怎样正确地调用颗粒位置的值呢?

    我有试过“const vector & position”,和“position()”之类的,但是并不能成功编译。



  • @hotairballon1997 应该无法获取的,可以直接改接口,把 position 传进来。



  • @浪迹天大 请问您说的改接口是指怎么操作?

    我看到插值读取Uc的代码里,确实有颗粒位置值position()带入,您提到的改接口的意思是把这个position()赋值给一个新变量嘛?

    Uc_ = td.UInterp().interpolate(this->position(), tetIs);
    


  • @hotairballon1997 我的意思是,找到能够获取 position的地方,然后通过函数参数,一层一层传到当前的函数。


  • 管理员

    插一句,UTurb这个应该是放在连续相的
    再插一句,楼主算的是什么,拉格朗日这面湍流分散力我们之前曾经研究过2个月,至少针对气液多相流来说,结果很不好。后来那个学生去香港了,就不了了之了。



  • @浪迹天大 谢谢您的回复,我还是想问问这个position()是不是所说的颗粒的位置值?但是好像参数的格式与我最终要传到UTurb里的格式不太一样,所以导致无法编译成功。。想问问应该怎么一层一层传导?

    @李东岳 谢谢李老师关注,我在做的是颗粒流射入腔体内的一个模拟,确实stochastic模型本身是只适合于各向同性流动的,算出来的结果很不好,所以我现在想将UTurb的计算过程进行修改,所以还是针对颗粒相的。

    之前有试过在UTurb的方向值dir中添加与流体速度Uc的相关性(修改如下),结果能稍微有些改进。现在想将与颗粒位置的相关性也添加进来,但是position和Uc不一样,没有在这个C文件中声明,所以不知道该怎么调用它?

            {
                tTurb = 0;
    
                const scalar sigma = sqrt(2*k/3.0);
    
                // Calculate a random direction dir distributed uniformly
                // in spherical coordinates
    
                const scalar theta = rnd.sample01<scalar>()*twoPi;
                const scalar u = 2*rnd.sample01<scalar>() - 1;
    
                const scalar a = sqrt(1 - sqr(u));
    
                // 修改部分开始
                const scalar Uc_x = Uc.component(0);
                const scalar Uc_y = Uc.component(1);
                const scalar Uc_z = Uc.component(2);
            
                scalar f_x = mag(sqrt(sqr(Uc_y)+sqr(Uc_z)))/mag(Uc);
                scalar f_y = mag(sqrt(sqr(Uc_x)+sqr(Uc_z)))/mag(Uc);
                scalar f_z = mag(sqrt(sqr(Uc_x)+sqr(Uc_y)))/mag(Uc);
    
                scalar dir_x = f_x*a*cos(theta); 
                scalar dir_y = f_y*a*sin(theta);
                scalar dir_z = f_z*u;
                const vector dir(dir_x, dir_y, dir_z);
                // 修改部分结束
                (源文件是只有一句:const vector dir(a*cos(theta), a*sin(theta), u);)
    
                UTurb = sigma*mag(rnd.GaussNormal<scalar>())*dir;
            }
    

  • 管理员

    我们当时也是添加各向异性,你可以把这个加到你的dispersion函数里面

    const typename TrackCloudType::parcelType& p =
            static_cast<const typename TrackCloudType::parcelType&>(*this);
    const point start = p.position();
    

    这个函数上面添加上p.position()然后传入进去,因为td没有position()函数,但是p有

    就是 @浪迹天大 说的,一步一步弄,


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1