Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 在collidingCloud中添加一个体积分数的判定,怎么实现?

在collidingCloud中添加一个体积分数的判定,怎么实现?

已定时 已固定 已锁定 已移动 OpenFOAM
3 帖子 3 发布者 2.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • zheZ 离线
    zheZ 离线
    zhe
    写于 最后由 李东岳 编辑
    #1

    如题目所示,由于不想在高浓度的粒子群中存在碰撞,所以添加了一个体积分数theta的判定。当theta>0.5时,修正粒子速度为0。当theta<=0.5时,正常发生碰撞。下面是添加后的code,编译是通过的,但是出来的结果完全不对。theta的定义是第二个code。希望有经验的朋友帮忙解惑,谢谢拉。

        label nSubCycles = collision().nSubCycles();
    
        if (nSubCycles > 1)
        {
           Info<< "    " << nSubCycles << " move-collide subCycles" << endl;
    
           volScalarField::Internal& thetaIn = theta().ref();
           forAll(thetaIn, celli)
           {
               if( thetaIn[celli] > 0.5 )  //if volume fraction > 0.5,
               {
                   nonMoveCollide(cloud, td, this->db().time().deltaTValue());
               }
               else
               {
                   subCycleTime moveCollideSubCycle
                   (
                       const_cast<Time&>(this->db().time()),
                       nSubCycles
                   );
    
                   while(!(++moveCollideSubCycle).end())
                   {
                       moveCollide(cloud, td, this->db().time().deltaTValue());
                   }
    
                   moveCollideSubCycle.endSubCycle();
               }
           } 
        }    
        else
        {
             moveCollide(cloud, td, this->db().time().deltaTValue());
        }
    }
    
    这是theta的定义:
    
    Foam::CollidingCloud<CloudType>::theta() const
    {
        tmp<volScalarField> ttheta
        (
            new volScalarField
            (
                IOobject
                (
                    this->name() + ":theta",
                    this->db().time().timeName(),
                    this->db(),
                    IOobject::NO_READ,
                    IOobject::NO_WRITE,
                    false
                ),
                mesh_,
                dimensionedScalar(dimless, Zero),
                extrapolatedCalculatedFvPatchScalarField::typeName
            )
        );
        volScalarField& theta = ttheta.ref();
        forAllConstIter(typename CollidingCloud<CloudType>, *this, iter)
        {
            const parcelType& p = iter();
            const label celli = p.cell();
    
            theta[celli] += p.nParticle()*p.volume();
        }
    
        theta.primitiveFieldRef() /= mesh_.V();
        theta.correctBoundaryConditions();
    
        return ttheta;
    }
    
    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #2

    虽然不太看的懂代码,但是听你的描述,好像不能达到你想要的目标。

    修正粒子速度为零,应该不是一超过0.5就把全体粒子速度修正为零吧。那样都像绝对零度似的,再不会动了。如果只是修正当前判定的粒子速度为零。那它不动是不撞别人了,别人撞它啊。兴许被怼的更狠……就像在湍流中,随波逐流还不怎么被怼,定那不动被怼的厉害。当然看具体碰撞模型怎么实现的了。如果不是那种只依赖当前速度判定是否碰撞的,那设定为零出什么结果都不是很意外吧:143:

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    写于 最后由 编辑
    #3

    您好,请问这个问题您是否有好的解决办法了吗?
    强制设为0可能不太对,反映出来的可能不是压实效果。。

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]