reacting*EulerFoam/.../turbulentDispersionModels: Corrected for multiphase case

In two phases, the turbulent dispersion force is modelled for a phase
pair as follows:

    F12 = D12*grad(alpha1)

Where D12 is the turbulent dispersion coefficient between phases 1 and
2. This force is calculated equivalently whichever phase is chosen to be
phase 1 because the volume fractions are related by alpha1 = 1 - alpha2.
This means that F12 == - F21; i.e., the force in one phase equals the
reaction in the other.

In multiple phases, however, a force calculated in this way is no longer
consistent between phases, because the relationship between the volume
fractions no longer applies. The following form has been chosen instead.

    F12 = D12*grad(alpha1/(alpha1 + alpha2))

I.e., rather than using the gradient of a phase directly, we use the
gradient of the phase within the two-phase sub-system associated with
the pair.

This reduces to the two-phase case above, and the models available in
the literature that are explicitly formulated for multiple phases can
also be expressed in this form.

Based on a patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum Dresden -
Rossendorf (HZDR) and VTT Technical Research Centre of Finland Ltd.
This commit is contained in:
Will Bainbridge
2019-10-22 11:24:34 +01:00
parent ae292eec2a
commit 64da7a2cc9
7 changed files with 61 additions and 65 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014-2019 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -56,17 +56,7 @@ Foam::turbulentDispersionModels::Burns::Burns
) )
: :
turbulentDispersionModel(dict, pair), turbulentDispersionModel(dict, pair),
sigma_("sigma", dimless, dict), sigma_("sigma", dimless, dict)
residualAlpha_
(
"residualAlpha",
dimless,
dict.lookupOrDefault<scalar>
(
"residualAlpha",
pair_.dispersed().residualAlpha().value()
)
)
{} {}
@ -89,19 +79,14 @@ Foam::turbulentDispersionModels::Burns::D() const
); );
return return
0.75 drag.Ki()
*drag.CdRe()
*pair_.continuous().nu()
*continuousTurbulence().nut() *continuousTurbulence().nut()
/( /sigma_
sigma_
*sqr(pair_.dispersed().d())
)
*pair_.continuous().rho()
*pair_.dispersed() *pair_.dispersed()
*( *sqr(pair_.dispersed() + pair_.continuous())
1.0/max(pair_.dispersed(), residualAlpha_) /(
+ 1.0/max(pair_.continuous(), residualAlpha_) max(pair_.dispersed(), pair_.dispersed().residualAlpha())
*max(pair_.continuous(), pair_.continuous().residualAlpha())
); );
} }

View File

@ -28,13 +28,6 @@ Description
Turbulent dispersion model of Burns et al. Turbulent dispersion model of Burns et al.
References: References:
\verbatim
Otromke, M. (2013).
Implementation and Comparison of Correlations for interfacial Forces in
a Gas-Liquid System within an Euler-Euler Framework.
PhD Thesis.
\endverbatim
\verbatim \verbatim
Burns, A. D., Frank, T., Hamill, I., & Shi, J. M. (2004, May). Burns, A. D., Frank, T., Hamill, I., & Shi, J. M. (2004, May).
The Favre averaged drag model for turbulent dispersion in Eulerian The Favre averaged drag model for turbulent dispersion in Eulerian
@ -76,9 +69,6 @@ class Burns
//- Schmidt number //- Schmidt number
const dimensionedScalar sigma_; const dimensionedScalar sigma_;
//- Residual phase fraction
const dimensionedScalar residualAlpha_;
public: public:

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014-2019 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -81,16 +81,10 @@ Foam::turbulentDispersionModels::Gosman::D() const
); );
return return
0.75 drag.Ki()
*drag.CdRe()
*pair_.dispersed()
*pair_.continuous().nu()
*continuousTurbulence().nut() *continuousTurbulence().nut()
/( /sigma_
sigma_ *pair_.dispersed();
*sqr(pair_.dispersed().d())
)
*pair_.continuous().rho();
} }

View File

