在OpenFOAM中添加新的曳力

OpenFOAM中使用欧拉-拉格朗日方法对气固两相流进行模拟时,需要指定颗粒的曳力模型。有时候我们通过参考文献或者自行推导得到的曳力模型并不在OpenFOAM的默认曳力模型列表中,这时候就需要修改OpenFOAM的源代码,将新的曳力模型添加进去。

这里以EMMS曳力模型为例,简要介绍一下在OpenFOAM中添加新曳力模型的过程。

建立新曳力的类

对于OpenFOAM-2.3.x版本而言,颗粒曳力模型的存放位置为:

src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag

可以看到,此文件夹下存在五个曳力模型,包括:

  • ErgunWenYuDrag
  • NonSphereDrag
  • PlessisMasliyahDrag
  • SphereDrag
  • WenYuDrag

单独进入某个曳力模型的文件夹,例如ErgunWenYuDrag,发现其中包含了两个文件:ErgunWenYuDragForce.HErgunWenYuDragForce.C。这两个文件即曳力模型的声明与定义。

在添加EMMS曳力模型时,为了简单起见,可以将ErgunWenYuDrag文件夹复制出一份,并重命名为EMMSDrag,并将此文件夹中包含的ErgunWenYuDragForce.HErgunWenYuDragForce.C分别重命名为EMMSDragForce.HEMMSDragForce.C。打开这两个文件,将其中类名及构造函数等中包含的“ErgunWenYu”字符串替换为“EMMS”字符串即可。

修改曳力模型

根据新的曳力公式,修改曳力模型中的曳力表达。

EMMS曳力模型实际上相当于ErgunWenYu曳力模型在算得曳力的基础上乘以一个系数 H D H_D HD。ErgunWenYu曳力的求解在程序中是这样实现的:

template<class CloudType>
Foam::forceSuSp Foam::ErgunWenYuDragForce<CloudType>::calcCoupled
(
    const typename CloudType::parcelType& p,
    const scalar dt,
    const scalar mass,
    const scalar Re,
    const scalar muc
) const
{
    scalar alphac(alphac_[p.cell()]);

    if (alphac < 0.8)
    {
        return forceSuSp
        (
            vector::zero,
            (mass/p.rho())
           *(150.0*(1.0 - alphac)/alphac + 1.75*Re)*muc/(alphac*sqr(p.d()))
        );
    }
    else
    {
        return forceSuSp
        (
            vector::zero,
            (mass/p.rho())
           *0.75*CdRe(alphac*Re)*muc*pow(alphac, -2.65)/(alphac*sqr(p.d()))
        );
    }
}

可以发现算法非常明确,与文献中的曳力公式是完全对应的。在修改此曳力时,只需要在这个成员函数内部计算出EMMS曳力模型中的非均匀因子Hd,并将其乘入ErgunWenYu曳力公式即可。修改方式如下:

template<class CloudType>
Foam::forceSuSp Foam::EMMSDragForce<CloudType>::calcCoupled
(
    const typename CloudType::parcelType& p,
    const scalar dt,
    const scalar mass,
    const scalar Re,
    const scalar muc
) const
{
    scalar alphac(alphac_[p.cell()]);

    // Calculate Hd. Hd is a function of 'Re' and alphac.
    // scalar Hd = func(Re, alphac);

    if (alphac < 0.8)
    {
        return forceSuSp
        (
            vector::zero,
            (mass/p.rho())
           *(150.0*(1.0 - alphac)/alphac + 1.75*Re)*muc/(alphac*sqr(p.d()))
           *Hd  // Add Hd !!!
        );
    }
    else
    {
        return forceSuSp
        (
            vector::zero,
            (mass/p.rho())
           *0.75*CdRe(alphac*Re)*muc*pow(alphac, -2.65)/(alphac*sqr(p.d()))
           *Hd  // Add Hd !!!
        );
    }
}

修改构建曳力配置文件

打开文件src/lagrangian/intermediate/parcels/include/makeParcelForces.H,向其头文件中添加新增曳力模型的头文件,即#include "EMMSDragForce.H",并在其宏部分添加makeParticleForceModelType(EMMSDragForce, CloudType); \这样构建曳力的配置项。

重新编译曳力

首先要将新添加的曳力模型头文件及源文件链接到src/intermediate/lnInclude文件夹下。进入该文件夹,并执行如下命令:

ln -s ../submodels/Kinematic/ParticleForces/Drag/EMMSDrag/* .

之后,在src/intermediate重新编译相关的库文件即可:

wclean
wmake

重新编译求解器

找到MPPICFoam求解器所在的位置,并重新编译该求解器:

cd $FOAM_APP/solvers/lagrangian/DPMFoam
./Allwclean
./Allwmake

此时,MPPICFoam(以及DPMFoam)求解器就已经可以使用EMMS曳力模型了。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值