在StochasticDispersionRAS模型中调用颗粒位置的值
-
现想通过修改StochasticDispersionRAS的C文件,使颗粒的随机扰动UTurb,和颗粒所处的位置(距离原点的位置)相关。请问在颗粒的C文件中应该怎样正确地调用颗粒位置的值呢?
我有试过“const vector & position”,和“position()”之类的,但是并不能成功编译。
-
@hotairballon1997 应该无法获取的,可以直接改接口,把 position 传进来。
-
@浪迹天大 请问您说的改接口是指怎么操作?
我看到插值读取Uc的代码里,确实有颗粒位置值position()带入,您提到的改接口的意思是把这个position()赋值给一个新变量嘛?
Uc_ = td.UInterp().interpolate(this->position(), tetIs);
-
@hotairballon1997 我的意思是,找到能够获取 position的地方,然后通过函数参数,一层一层传到当前的函数。
-
@浪迹天大 谢谢您的回复,我还是想问问这个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; }