reactingEulerFoam: populationBalanceModel: Added breakup and coalescence models
Added the breakup and coalescence models of Lehr et al. (2002), and the coalescence model of Luo (1993). Patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
This commit is contained in:
@ -22,10 +22,13 @@ populationBalanceModel/coalescenceModels/coalescenceModel/coalescenceModel.C
|
||||
populationBalanceModel/coalescenceModels/constantCoalescence/constantCoalescence.C
|
||||
populationBalanceModel/coalescenceModels/CoulaloglouTavlaridesCoalescence/CoulaloglouTavlaridesCoalescence.C
|
||||
populationBalanceModel/coalescenceModels/hydrodynamic/hydrodynamic.C
|
||||
populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C
|
||||
populationBalanceModel/coalescenceModels/Luo/Luo.C
|
||||
populationBalanceModel/coalescenceModels/PrinceBlanch/PrinceBlanch.C
|
||||
|
||||
populationBalanceModel/binaryBreakupModels/binaryBreakupModel/binaryBreakupModel.C
|
||||
populationBalanceModel/binaryBreakupModels/LuoSvendsen/LuoSvendsen.C
|
||||
populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.C
|
||||
populationBalanceModel/binaryBreakupModels/powerLawUniformBinary/powerLawUniformBinary.C
|
||||
|
||||
populationBalanceModel/breakupModels/breakupModel/breakupModel.C
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2015-2018 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2015-2019 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -357,10 +357,22 @@ public:
|
||||
|
||||
// Sub-model lookup
|
||||
|
||||
//- Check availability of a sub model for a given phase pair
|
||||
template<class modelType>
|
||||
bool foundSubModel(const phasePair& key) const;
|
||||
|
||||
//- Return a sub model between a phase pair
|
||||
template<class modelType>
|
||||
const modelType& lookupSubModel(const phasePair& key) const;
|
||||
|
||||
//- Check availability of a sub model between two phases
|
||||
template<class modelType>
|
||||
bool foundSubModel
|
||||
(
|
||||
const phaseModel& dispersed,
|
||||
const phaseModel& continuous
|
||||
) const;
|
||||
|
||||
//- Return a sub model between two phases
|
||||
template<class modelType>
|
||||
const modelType& lookupSubModel
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2015-2018 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2015-2019 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -370,6 +370,44 @@ void Foam::phaseSystem::fillFields
|
||||
}
|
||||
|
||||
|
||||
template<class modelType>
|
||||
bool Foam::phaseSystem::foundSubModel(const phasePair& key) const
|
||||
{
|
||||
const word name(IOobject::groupName(modelType::typeName, key.name()));
|
||||
|
||||
if (key.ordered())
|
||||
{
|
||||
if (mesh().foundObject<modelType>(name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if
|
||||
(
|
||||
mesh().foundObject<modelType>(name)
|
||||
||
|
||||
mesh().foundObject<modelType>
|
||||
(
|
||||
IOobject::groupName(modelType::typeName, key.otherName())
|
||||
)
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class modelType>
|
||||
const modelType& Foam::phaseSystem::lookupSubModel(const phasePair& key) const
|
||||
{
|
||||
@ -390,6 +428,17 @@ const modelType& Foam::phaseSystem::lookupSubModel(const phasePair& key) const
|
||||
}
|
||||
|
||||
|
||||
template<class modelType>
|
||||
bool Foam::phaseSystem::foundSubModel
|
||||
(
|
||||
const phaseModel& dispersed,
|
||||
const phaseModel& continuous
|
||||
) const
|
||||
{
|
||||
return foundSubModel<modelType>(orderedPhasePair(dispersed, continuous));
|
||||
}
|
||||
|
||||
|
||||
template<class modelType>
|
||||
const modelType& Foam::phaseSystem::lookupSubModel
|
||||
(
|
||||
|
||||
@ -0,0 +1,112 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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 "LehrMilliesMewes.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "phaseCompressibleTurbulenceModel.H"
|
||||
#include "mathematicalConstants.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace binaryBreakupModels
|
||||
{
|
||||
defineTypeNameAndDebug(LehrMilliesMewes, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
binaryBreakupModel,
|
||||
LehrMilliesMewes,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using Foam::constant::mathematical::pi;
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::binaryBreakupModels::LehrMilliesMewes::LehrMilliesMewes
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
binaryBreakupModel(popBal, dict)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diameterModels::binaryBreakupModels::LehrMilliesMewes::
|
||||
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];
|
||||
|
||||
volScalarField L
|
||||
(
|
||||
pow
|
||||
(
|
||||
popBal_.sigmaWithContinuousPhase(fj.phase())/continuousPhase.rho(),
|
||||
3.0/5.0
|
||||
)
|
||||
/pow(popBal_.continuousTurbulence().epsilon(), 2.0/5.0)
|
||||
);
|
||||
|
||||
// Reset of dimension to pure length to avoid problems in transcendental
|
||||
// functions due to small exponents
|
||||
L.dimensions().reset(dimLength);
|
||||
|
||||
const volScalarField T
|
||||
(
|
||||
pow
|
||||
(
|
||||
popBal_.sigmaWithContinuousPhase(fj.phase())/continuousPhase.rho(),
|
||||
2.0/5.0
|
||||
)
|
||||
/pow(popBal_.continuousTurbulence().epsilon(), 3.0/5.0)
|
||||
);
|
||||
|
||||
binaryBreakupRate +=
|
||||
0.5*pow(fj.d()/L, 5.0/3.0)
|
||||
*exp(-sqrt(2.0)/pow3(fj.d()/L))
|
||||
*6.0/pow(pi, 1.5)/pow3(fi.d()/L)
|
||||
*exp(-9.0/4.0*sqr(log(pow(2.0, 0.4)*fi.d()/L)))
|
||||
/max(1.0 + erf(1.5*log(pow(2.0, 1.0/15.0)*fj.d()/L)), SMALL)
|
||||
/(T*pow3(L));
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,149 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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::LehrMilliesMewes
|
||||
|
||||
Description
|
||||
Model of Lehr et al. (2002). The breakup rate is calculated by
|
||||
|
||||
\f[
|
||||
0.5 d_j^{*^{5/3}} \mathrm{exp}\left(-\frac{\sqrt{2}}{d_j^{*^{3}}}\right)
|
||||
\frac{6}{\pi^{3/2}d_i^{*^{3}}}
|
||||
\mathrm{exp}
|
||||
\left(
|
||||
- \frac{9}{4}\left[\mathrm{ln}\left(2^{2/5} d_i^{*}\right)\right]^{2}
|
||||
\right)
|
||||
\left(
|
||||
1
|
||||
+ \mathrm{erf}
|
||||
\left[
|
||||
\frac{3}{2}\mathrm{ln} \left(2^{1/15} d_j^{*}\right)
|
||||
\right]
|
||||
\right)^{-1}
|
||||
\frac{1}{L^{3}T}
|
||||
\f]
|
||||
|
||||
with the time scale
|
||||
|
||||
\f[
|
||||
T = \left(\frac{\sigma}{\rho_c}\right)^{2/5} \frac{1}{\epsilon_c^{3/5}}
|
||||
\f]
|
||||
|
||||
the dimensionless diameter
|
||||
|
||||
\f[
|
||||
d^{*} = \frac{d}{L}
|
||||
\f]
|
||||
|
||||
and the length scale
|
||||
|
||||
\f[
|
||||
L = \left(\frac{\sigma}{\rho_c}\right)^{3/5} \frac{1}{\epsilon_c^{2/5}}
|
||||
\f]
|
||||
|
||||
\vartable
|
||||
\rho_c | Density of continuous phase [kg/m3]
|
||||
\sigma | Surface tension [N/m]
|
||||
\epsilon_c | Continuous phase turbulent dissipation rate [m2/s3]
|
||||
d_i | Diameter of daughter bubble i [m]
|
||||
d_j | Diameter of mother bubble j [m]
|
||||
\endvartable
|
||||
|
||||
References:
|
||||
\verbatim
|
||||
Lehr, F., Millies, M., & Mewes, D. (2002).
|
||||
Bubble‐size distributions and flow fields in bubble columns.
|
||||
AIChE Journal, 48(11), 2426-2443.
|
||||
Eq. 12-16, p. 2429-2430.
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
LehrMilliesMewes.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef LehrMilliesMewes_H
|
||||
#define LehrMilliesMewes_H
|
||||
|
||||
#include "binaryBreakupModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace binaryBreakupModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class LehrMilliesMewes Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class LehrMilliesMewes
|
||||
:
|
||||
public binaryBreakupModel
|
||||
{
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("LehrMilliesMewes");
|
||||
|
||||
// Constructor
|
||||
|
||||
LehrMilliesMewes
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~LehrMilliesMewes()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- 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,107 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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 "LehrMilliesMewesCoalescence.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "phaseCompressibleTurbulenceModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
defineTypeNameAndDebug(LehrMilliesMewesCoalescence, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
coalescenceModel,
|
||||
LehrMilliesMewesCoalescence,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using Foam::constant::mathematical::pi;
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::coalescenceModels::LehrMilliesMewesCoalescence::
|
||||
LehrMilliesMewesCoalescence
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
coalescenceModel(popBal, dict),
|
||||
uCrit_
|
||||
(
|
||||
dimensionedScalar::lookupOrDefault("uCrit", dict, dimVelocity, 0.08)
|
||||
),
|
||||
alphaMax_
|
||||
(
|
||||
dimensionedScalar::lookupOrDefault("alphaMax", dict, dimless, 0.6)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void
|
||||
Foam::diameterModels::coalescenceModels::LehrMilliesMewesCoalescence::
|
||||
addToCoalescenceRate
|
||||
(
|
||||
volScalarField& coalescenceRate,
|
||||
const label i,
|
||||
const label j
|
||||
)
|
||||
{
|
||||
const sizeGroup& fi = popBal_.sizeGroups()[i];
|
||||
const sizeGroup& fj = popBal_.sizeGroups()[j];
|
||||
|
||||
volScalarField uChar
|
||||
(
|
||||
max
|
||||
(
|
||||
sqrt(2.0)*cbrt(popBal_.continuousTurbulence().epsilon())
|
||||
*sqrt(cbrt(sqr(fi.d())) + cbrt(sqr(fj.d()))),
|
||||
mag(fi.phase().U() - fj.phase().U())
|
||||
)
|
||||
);
|
||||
|
||||
coalescenceRate +=
|
||||
pi/4.0*sqr(fi.d() + fj.d())*min(uChar, uCrit_)
|
||||
*exp
|
||||
(
|
||||
- sqr(cbrt(alphaMax_)
|
||||
/cbrt(max(popBal_.alphas(), fi.phase().residualAlpha())) - 1.0)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,156 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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::LehrMilliesMewesCoalescence
|
||||
|
||||
Description
|
||||
Model of Lehr et al. (2002). The coalescence rate is calculated by
|
||||
|
||||
\f[
|
||||
\frac{\pi}{4} (d_i + d_j)^2 \mathrm{min}(u^{\prime}, u_{\mathrm{crit}})
|
||||
\mathrm{exp}
|
||||
\left[
|
||||
- \left(\frac{\alpha_{\mathrm{max}}^{1/3}}{\alpha^{1/3}} - 1\right)^2
|
||||
\right]\,,
|
||||
\f]
|
||||
|
||||
where
|
||||
|
||||
\f[
|
||||
u^{\prime}
|
||||
=
|
||||
\mathrm{max}
|
||||
\left(
|
||||
\sqrt{2} \epsilon_c^{1/3} \sqrt{d_i^{2/3} + d_j^{2/3}},
|
||||
|\vec{u}_i - \vec{u}_j|
|
||||
\right)
|
||||
\f]
|
||||
|
||||
is the characteristic velocity for coalescence. Note that a velocity
|
||||
difference between bubble i and j is only present if the corresponding
|
||||
size groups are assigned to different velocity groups.
|
||||
|
||||
\vartable
|
||||
d_i | Diameter of bubble i [m]
|
||||
d_j | Diameter of bubble j [m]
|
||||
\epsilon_c | Turbulent dissipation rate of continuous phase [m2/s3]
|
||||
\alpha | Total void fraction of the bubbles [-]
|
||||
\alpha_{max} | Maximum packing density of the bubbles [-]
|
||||
u_{crit} | Critical velocity for coalescence [m/s]
|
||||
\vec{u}_i | Velocity vector of bubble i [m/s]
|
||||
\vec{u}_j | Velocity vector of bubble j [m/s]
|
||||
\endvartable
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Lehr, F., Millies, M., & Mewes, D. (2002).
|
||||
Bubble‐size distributions and flow fields in bubble columns.
|
||||
AIChE Journal, 48(11), 2426-2443.
|
||||
\endverbatim
|
||||
|
||||
Usage
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
uCrit | Crit. coalescence velocity | no | 0.08
|
||||
alphaMax | Maximum packing density | no | 0.6
|
||||
\endtable
|
||||
|
||||
SourceFiles
|
||||
LehrMilliesMewesCoalescence.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef LehrMilliesMewesCoalescence_H
|
||||
#define LehrMilliesMewesCoalescence_H
|
||||
|
||||
#include "coalescenceModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class LehrMilliesMewesCoalescence Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class LehrMilliesMewesCoalescence
|
||||
:
|
||||
public coalescenceModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Critical velocity for coalescence, defaults to 0.08 m/s
|
||||
dimensionedScalar uCrit_;
|
||||
|
||||
//- Maximum packing density of the bubbles, defaults to 0.6
|
||||
dimensionedScalar alphaMax_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("LehrMilliesMewes");
|
||||
|
||||
// Constructor
|
||||
|
||||
LehrMilliesMewesCoalescence
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~LehrMilliesMewesCoalescence()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Add to coalescenceRate
|
||||
virtual void addToCoalescenceRate
|
||||
(
|
||||
volScalarField& coalescenceRate,
|
||||
const label i,
|
||||
const label j
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace coalescenceModels
|
||||
} // End namespace diameterModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,135 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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 "Luo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "phaseCompressibleTurbulenceModel.H"
|
||||
#include "virtualMassModel.H"
|
||||
#include "phaseSystem.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
defineTypeNameAndDebug(Luo, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
coalescenceModel,
|
||||
Luo,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using Foam::constant::mathematical::pi;
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::diameterModels::coalescenceModels::Luo::
|
||||
Luo
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
coalescenceModel(popBal, dict),
|
||||
beta_(dimensionedScalar::lookupOrDefault("beta", dict, dimless, 2.05)),
|
||||
C1_(dimensionedScalar::lookupOrDefault("C1", dict, dimless, 1.0))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diameterModels::coalescenceModels::Luo::
|
||||
addToCoalescenceRate
|
||||
(
|
||||
volScalarField& coalescenceRate,
|
||||
const label i,
|
||||
const label j
|
||||
)
|
||||
{
|
||||
const sizeGroup& fi = popBal_.sizeGroups()[i];
|
||||
const sizeGroup& fj = popBal_.sizeGroups()[j];
|
||||
const phaseModel& continuousPhase = popBal_.continuousPhase();
|
||||
|
||||
if
|
||||
(
|
||||
popBal_.fluid().foundSubModel<virtualMassModel>
|
||||
(
|
||||
fi.phase(),
|
||||
popBal_.continuousPhase()
|
||||
)
|
||||
)
|
||||
{
|
||||
const virtualMassModel& vm =
|
||||
popBal_.fluid().lookupSubModel<virtualMassModel>
|
||||
(
|
||||
fi.phase(),
|
||||
popBal_.continuousPhase()
|
||||
);
|
||||
|
||||
dimensionedScalar xi = fi.d()/fj.d();
|
||||
|
||||
volScalarField uij
|
||||
(
|
||||
sqrt(beta_)
|
||||
*cbrt(popBal_.continuousTurbulence().epsilon()*fi.d())
|
||||
*sqrt(1.0 + pow(xi, -2.0/3.0))
|
||||
);
|
||||
|
||||
coalescenceRate +=
|
||||
pi/4.0*sqr(fi.d() + fj.d())*uij
|
||||
*exp
|
||||
(
|
||||
- C1_
|
||||
*sqrt(0.75*(1.0 + sqr(xi))*(1.0 + pow3(xi)))
|
||||
/(
|
||||
sqrt(fi.phase().rho()/continuousPhase.rho()
|
||||
+ vm.Cvm())*pow3(1.0 + xi)
|
||||
)
|
||||
*sqrt
|
||||
(
|
||||
continuousPhase.rho()*fi.d()*sqr(uij)
|
||||
/popBal_.sigmaWithContinuousPhase(fi.phase())
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "A virtual mass model for " << fi.phase().name() << " in "
|
||||
<< popBal_.continuousPhase().name() << " is not specified. This is "
|
||||
<< "required by the Luo coalescence model." << exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,162 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2019 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::Luo
|
||||
|
||||
Description
|
||||
Model of Luo (1993). The coalescence rate is calculated by
|
||||
|
||||
\f[
|
||||
&\frac{\pi}{4} (d_i + d_j)^2 u_{ij}
|
||||
\mathrm{exp}
|
||||
\left[
|
||||
- C_1
|
||||
\frac
|
||||
{[0.75(1 + \xi_{ij}^2)(1 + \xi_{ij}^3)]^{1/2}}
|
||||
{(\rho_d/\rho_c + C_{vm})^{1/2} (1 + \xi_{ij})^3}
|
||||
\left(\frac{\rho_c d_i u_{ij}^2}{\sigma}\right)^{1/2}
|
||||
\right]\,,
|
||||
\f]
|
||||
|
||||
where
|
||||
|
||||
\f[
|
||||
u_{ij} = \sqrt{\beta} (\epsilon_c d_i)^{1/3} \sqrt{1 + \xi_{ij}^{-2/3}}
|
||||
\f]
|
||||
|
||||
is the mean approach velocity of the bubbles and
|
||||
|
||||
\f[
|
||||
\xi_{ij} = d_i/d_j
|
||||
\f]
|
||||
|
||||
their size ratio.
|
||||
|
||||
\vartable
|
||||
d_i | Diameter of bubble i [m]
|
||||
d_j | Diameter of bubble j [m]
|
||||
u_{ij} | Mean approach velocity [m/s]
|
||||
\xi_{ij} | Bubble size ratio [-]
|
||||
\rho_d | Density of dispersed phase [kg/m3]
|
||||
\rho_c | Density of continuous phase [kg/m3]
|
||||
\sigma | Surface tension [N/m]
|
||||
C_{vm} | Virtual mass coefficient [-]
|
||||
C_1 | Coefficient [-]
|
||||
\beta | Coefficient [-]
|
||||
\epsilon_c | Continuous phase turbulent dissipation rate [m2/s3]
|
||||
\endvartable
|
||||
|
||||
Reference:
|
||||
\verbatim
|
||||
Luo, H. (1993).
|
||||
Coalescence, breakup and liquid circulation in bubble column reactors.
|
||||
Dr. Ing (Doctoral dissertation, Thesis, Department of Chemical
|
||||
Engineering, The Norwegian Institute of Technology, Trondheim, Norway).
|
||||
\endverbatim
|
||||
|
||||
Usage
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
beta | Coefficient beta | no | 2.0
|
||||
C1 | Coefficient C1 | no | 1.0
|
||||
\endtable
|
||||
|
||||
SourceFiles
|
||||
Luo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef Luo_H
|
||||
#define Luo_H
|
||||
|
||||
#include "coalescenceModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace diameterModels
|
||||
{
|
||||
namespace coalescenceModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class Luo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class Luo
|
||||
:
|
||||
public coalescenceModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Coefficient beta, defaults to 2.0
|
||||
dimensionedScalar beta_;
|
||||
|
||||
//- Optional coefficient C1, defaults to 1.0
|
||||
dimensionedScalar C1_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("Luo");
|
||||
|
||||
// Constructor
|
||||
|
||||
Luo
|
||||
(
|
||||
const populationBalanceModel& popBal,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~Luo()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- 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