Euler 两相流中的 diameterModel

version: v1812

twoPhaseEulerFoam 中,diameterModel 有三种类型:

  • constant
  • isothermal
  • IATE
  1. constant 分散相的粒径为常数

在 constant/phaseProperties 中,

water                                           // water 的性质
{
    type            purePhaseModel;
    diameterModel   constant;
    constantCoeffs
    {
        d               1e-4;
    }

    residualAlpha   1e-6;
}

源代码 applications/solvers/multiphase/reactingEulerFoam/phaseSystems/diameterModels/constantDiameter/constantDiameter.C

Foam::tmp<Foam::volScalarField> Foam::diameterModels::constant::d() const
{
    return tmp<Foam::volScalarField>
    (
        new volScalarField
        (
            IOobject
            (
                "d",
                phase_.time().timeName(),
                phase_.mesh()
            ),
            phase_.mesh(),
            d_
        )
    );
}
  1. isothermal 分散相的粒径跟压力有关,等温的

在 constant/phaseProperties 中,

air                                             // air 的性质
{
    type            purePhaseModel;             // 
    diameterModel   isothermal;                 // 等温的分散相粒径模型
    isothermalCoeffs                            // 系数
    {
        d0              3e-3;                   // 初始直径
        p0              1e5;                    // 初始压力
    }

    residualAlpha   1e-6;                       // 相分数残差控制
}

等温粒径模型为

p \times \frac{4}{3} \pi \left( \frac{d}{2} \right)^3 = p_0 \times \frac{4}{3} \pi \left( \frac{d_0}{2} \right)^3

变换后

d=d_0 \left(\frac{p_0}{p}\right) ^{1/3}

源代码 applications/solvers/multiphase/reactingEulerFoam/phaseSystems/diameterModels/isothermalDiameter/isothermalDiameter.C

Foam::tmp<Foam::volScalarField> Foam::diameterModels::isothermal::d() const
{
    const volScalarField& p = phase_.db().lookupObject<volScalarField>
    (
        "p"
    );

    return d0_*pow(p0_/p, 1.0/3.0);
}
  1. IATE (Interfacial Area Transport Equation) 界面面积传输方程
air
{
    diameterModel   IATE;
 
    IATECoeffs
    {
        dMax 1e-2;
        dMin 1e-4;
        residualAlpha 1e-6;
 
        sources
        (
            wakeEntrainmentCoalescence
            {
                Cwe         0.002;
            }
            randomCoalescence
            {
                Crc         0.04;
                C           3;
                alphaMax    0.75;
            }
            turbulentBreakUp
            {
                Cti         0.085;
                WeCr        6;
            }
        );
    }
 
    residualAlpha   1e-6;
}

本模型中,考虑了以下三种机制

  • wakeEntrainmentCoalescence
    Bubble coalescence by wake entrainment
  • randomCoalescence
    随机碰撞聚并 Bubble coalescence by random collision
  • turbulentBreakUp
    Bubble break-up due to the impact of turbulent eddies
\phi_{TI} = \frac{C_{ti}}{3} \frac{U_t}{d} \sqrt{1 – \frac{We_{Cr}}{We}} e^{-{We_{Cr}}/{We}}

源码 applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/diameterModels/IATE/IATE.C

Foam::tmp<Foam::volScalarField> Foam::diameterModels::IATE::dsm() const
{
    return max(6/max(kappai_, 6/dMax_), dMin_);
}

// Placeholder for the nucleation/condensation model
// Foam::tmp<Foam::volScalarField> Foam::diameterModels::IATE::Rph() const
// {
//     const volScalarField& T = phase_.thermo().T();
//     const volScalarField& p = phase_.thermo().p();
//
//     scalar A, B, C, sigma, vm, Rph;
//
//     volScalarField ps(1e5*pow(10, A - B/(T + C)));
//     volScalarField Dbc
//     (
//         4*sigma*vm/(constant::physicoChemical::k*T*log(p/ps))
//     );
//
//     return constant::mathematical::pi*sqr(Dbc)*Rph;
// }

void Foam::diameterModels::IATE::correct()
{
    // Initialise the accumulated source term to the dilatation effect
    volScalarField R
    (
        (
            (1.0/3.0)
           /max
            (
                fvc::average(phase_ + phase_.oldTime()),
                residualAlpha_
            )
        )
       *(fvc::ddt(phase_) + fvc::div(phase_.alphaPhi()))
    );

    // Accumulate the run-time selectable sources
    forAll(sources_, j)
    {
        R -= sources_[j].R();
    }

    fv::options& fvOptions(fv::options::New(phase_.mesh()));

    // Construct the interfacial curvature equation
    fvScalarMatrix kappaiEqn
    (
        fvm::ddt(kappai_) + fvm::div(phase_.phi(), kappai_)
      - fvm::Sp(fvc::div(phase_.phi()), kappai_)
     ==
      - fvm::SuSp(R, kappai_)
    //+ Rph() // Omit the nucleation/condensation term
      + fvOptions(kappai_)
    );

    kappaiEqn.relax();

    fvOptions.constrain(kappaiEqn);

    kappaiEqn.solve();

    // Update the Sauter-mean diameter
    d_ = dsm();
}

kappai_ (\kappa_i=\alpha\times A_i, A_i is the interfacial area) is the interfacial curvature, the equation is

\frac{d\kappa_i}{dt} + \nabla\cdot(\kappa_i U) - \kappa_i \nabla\cdot U = R\kappa_i + \kappa_i

where R=\dfrac{1}{3\alpha}\left(\dfrac{d\alpha}{dt}+\nabla\cdot(U\alpha)\right)

References

  1. twoPhaseEulerFoam - Diameter Model (v1812) | CFD WITH A MISSION