reactingParcleFileFoam解析

13 篇文章 12 订阅

reactingParcleFileFoam为Euler-Lagrangian框架下的多项流瞬态求解器,可以模拟液滴与液膜的相互作用,例如splash等。通常由于液滴在气相中分布很稀疏,所以连续相求解仍求解的为单相流(控制方程中未加入孔隙率的影响),颗粒对流体的作用以源项的方式添加到控制方程中;而颗粒的运动则借助牛顿第二定理来求解(cloud类),不考虑颗粒之间的碰撞。由于单向流求解器解析比较常见,在此不多做介绍,下面主要介绍在进行PIMPLE迭代前的关于parcel和surfaceFilm的evolve函数。

离散粒子相求解:parcels.evolve()
  1. parcels的原型为creatClouds.H中的
basicReactingCloud parcels
(
    "reactingCloud1",
    rho,
    U,
    g,
    slgThermo
);

basicReactingCloud ,该原型定义位于:/opt/OpenFOAM/OpenFOAM-2.3.x/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H

namespace Foam
{
    typedef ReactingCloud
    <
        ThermoCloud
        <
            KinematicCloud
            <
                Cloud
                <
                    basicReactingParcel
                >
            >
        >
    > basicReactingCloud;
}

这是一个层层相扣的模板类,这些模板类的定义位于/opt/OpenFOAM/OpenFOAM-2.3.x/src/lagrangian/intermediate/clouds/Templates 类模板最中心为basicReactingParcel
该原型的定义位于 /opt/OpenFOAM/OpenFOAM2.3.x/src/lagrangian/intermediate/parcels/derived/basicReactingParcel
2. evolve()函数:
evlove()函数定义位于/src/largrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C/

template<class CloudType>
void Foam::ReactingCloud<CloudType>::evolve()
{
    if (this->solution().canEvolve())
    {
        typename parcelType::template
            TrackingData<ReactingCloud<CloudType> > td(*this);

        this->solve(td);
    }
}

可以发现调用了solve函数,该函数定义位于
/src/largrangian/intermediate/clouds/Templates/KinematicColud/KinematicColud.C

template<class CloudType>
template<class TrackData>
void Foam::KinematicCloud<CloudType>::solve(TrackData& td)
{
    if (solution_.steadyState())
    {
        td.cloud().storeState();

        td.cloud().preEvolve();

        evolveCloud(td);

        if (solution_.coupled())
        {
            td.cloud().relaxSources(td.cloud().cloudCopy());
        }
    }
    else
    {
        td.cloud().preEvolve();

        evolveCloud(td);

        if (solution_.coupled())
        {
            td.cloud().scaleSources();
        }
    }

    td.cloud().info();

    td.cloud().postEvolve();

    if (solution_.steadyState())
    {
        td.cloud().restoreState();
    }
}

其中主要是调用3个*Evolve()函数开track parcel的运动。其中evolveCloud(td)最终调用了/opt/OpenFOAM/OpenFOAM-2.3.x/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C中的move()函数来实现颗粒的运动。

surfaceFilm.evolve()

关于surfaceFilm的官方文档,由于该文档比较简单,我将从源代码的角度进行介绍。
关于surfaceFilm的求解是在Euler的框架下,在指定边界处extrude的一层网格内求解局部连续性方程,动量方程以及能量方程。

void Foam::regionModels::regionModel::evolve()
{
    if (active_)
    {
        Info<< "\nEvolving " << modelName_ << " for region "
            << regionMesh().name() << endl;

        //read();

        preEvolveRegion();

        evolveRegion();

        postEvolveRegion();

        // Provide some feedback
        if (infoOutput_)
        {
            Info<< incrIndent;
            info();
            Info<< endl << decrIndent;
        }

        if (time_.outputTime())
        {
            outputProperties().writeObject
            (
                IOstream::ASCII,
                IOstream::currentVersion,
                time_.writeCompression()
            );
        }
    }
}

位于:/opt/OpenFOAM/OpenFOAM-2.3.x/src/regionModels/regionModel/regionModel/regionModel.C
同样该函数中主要调用了(preEvolve, evolve, postEvolve)Region函数,其中surfaceFilm的求解是在evolveRegion()函数中进行的;该函数在regionModel.C中的定义为一个虚函数,只提供了一个接口,具体函数实现在不同的模型中,例如本求解其中的实现位于/opt/OpenFOAM/OpenFOAM-2.3.x/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.C,分别求解了连续性方程,动量方程,能量方程以及厚度方程,以能量方程为例:

void thermoSingleLayer::solveEnergy()
{
    if (debug)
    {
        Info<< "thermoSingleLayer::solveEnergy()" << endl;
    }

    updateSurfaceTemperatures();

    solve
    (
        fvm::ddt(deltaRho_, hs_)
      + fvm::div(phi_, hs_)
     ==
      - hsSp_
      + q(hs_)
      + radiation_->Shs()
//      - fvm::SuSp(rhoSp_, hs_)
      - rhoSp_*hs_
    );

    correctThermoFields();

    // evaluate viscosity from user-model
    viscosity_->correct(pPrimary_, T_);
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值