multiphaseEulerFoam: Added coalescence and breakup models of Liao et al. (2015)
Patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
This commit is contained in:
@ -51,6 +51,7 @@ $(coalescenceModels)/CoulaloglouTavlarides/CoulaloglouTavlarides.C
|
||||
$(coalescenceModels)/DahnekeInterpolation/DahnekeInterpolation.C
|
||||
$(coalescenceModels)/hydrodynamic/hydrodynamic.C
|
||||
$(coalescenceModels)/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C
|
||||
$(coalescenceModels)/LiaoCoalescence/LiaoCoalescence.C
|
||||
$(coalescenceModels)/Luo/Luo.C
|
||||
$(coalescenceModels)/PrinceBlanch/PrinceBlanch.C
|
||||
$(coalescenceModels)/turbulentShear/turbulentShear.C
|
||||
@ -58,6 +59,8 @@ $(coalescenceModels)/turbulentShear/turbulentShear.C
|
||||
binaryBreakupModels = populationBalanceModel/binaryBreakupModels
|
||||
$(binaryBreakupModels)/binaryBreakupModel/binaryBreakupModel.C
|
||||
$(binaryBreakupModels)/LehrMilliesMewes/LehrMilliesMewes.C
|
||||
$(binaryBreakupModels)/Liao/LiaoBase.C
|
||||
$(binaryBreakupModels)/Liao/Liao.C
|
||||
$(binaryBreakupModels)/LuoSvendsen/LuoSvendsen.C
|
||||
$(binaryBreakupModels)/powerLawUniformBinary/powerLawUniformBinary.C
|
||||
|
||||
|
||||
@ -0,0 +1,161 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "Liao.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "fvcGrad.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace binaryBreakupModels
|
||||
{
|
||||
defineTypeNameAndDebug(Liao, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
binaryBreakupModel,
|
||||
Liao,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using Foam::constant::mathematical::pi;
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::binaryBreakupModels::Liao::Liao
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
binaryBreakupModel(popBal, dict),
|
||||
LiaoBase(popBal, dict),
|
||||
BTurb_(dimensionedScalar::lookupOrDefault("BTurb", dict, dimless, 1)),
|
||||
BShear_(dimensionedScalar::lookupOrDefault("BShear", dict, dimless, 1)),
|
||||
BEddy_(dimensionedScalar::lookupOrDefault("BEddy", dict, dimless, 1)),
|
||||
BFric_(dimensionedScalar::lookupOrDefault("BFric", dict, dimless, 0.25)),
|
||||
turbulence_(dict.lookup("turbulence")),
|
||||
laminarShear_(dict.lookup("laminarShear")),
|
||||
turbulentShear_(dict.lookup("turbulentShear")),
|
||||
interfacialFriction_(dict.lookup("interfacialFriction"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diameterModels::binaryBreakupModels::Liao::precompute()
|
||||
{
|
||||
LiaoBase::precompute();
|
||||
}
|
||||
|
||||
|
||||
void Foam::diameterModels::binaryBreakupModels::Liao::
|
||||
addToBinaryBreakupRate
|
||||
(
|
||||
volScalarField& binaryBreakupRate,
|
||||
const label i,
|
||||
const label j
|
||||
)
|
||||
{
|
||||
const phaseModel& continuousPhase = popBal_.continuousPhase();
|
||||
const sizeGroup& fi = popBal_.sizeGroups()[i];
|
||||
const sizeGroup& fj = popBal_.sizeGroups()[j];
|
||||
|
||||
dimensionedScalar dk(cbrt(pow3(fj.dSph()) - pow3(fi.dSph())));
|
||||
|
||||
const volScalarField tauCrit1
|
||||
(
|
||||
6*popBal_.sigmaWithContinuousPhase(fj.phase())/fj.dSph()
|
||||
*(sqr(fi.dSph()/fj.dSph()) + sqr(dk/fj.dSph()) - 1)
|
||||
);
|
||||
|
||||
const volScalarField tauCrit2
|
||||
(
|
||||
popBal_.sigmaWithContinuousPhase(fj.phase())/min(dk, fi.dSph())
|
||||
);
|
||||
|
||||
const volScalarField tauCrit(max(tauCrit1, tauCrit2));
|
||||
|
||||
if (turbulence_)
|
||||
{
|
||||
const volScalarField tauTurb
|
||||
(
|
||||
pos(fj.dSph() - kolmogorovLengthScale_)*BTurb_*continuousPhase.rho()
|
||||
*sqr(cbrt(popBal_.continuousTurbulence().epsilon()*fj.dSph()))
|
||||
);
|
||||
|
||||
binaryBreakupRate +=
|
||||
pos(tauTurb - tauCrit)*1/fj.dSph()
|
||||
*sqrt(mag(tauTurb - tauCrit)/continuousPhase.rho())/fj.x();
|
||||
}
|
||||
|
||||
if (laminarShear_)
|
||||
{
|
||||
const volScalarField tauShear
|
||||
(
|
||||
BShear_*continuousPhase.thermo().mu()*shearStrainRate_
|
||||
);
|
||||
|
||||
binaryBreakupRate +=
|
||||
pos(tauShear - tauCrit)*1/fj.dSph()
|
||||
*sqrt(mag(tauShear - tauCrit)/continuousPhase.rho())/fj.x();
|
||||
}
|
||||
|
||||
if (turbulentShear_)
|
||||
{
|
||||
const volScalarField tauEddy
|
||||
(
|
||||
pos0(kolmogorovLengthScale_ - fj.dSph())
|
||||
*BEddy_*continuousPhase.thermo().mu()*eddyStrainRate_
|
||||
);
|
||||
|
||||
binaryBreakupRate +=
|
||||
pos(tauEddy - tauCrit)*1/fj.dSph()
|
||||
*sqrt(mag(tauEddy - tauCrit)/continuousPhase.rho())/fj.x();
|
||||
}
|
||||
|
||||
if (interfacialFriction_)
|
||||
{
|
||||
const volScalarField tauFric
|
||||
(
|
||||
BFric_*0.5*continuousPhase.rho()*sqr(uTerminal_[j])*Cd_[j]
|
||||
);
|
||||
|
||||
binaryBreakupRate +=
|
||||
pos(tauFric - tauCrit)*1/fj.dSph()
|
||||
*sqrt(mag(tauFric - tauCrit)/continuousPhase.rho())/fj.x();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,159 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::diameterModels::binaryBreakupModels::Liao
|
||||
|
||||
Description
|
||||
Bubble breakup model of Liao et al. (2015). The terminal velocities and drag
|
||||
coefficients are computed by an iterative procedure based on the drag model
|
||||
of Ishii and Zuber (1979) at the beginning of the simulation, assuming
|
||||
single bubbles rising in quiescent liquid.
|
||||
|
||||
References:
|
||||
\verbatim
|
||||
Liao, Y.; Rzehak, R.; Lucas, D.; Krepper, E. (2015).
|
||||
Baseline closure models for dispersed bubbly flow: Bubble coalescence
|
||||
and breakup.
|
||||
Chemical Engineering Science, 122, 336-349.
|
||||
|
||||
Ishii, M., & Zuber, N. (1979).
|
||||
Drag coefficient and relative velocity in bubbly, droplet or particulate
|
||||
flows.
|
||||
AIChE Journal, 25(5), 843-855.
|
||||
\endverbatim
|
||||
|
||||
Usage
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
BTurb | coefficient BTurb | no | 1.0
|
||||
BShear | coefficient Bbuoy | no | 1.0
|
||||
BEddy | coefficient BEddy | no | 1.0
|
||||
BFric | coefficient Bwake | no | 1.0
|
||||
turbulence | Switch for turbulence | yes | none
|
||||
laminarShear | Switch for laminar shear | yes | none
|
||||
turbulentShear | Switch for eddies | yes | none
|
||||
friction | Switch for friction | yes | none
|
||||
\endtable
|
||||
|
||||
SourceFiles
|
||||
Liao.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef Liao_H
|
||||
#define Liao_H
|
||||
|
||||
#include "binaryBreakupModel.H"
|
||||
#include "LiaoBase.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace binaryBreakupModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class Liao Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class Liao
|
||||
:
|
||||
public binaryBreakupModel,
|
||||
public LiaoBase
|
||||
{
|
||||
// Private Data
|
||||
|
||||
//- Optional coefficient BTurb
|
||||
dimensionedScalar BTurb_;
|
||||
|
||||
//- Optional coefficient BShear
|
||||
dimensionedScalar BShear_;
|
||||
|
||||
//- Optional coefficient BEddy
|
||||
dimensionedScalar BEddy_;
|
||||
|
||||
//- Optional coefficient BFric
|
||||
dimensionedScalar BFric_;
|
||||
|
||||
//- Switch for considering turbulent velocity fluctuation
|
||||
Switch turbulence_;
|
||||
|
||||
//- Switch for considering velocity gradients in the bulk
|
||||
Switch laminarShear_;
|
||||
|
||||
//- Switch for considering eddies
|
||||
Switch turbulentShear_;
|
||||
|
||||
//- Switch for considering interfacial friction
|
||||
Switch interfacialFriction_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("Liao");
|
||||
|
||||
// Constructor
|
||||
|
||||
Liao
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~Liao()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Precompute diameter independent expressions
|
||||
virtual void precompute();
|
||||
|
||||
//- Add to binary breakupRate
|
||||
virtual void addToBinaryBreakupRate
|
||||
(
|
||||
volScalarField& binaryBreakupRate,
|
||||
const label i,
|
||||
const label j
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace binaryBreakupModels
|
||||
} // End namespace diameterModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,221 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "LiaoBase.H"
|
||||
#include "fvcGrad.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::LiaoBase::LiaoBase
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
populationBalance_(popBal),
|
||||
kolmogorovLengthScale_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kolmogorovLengthScale",
|
||||
populationBalance_.time().timeName(),
|
||||
populationBalance_.mesh()
|
||||
),
|
||||
populationBalance_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"kolmogorovLengthScale",
|
||||
dimLength,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
shearStrainRate_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"shearStrainRate",
|
||||
populationBalance_.time().timeName(),
|
||||
populationBalance_.mesh()
|
||||
),
|
||||
populationBalance_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"shearStrainRate",
|
||||
dimVelocity/dimLength,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
eddyStrainRate_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"eddyStrainRate",
|
||||
populationBalance_.time().timeName(),
|
||||
populationBalance_.mesh()
|
||||
),
|
||||
populationBalance_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"eddyStrainRate",
|
||||
dimVelocity/dimLength,
|
||||
Zero
|
||||
)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diameterModels::LiaoBase::precompute()
|
||||
{
|
||||
kolmogorovLengthScale_ =
|
||||
pow025
|
||||
(
|
||||
pow3(populationBalance_.continuousPhase().thermo().nu())
|
||||
/populationBalance_.continuousTurbulence().epsilon()
|
||||
);
|
||||
|
||||
shearStrainRate_ =
|
||||
sqrt(2.0)
|
||||
*mag(symm(fvc::grad(populationBalance_.continuousPhase().U())));
|
||||
|
||||
eddyStrainRate_ =
|
||||
sqrt
|
||||
(
|
||||
populationBalance_.continuousPhase().rho()
|
||||
*populationBalance_.continuousTurbulence().epsilon()
|
||||
/populationBalance_.continuousPhase().thermo().mu()
|
||||
);
|
||||
|
||||
if (uTerminal_.empty())
|
||||
{
|
||||
const fvMesh& mesh = populationBalance_.mesh();
|
||||
const uniformDimensionedVectorField& g =
|
||||
mesh.lookupObject<uniformDimensionedVectorField>("g");
|
||||
|
||||
const dimensionedScalar nuc
|
||||
(
|
||||
"nuc",
|
||||
dimViscosity,
|
||||
gAverage(populationBalance_.continuousPhase().thermo().nu()())
|
||||
);
|
||||
|
||||
const dimensionedScalar rhoc
|
||||
(
|
||||
"rhoc",
|
||||
dimDensity,
|
||||
gAverage(populationBalance_.continuousPhase().rho()())
|
||||
);
|
||||
|
||||
const dimensionedScalar rhod
|
||||
(
|
||||
"rhod",
|
||||
dimDensity,
|
||||
gAverage(populationBalance_.sizeGroups()[1].phase().rho()())
|
||||
);
|
||||
|
||||
const dimensionedScalar sigma
|
||||
(
|
||||
"sigma",
|
||||
dimForce/dimLength,
|
||||
gAverage
|
||||
(
|
||||
populationBalance_.sigmaWithContinuousPhase
|
||||
(
|
||||
populationBalance_.sizeGroups()[1].phase()
|
||||
)()
|
||||
)
|
||||
);
|
||||
|
||||
for(int m = 0; m < populationBalance_.sizeGroups().size(); m++)
|
||||
{
|
||||
const sizeGroup& f = populationBalance_.sizeGroups()[m];
|
||||
|
||||
dimensionedScalar uTerminal("uTerminal", dimVelocity, 0.2);
|
||||
dimensionedScalar Cd("Cd", dimless, 0.44);
|
||||
dimensionedScalar CdEllipse("CdEllipse", dimless, 1);
|
||||
|
||||
dimensionedScalar Re(uTerminal*f.dSph()/nuc);
|
||||
const dimensionedScalar Eo
|
||||
(
|
||||
mag(g)*mag(rhoc - rhod)*sqr(f.dSph())/sigma
|
||||
);
|
||||
|
||||
dimensionedScalar F("F", dimForce/dimArea, 1);
|
||||
dimensionedScalar dF("dF", dimForce/dimArea/dimVelocity, 1);
|
||||
const dimensionedScalar uTerminalX("uTerminalX", dimVelocity, 1e-5);
|
||||
dimensionedScalar ReX("ReX", dimless, Re.value());
|
||||
dimensionedScalar CdX("CdX", dimless, Cd.value());
|
||||
dimensionedScalar dCd("dCd", Cd.dimensions()/dimVelocity, Zero);
|
||||
|
||||
int n = 0;
|
||||
|
||||
while(mag(F.value()) >= 1.0e-05 && n++ <= 20)
|
||||
{
|
||||
Re = uTerminal*f.dSph()/nuc;
|
||||
|
||||
Cd =
|
||||
pos0(1000 - Re)*24/Re*(1 + 0.1*pow(Re, 0.75))
|
||||
+ neg(1000 - Re)*0.44;
|
||||
|
||||
CdEllipse = 0.6666*sqrt(Eo);
|
||||
|
||||
Cd =
|
||||
pos0(CdEllipse - Cd)
|
||||
*min(CdEllipse.value(), 8.0/3.0)
|
||||
+ neg(CdEllipse - Cd)*Cd;
|
||||
|
||||
F =
|
||||
4.0/3.0*(rhoc - rhod)*mag(g)*f.dSph()
|
||||
- rhoc*Cd*sqr(uTerminal);
|
||||
|
||||
ReX = (uTerminal + uTerminalX)*f.dSph()/nuc;
|
||||
|
||||
CdX =
|
||||
pos0(1000 - ReX)
|
||||
*24/ReX*(1 + 0.1*pow(ReX, 0.75))
|
||||
+ neg(1000 - ReX)*0.44;
|
||||
|
||||
CdX =
|
||||
pos0(CdEllipse - CdX)
|
||||
*min(CdEllipse.value(), 2.66667)
|
||||
+ neg(CdEllipse - CdX)*CdX;
|
||||
|
||||
dCd = (CdX - Cd)/uTerminalX;
|
||||
|
||||
dF = -(2*rhoc*uTerminal*Cd + rhoc*sqr(uTerminal)*dCd);
|
||||
|
||||
uTerminal -= F/dF;
|
||||
}
|
||||
|
||||
uTerminal_.append(new dimensionedScalar("uTerminal", uTerminal));
|
||||
|
||||
Cd_.append(new dimensionedScalar("Cd", Cd));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,118 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::diameterModels::LiaoBase
|
||||
|
||||
Description
|
||||
Base class for coalescence and breakup models of Liao et al. (2015).
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Liao, Y.; Rzehak, R.; Lucas, D.; Krepper, E. (2015).
|
||||
Baseline closure models for dispersed bubbly flow:
|
||||
Bubble coalescence and breakup.
|
||||
Chemical Engineering Science, 122, 336-349.
|
||||
\endverbatim
|
||||
|
||||
Usage
|
||||
|
||||
SourceFiles
|
||||
LiaoBase.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef LiaoBase_H
|
||||
#define LiaoBase_H
|
||||
|
||||
#include "populationBalanceModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class LiaoBase Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class LiaoBase
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected Data
|
||||
|
||||
//- Reference to the populationBalanceModel
|
||||
const populationBalanceModel& populationBalance_;
|
||||
|
||||
//- Kolmogorov length scale
|
||||
volScalarField kolmogorovLengthScale_;
|
||||
|
||||
//- Shear strain rate
|
||||
volScalarField shearStrainRate_;
|
||||
|
||||
//- Eddy strain rate
|
||||
volScalarField eddyStrainRate_;
|
||||
|
||||
//- Terminal velocities
|
||||
PtrList<dimensionedScalar> uTerminal_;
|
||||
|
||||
//- Drag coefficients
|
||||
PtrList<dimensionedScalar> Cd_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
|
||||
LiaoBase
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~LiaoBase()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Precompute diameter independent expressions
|
||||
virtual void precompute();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace diameterModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,309 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "LiaoCoalescence.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "fvcGrad.H"
|
||||
#include "dragModel.H"
|
||||
#include "phaseSystem.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
defineTypeNameAndDebug(LiaoCoalescence, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
coalescenceModel,
|
||||
LiaoCoalescence,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using Foam::constant::mathematical::pi;
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::coalescenceModels::LiaoCoalescence::
|
||||
LiaoCoalescence
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
coalescenceModel(popBal, dict),
|
||||
LiaoBase(popBal, dict),
|
||||
PMax_(dimensionedScalar::lookupOrDefault("PMax", dict, dimless, 0.8)),
|
||||
AH_(dimensionedScalar::lookupOrDefault("AH", dict, dimEnergy, 3.7e-20)),
|
||||
CEff_(dimensionedScalar::lookupOrDefault("CEff", dict, dimless, 2.5)),
|
||||
CTurb_(dimensionedScalar::lookupOrDefault("CTurb", dict, dimless, 1)),
|
||||
CBuoy_(dimensionedScalar::lookupOrDefault("CBuoy", dict, dimless, 1)),
|
||||
CShear_(dimensionedScalar::lookupOrDefault("CShear", dict, dimless, 1)),
|
||||
CEddy_(dimensionedScalar::lookupOrDefault("CEddy", dict, dimless, 1)),
|
||||
CWake_(dimensionedScalar::lookupOrDefault("CWake", dict, dimless, 1)),
|
||||
turbulence_(dict.lookup("turbulence")),
|
||||
buoyancy_(dict.lookup("buoyancy")),
|
||||
laminarShear_(dict.lookup("laminarShear")),
|
||||
eddyCapture_(dict.lookup("eddyCapture")),
|
||||
wakeEntrainment_(dict.lookup("wakeEntrainment")),
|
||||
CPack_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"CPack",
|
||||
popBal_.time().timeName(),
|
||||
popBal_.mesh()
|
||||
),
|
||||
popBal_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"CPack",
|
||||
dimless,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
CPackMax_
|
||||
(
|
||||
dimensionedScalar::lookupOrDefault("CPackMax", dict, dimless, 1e5)
|
||||
),
|
||||
dCrit_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"dCrit",
|
||||
popBal_.time().timeName(),
|
||||
popBal_.mesh()
|
||||
),
|
||||
popBal_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"dCrit",
|
||||
dimLength,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
uRelTurb_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"uRelTurb",
|
||||
popBal_.time().timeName(),
|
||||
popBal_.mesh()
|
||||
),
|
||||
popBal_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"uRelTurb",
|
||||
dimVelocity,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
uRelBuoy_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"uRelBuoy",
|
||||
popBal_.time().timeName(),
|
||||
popBal_.mesh()
|
||||
),
|
||||
popBal_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"uRelBuoy",
|
||||
dimVelocity,
|
||||
Zero
|
||||
)
|
||||
),
|
||||
uRelShear_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"uRelShear",
|
||||
popBal_.time().timeName(),
|
||||
popBal_.mesh()
|
||||
),
|
||||
popBal_.mesh(),
|
||||
dimensionedScalar
|
||||
(
|
||||
"uRelShear",
|
||||
dimVelocity,
|
||||
Zero
|
||||
)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diameterModels::coalescenceModels::LiaoCoalescence::precompute()
|
||||
{
|
||||
LiaoBase::precompute();
|
||||
|
||||
CPack_ = min(PMax_/max(PMax_ - popBal_.alphas(), SMALL), CPackMax_);
|
||||
|
||||
const uniformDimensionedVectorField& g =
|
||||
popBal_.mesh().lookupObject<uniformDimensionedVectorField>("g");
|
||||
|
||||
dCrit_ =
|
||||
4*sqrt
|
||||
(
|
||||
popBal_.sigmaWithContinuousPhase(popBal_.sizeGroups()[1].phase())()
|
||||
/(mag(g)*(popBal_.continuousPhase().rho()
|
||||
- popBal_.sizeGroups()[1].phase().rho()()))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Foam::diameterModels::coalescenceModels::LiaoCoalescence::
|
||||
addToCoalescenceRate
|
||||
(
|
||||
volScalarField& coalescenceRate,
|
||||
const label i,
|
||||
const label j
|
||||
)
|
||||
{
|
||||
const phaseModel& continuousPhase = popBal_.continuousPhase();
|
||||
const sizeGroup& fi = popBal_.sizeGroups()[i];
|
||||
const sizeGroup& fj = popBal_.sizeGroups()[j];
|
||||
|
||||
dimensionedScalar dEq(2*fi.dSph()*fj.dSph()/(fi.dSph() + fj.dSph()));
|
||||
dimensionedScalar Aij(pi*0.25*sqr(fi.dSph() + fj.dSph()));
|
||||
|
||||
if (turbulence_)
|
||||
{
|
||||
uRelTurb_ =
|
||||
CTurb_*sqrt(2.0)
|
||||
*sqrt(sqr(cbrt(fi.dSph())) + sqr(cbrt(fj.dSph())))
|
||||
*cbrt(popBal_.continuousTurbulence().epsilon());
|
||||
}
|
||||
|
||||
if (buoyancy_)
|
||||
{
|
||||
uRelBuoy_ = CBuoy_*mag(uTerminal_[i] - uTerminal_[j]);
|
||||
}
|
||||
|
||||
if (laminarShear_)
|
||||
{
|
||||
uRelShear_ = CShear_*0.5/pi*(fi.dSph() + fj.dSph())*shearStrainRate_;
|
||||
}
|
||||
|
||||
const volScalarField collisionEfficiency
|
||||
(
|
||||
neg(kolmogorovLengthScale_ - (fi.dSph() + fj.dSph()))
|
||||
*exp
|
||||
(
|
||||
- CEff_*sqrt
|
||||
(
|
||||
continuousPhase.rho()*dEq
|
||||
/popBal_.sigmaWithContinuousPhase(fi.phase())
|
||||
*sqr(max(uRelTurb_, max(uRelBuoy_, uRelShear_)))
|
||||
)
|
||||
)
|
||||
+ pos0(kolmogorovLengthScale_ - (fi.dSph() + fj.dSph()))
|
||||
*exp
|
||||
(
|
||||
- 3*continuousPhase.thermo().mu()*dEq*eddyStrainRate_
|
||||
/(4*popBal_.sigmaWithContinuousPhase(fi.phase()))
|
||||
*log
|
||||
(
|
||||
cbrt
|
||||
(
|
||||
pi*popBal_.sigmaWithContinuousPhase(fi.phase())*sqr(dEq)
|
||||
/(32*AH_)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if (turbulence_)
|
||||
{
|
||||
coalescenceRate +=
|
||||
neg(kolmogorovLengthScale_ - (fi.dSph() + fj.dSph()))
|
||||
*CPack_*Aij*uRelTurb_*collisionEfficiency;
|
||||
}
|
||||
|
||||
if (buoyancy_)
|
||||
{
|
||||
coalescenceRate += CPack_*0.5*Aij*uRelBuoy_*collisionEfficiency;
|
||||
}
|
||||
|
||||
if (laminarShear_)
|
||||
{
|
||||
coalescenceRate += CPack_*0.5*Aij*uRelShear_*collisionEfficiency;
|
||||
}
|
||||
|
||||
if (eddyCapture_)
|
||||
{
|
||||
const volScalarField uRelEddy
|
||||
(
|
||||
CEddy_*0.5/pi*(fi.dSph() + fj.dSph())*eddyStrainRate_
|
||||
);
|
||||
|
||||
coalescenceRate +=
|
||||
pos0(kolmogorovLengthScale_ - (fi.dSph() + fj.dSph()))
|
||||
*CPack_*0.5*Aij*uRelEddy*collisionEfficiency;
|
||||
}
|
||||
|
||||
if (wakeEntrainment_)
|
||||
{
|
||||
const dimensionedScalar uRelWakeI
|
||||
(
|
||||
CWake_*uTerminal_[i]*cbrt(Cd_[i])
|
||||
);
|
||||
|
||||
const dimensionedScalar uRelWakeJ
|
||||
(
|
||||
CWake_*uTerminal_[j]*cbrt(Cd_[j])
|
||||
);
|
||||
|
||||
coalescenceRate +=
|
||||
CPack_*0.125*pi
|
||||
*(
|
||||
sqr(fi.dSph())*uRelWakeI
|
||||
*pos0(fi.dSph() - 0.5*dCrit_)
|
||||
*(
|
||||
pow6(fi.dSph() - 0.5*dCrit_)
|
||||
/(pow6(fi.dSph() - 0.5*dCrit_) + pow6(0.5*dCrit_))
|
||||
)
|
||||
+ sqr(fj.dSph())*uRelWakeJ
|
||||
*pos0(fj.dSph() - 0.5*dCrit_)
|
||||
*(
|
||||
pow6(fj.dSph() - 0.5*dCrit_)
|
||||
/(pow6(fj.dSph() - 0.5*dCrit_) + pow6(0.5*dCrit_))
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,207 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::diameterModels::coalescenceModels::LiaoCoalescence
|
||||
|
||||
Description
|
||||
Bubble coalescence model of Liao et al. (2015). The terminal velocities and
|
||||
drag coefficients are computed by an iterative procedure based on the drag
|
||||
model of Ishii and Zuber (1979) at the beginning of the simulation, assuming
|
||||
single bubbles rising in quiescent liquid.
|
||||
|
||||
Note that the original article contains a mistake concerning the value of
|
||||
the coefficient CEff. A value of 2.5 instead of 5.0 should be used when
|
||||
following the Weber number definition in the paper.
|
||||
|
||||
References:
|
||||
\verbatim
|
||||
Liao, Y.; Rzehak, R.; Lucas, D.; Krepper, E. (2015).
|
||||
Baseline closure models for dispersed bubbly flow: Bubble coalescence
|
||||
and breakup.
|
||||
Chemical Engineering Science, 122, 336-349.
|
||||
|
||||
Liao, Y., Rzehak, R., Lucas, D., & Krepper, E. (2021).
|
||||
Corrigendum to "Baseline closure model for dispersed bubbly flow:
|
||||
Bubble coalescence and breakup" [Chem. Eng. Sci. 122 (2015) 336–349].
|
||||
Chemical Engineering Science, 241, 116708.
|
||||
|
||||
Ishii, M., & Zuber, N. (1979).
|
||||
Drag coefficient and relative velocity in bubbly, droplet or particulate
|
||||
flows.
|
||||
AIChE Journal, 25(5), 843-855.
|
||||
\endverbatim
|
||||
|
||||
Usage
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
PMax | Maximum packing limit | no | 0.8
|
||||
CPackMax | Maximum CPack coefficient | no | 1.0e5
|
||||
AH | Hamaker constant | no | 3.7e-20
|
||||
CEff | coefficient CEff | no | 2.5
|
||||
CTurb | coefficient CTurb | no | 1.0
|
||||
CBuoy | coefficient CBuoy | no | 1.0
|
||||
CShear | coefficient CShear | no | 1.0
|
||||
CEddy | coefficient CEddy | no | 1.0
|
||||
CWake | coefficient CWake | no | 1.0
|
||||
turbulence | Switch for turbulence | yes | none
|
||||
buoyancy | Switch for buoyancy | yes | none
|
||||
laminarShear | Switch for laminar shear | yes | none
|
||||
eddyCapture | Switch for eddy capture | yes | none
|
||||
wake | Switch for wake entrainment | yes | none
|
||||
\endtable
|
||||
|
||||
SourceFiles
|
||||
LiaoCoalescence.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef LiaoCoalescence_H
|
||||
#define LiaoCoalescence_H
|
||||
|
||||
#include "coalescenceModel.H"
|
||||
#include "LiaoBase.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class LiaoCoalescence Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class LiaoCoalescence
|
||||
:
|
||||
public coalescenceModel,
|
||||
public LiaoBase
|
||||
{
|
||||
// Private Data
|
||||
|
||||
//- Maximum packing limit of bubbles
|
||||
dimensionedScalar PMax_;
|
||||
|
||||
//- Hamaker constant AH
|
||||
dimensionedScalar AH_;
|
||||
|
||||
//- Optional coefficient CEff
|
||||
dimensionedScalar CEff_;
|
||||
|
||||
//- Optional coefficient CTurb
|
||||
dimensionedScalar CTurb_;
|
||||
|
||||
//- Optional coefficient CBuoy
|
||||
dimensionedScalar CBuoy_;
|
||||
|
||||
//- Optional coefficient CShear
|
||||
dimensionedScalar CShear_;
|
||||
|
||||
//- Optional coefficient CEddy
|
||||
dimensionedScalar CEddy_;
|
||||
|
||||
//- Optional coefficient CWake
|
||||
dimensionedScalar CWake_;
|
||||
|
||||
//- Switch for turbulent collisions
|
||||
Switch turbulence_;
|
||||
|
||||
//- Switch for buoyancy-induced collisions
|
||||
Switch buoyancy_;
|
||||
|
||||
//- Switch for velocity gradient-induced collisions
|
||||
Switch laminarShear_;
|
||||
|
||||
//- Switch for eddy capture-induced collisions
|
||||
Switch eddyCapture_;
|
||||
|
||||
//- Switch for wake entrainment-induced collisions
|
||||
Switch wakeEntrainment_;
|
||||
|
||||
//- Coefficient containing maximum packing limit
|
||||
volScalarField CPack_;
|
||||
|
||||
//- Limiter for the CPack coefficient
|
||||
dimensionedScalar CPackMax_;
|
||||
|
||||
//- Critical diameter
|
||||
volScalarField dCrit_;
|
||||
|
||||
//- Relative velocity for turbulent collisions
|
||||
volScalarField uRelTurb_;
|
||||
|
||||
//- Relative velocity for buoyancy-induced collisions
|
||||
volScalarField uRelBuoy_;
|
||||
|
||||
//- Relative velocity for shear-induced collisions
|
||||
volScalarField uRelShear_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("Liao");
|
||||
|
||||
// Constructor
|
||||
|
||||
LiaoCoalescence
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~LiaoCoalescence()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Precompute diameter independent expressions
|
||||
virtual void precompute();
|
||||
|
||||
//- Add to coalescenceRate
|
||||
virtual void addToCoalescenceRate
|
||||
(
|
||||
volScalarField& coalescenceRate,
|
||||
const label i,
|
||||
const label j
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace coalescenceModels
|
||||
} // End namespace diameterModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user