@ -28,19 +28,11 @@ Description
Lopez de Bertodano (1992) turbulent dispersion model. Lopez de Bertodano (1992) turbulent dispersion model.
\verbatim \verbatim
Lopez, D. B. M. (1993). Lopez, D. B. M. (1992).
Turbulent bubbly two-phase flow in a triangular duct. Turbulent bubbly two-phase flow in a triangular duct.
PhD Thesis, Rensselaer Polytechnic Institution. PhD Thesis, Rensselaer Polytechnic Institution.
\endverbatim \endverbatim
\verbatim
Burns, A. D., Frank, T., Hamill, I., & Shi, J. M. (2004, May).
The Favre averaged drag model for turbulent dispersion in Eulerian
multi-phase flows.
In 5th international conference on multiphase flow,
ICMF (Vol. 4, pp. 1-17).
\endverbatim
SourceFiles SourceFiles
LopezDeBertodano.C LopezDeBertodano.C

View File

@ -48,7 +48,7 @@ namespace turbulentDispersionModels
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class constantTurbulentDispersionCoefficient Declaration Class constantTurbulentDispersionCoefficient Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class constantTurbulentDispersionCoefficient class constantTurbulentDispersionCoefficient

View File

@ -82,7 +82,17 @@ Foam::turbulentDispersionModel::continuousTurbulence() const
Foam::tmp<Foam::volVectorField> Foam::tmp<Foam::volVectorField>
Foam::turbulentDispersionModel::F() const Foam::turbulentDispersionModel::F() const
{ {
return D()*fvc::grad(pair_.dispersed()); return
D()
*fvc::grad
(
pair_.dispersed()
/max
(
pair_.dispersed() + pair_.continuous(),
pair_.dispersed().residualAlpha()
)
);
} }
@ -90,8 +100,19 @@ Foam::tmp<Foam::surfaceScalarField>
Foam::turbulentDispersionModel::Ff() const Foam::turbulentDispersionModel::Ff() const
{ {
return return
fvc::interpolate(D())*fvc::snGrad(pair_.dispersed()) pair_.phase1().mesh().magSf()
*pair_.phase1().mesh().magSf(); *(
fvc::interpolate(D())
*fvc::snGrad
(
pair_.dispersed()
/max
(
pair_.dispersed() + pair_.continuous(),
pair_.dispersed().residualAlpha()
)
)
);
} }

View File

@ -619,17 +619,33 @@ Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::phiFs
fvc::interpolate(rAUs[pair.phase2().index()]*D) fvc::interpolate(rAUs[pair.phase2().index()]*D)
); );
const surfaceScalarField snGradAlpha1 const surfaceScalarField snGradAlpha1By12
( (
fvc::snGrad(pair.phase1())*this->mesh_.magSf() fvc::snGrad
(
pair.phase1()
/max
(
pair.phase1() + pair.phase2(),
pair.phase1().residualAlpha()
)
)*this->mesh_.magSf()
); );
const surfaceScalarField snGradAlpha2 const surfaceScalarField snGradAlpha2By12
( (
fvc::snGrad(pair.phase2())*this->mesh_.magSf() fvc::snGrad
(
pair.phase2()
/max
(
pair.phase1() + pair.phase2(),
pair.phase2().residualAlpha()
)
)*this->mesh_.magSf()
); );
addField(pair.phase1(), "phiF", DByA1f*snGradAlpha1, phiFs); addField(pair.phase1(), "phiF", DByA1f*snGradAlpha1By12, phiFs);
addField(pair.phase2(), "phiF", DByA2f*snGradAlpha2, phiFs); addField(pair.phase2(), "phiF", DByA2f*snGradAlpha2By12, phiFs);
} }
if (this->fillFields_) if (this->fillFields_)
@ -745,7 +761,7 @@ Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::phiFfs
addField(phase, "phiFf", pPrimeByAf*snGradAlpha1, phiFfs); addField(phase, "phiFf", pPrimeByAf*snGradAlpha1, phiFfs);
} }
// Add the turbulent dispersion force and phase pressure // Add the turbulent dispersion force
forAllConstIter forAllConstIter
( (
turbulentDispersionModelTable, turbulentDispersionModelTable,
@ -757,8 +773,6 @@ Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::phiFfs
const phasePair& const phasePair&
pair(this->phasePairs_[turbulentDispersionModelIter.key()]); pair(this->phasePairs_[turbulentDispersionModelIter.key()]);
const volScalarField D(turbulentDispersionModelIter()->D());
addField addField
( (
pair.phase1(), pair.phase1(),