multiphaseEulerFoam: Added models

Added solid particle coalescence model by Adachi, Stuart and Fokkink
(1994), solid particle breakage model by Kusters (1991) and spherical
particle lift force model by Saffman-Mei (1992).

Patch contributed by Kasper Gram Bilde and Institute of Fluid Dynamics,
Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
This commit is contained in:
Will Bainbridge
2022-03-30 10:49:20 +01:00
parent 89e4b0fc7c
commit b4bcb29d6a
8 changed files with 655 additions and 0 deletions

View File

@ -32,6 +32,7 @@ liftModels/noLift/noLift.C
liftModels/constantLiftCoefficient/constantLiftCoefficient.C
liftModels/Moraga/Moraga.C
liftModels/LegendreMagnaudet/LegendreMagnaudet.C
liftModels/SaffmanMei/SaffmanMei.C
liftModels/TomiyamaLift/TomiyamaLift.C
liftModels/wallDampedLift/wallDampedLift.C

View File

@ -0,0 +1,91 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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 "SaffmanMei.H"
#include "fvcCurl.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace liftModels
{
defineTypeNameAndDebug(SaffmanMei, 0);
addToRunTimeSelectionTable(liftModel, SaffmanMei, dictionary);
}
}
using Foam::constant::mathematical::twoPi;
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::liftModels::SaffmanMei::SaffmanMei
(
const dictionary& dict,
const phaseInterface& interface
)
:
dispersedLiftModel(dict, interface),
residualRe_("residualRe", dimless, dict)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::liftModels::SaffmanMei::~SaffmanMei()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::liftModels::SaffmanMei::Cl() const
{
volScalarField Re(max(interface_.Re(), residualRe_));
volScalarField Rew
(
mag(fvc::curl(interface_.continuous().U()))
*sqr(interface_.dispersed().d())
/(
interface_.continuous().thermo().nu()
+ dimensionedScalar(dimViscosity, rootVSmall)
)
);
volScalarField Cld
(
neg0(Re - 40)*6.46
*(
(1 - 0.3314*sqrt(0.5*(Rew/Re)))*exp(-0.1*Re)
+ 0.3314*sqrt(0.5*(Rew/Re))
)
+ pos(Re - 40)*6.46*0.0524*sqrt(0.5*(Rew/Re)*Re)
);
return 3/(twoPi*sqrt(Rew + rootVSmall))*Cld;
}
// ************************************************************************* //

View File

@ -0,0 +1,110 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::liftModels::SaffmanMei
Description
Lift model of Saffman (1965) as extended by Mei (1992). Applicable to
spherical particles.
References:
\verbatim
Saffman, P. G. T. (1965).
The lift on a small sphere in a slow shear flow.
Journal of fluid mechanics, 22(2), 385-400.
Mei, R. (1992).
An approximate expression for the shear lift force on a spherical
particle at finite Reynolds number.
International Journal of Multiphase Flow, 18(1), 145-147.
\endverbatim
SourceFiles
SaffmanMei.C
\*---------------------------------------------------------------------------*/
#ifndef SaffmanMei_H
#define SaffmanMei_H
#include "dispersedLiftModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace liftModels
{
/*---------------------------------------------------------------------------*\
Class SaffmanMei Declaration
\*---------------------------------------------------------------------------*/
class SaffmanMei
:
public dispersedLiftModel
{
// Private Data
//- Residual Reynold's number
const dimensionedScalar residualRe_;
public:
//- Runtime type information
TypeName("SaffmanMei");
// Constructors
//- Construct from a dictionary and an interface
SaffmanMei
(
const dictionary& dict,
const phaseInterface& interface
);
//- Destructor
virtual ~SaffmanMei();
// Member Functions
//- Lift coefficient
virtual tmp<volScalarField> Cl() const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace liftModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -55,6 +55,7 @@ populationBalanceModel/populationBalanceModel/populationBalanceModel.C
coalescenceModels = populationBalanceModel/coalescenceModels
$(coalescenceModels)/coalescenceModel/coalescenceModel.C
$(coalescenceModels)/AdachiStuartFokkink/AdachiStuartFokkink.C
$(coalescenceModels)/ballisticCollisions/ballisticCollisions.C
$(coalescenceModels)/BrownianCollisions/BrownianCollisions.C
$(coalescenceModels)/constantCoalescence/constantCoalescence.C
@ -78,6 +79,7 @@ $(binaryBreakupModels)/powerLawUniformBinary/powerLawUniformBinary.C
breakupModels = populationBalanceModel/breakupModels
$(breakupModels)/breakupModel/breakupModel.C
$(breakupModels)/exponential/exponential.C
$(breakupModels)/Kusters/Kusters.C
$(breakupModels)/Laakkonen/Laakkonen.C
$(breakupModels)/powerLaw/powerLaw.C

View File

@ -0,0 +1,89 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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 "Kusters.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace breakupModels
{
defineTypeNameAndDebug(Kusters, 0);
addToRunTimeSelectionTable
(
breakupModel,
Kusters,
dictionary
);
}
}
}
using Foam::constant::mathematical::pi;
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::diameterModels::breakupModels::Kusters::Kusters
(
const populationBalanceModel& popBal,
const dictionary& dict
)
:
breakupModel(popBal, dict),
B_("B", dimensionSet(0, 3, -3, 0, 0), dict),
dP_("dP", dimLength, dict),
kc_(dimensionedScalar::lookupOrDefault("kc", dict, dimless, 1)),
Df_("Df", dimless, dict)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::diameterModels::breakupModels::Kusters::setBreakupRate
(
volScalarField& breakupRate,
const label i
)
{
const sizeGroup& fi = popBal_.sizeGroups()[i];
breakupRate =
sqrt
(
4*popBal_.continuousTurbulence().epsilon()
/(15*pi*popBal_.continuousPhase().thermo().nu())
)
*exp
(
- B_/(dP_*0.5*pow(pow(fi.d()/dP_, Df_)/kc_, 1/Df_))
/popBal_.continuousTurbulence().epsilon()
);
}
// ************************************************************************* //

View File

@ -0,0 +1,152 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::breakupModels::Kusters
Description
Solid particle breakage model of Kusters (1991). The breakage rate is
calculated by
\f[
\sqrt{\frac{4}{15\pi}}\sqrt{\frac{\epsilon}{\nu}}
\exp\left(-\frac{\epsilon_{crit}}{\epsilon}\right)
\f]
\f[
\epsilon_{crit}=\frac{B}{R_{ci}}
\f]
\f[
R_{ci} = 0.5d_{p}\left(\frac{n_i}{k_c}\right)^{1/D_f}
\f]
\f[
n_i = \left(\frac{d_i}{d_{p}}\right)^{D_f}
\f]
where
\vartable
B | Critical force parameter for breakage [m3/s3]
d_i | Diameter of transported particle [m]
d_{p} | Diameter of primary particles [m]
D_f | Fractal dimension of particle [-]
k_c | Constant relative to packing density [-]
n_i | Number of primary particles in agglomerate [-]
\nu | Kinematic viscosity of continuous phase [m2/s]
\epsilon | Continuous phase turbulent dissipation rate [m2/s3]
\epsilon_{crit} | Critical turbulent dissipation rate [m2/s3]
\endvartable
Reference:
\verbatim
Kusters, K. A. (1991).
The influence of turbulence on aggregation of small particles in
agitated vessels.
PhD Thesis
\endverbatim
SourceFiles
Kusters.C
\*---------------------------------------------------------------------------*/
#ifndef Kusters_H
#define Kusters_H
#include "breakupModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace breakupModels
{
/*---------------------------------------------------------------------------*\
Class Kusters Declaration
\*---------------------------------------------------------------------------*/
class Kusters
:
public breakupModel
{
// Private Data
//- Model coefficient
dimensionedScalar B_;
//- Primary particle diameter
dimensionedScalar dP_;
//- Packing density coefficient
dimensionedScalar kc_;
//- Fractal dimension
dimensionedScalar Df_;
public:
//- Runtime type information
TypeName("Kusters");
// Constructor
Kusters
(
const populationBalanceModel& popBal,
const dictionary& dict
);
//- Destructor
virtual ~Kusters()
{}
// Member Functions
//- Set total breakupRate
virtual void setBreakupRate
(
volScalarField& breakupRate,
const label i
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace breakupModels
} // End namespace diameterModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,88 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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 "AdachiStuartFokkink.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace coalescenceModels
{
defineTypeNameAndDebug(AdachiStuartFokkink, 0);
addToRunTimeSelectionTable
(
coalescenceModel,
AdachiStuartFokkink,
dictionary
);
}
}
}
using Foam::constant::mathematical::pi;
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::diameterModels::coalescenceModels::AdachiStuartFokkink::
AdachiStuartFokkink
(
const populationBalanceModel& popBal,
const dictionary& dict
)
:
coalescenceModel(popBal, dict)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::diameterModels::coalescenceModels::AdachiStuartFokkink::
addToCoalescenceRate
(
volScalarField& coalescenceRate,
const label i,
const label j
)
{
const sizeGroup& fi = popBal_.sizeGroups()[i];
const sizeGroup& fj = popBal_.sizeGroups()[j];
coalescenceRate +=
(4.0/3.0)
*sqrt
(
0.3*pi*popBal_.continuousTurbulence().epsilon()
/popBal_.continuousPhase().thermo().nu()
)
*pow3(fi.d() + fj.d());
}
// ************************************************************************* //

View File

@ -0,0 +1,122 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::AdachiStuartFokkink
Description
Model describing aggregation of solid particles in turbulent flows.
Applicable when particles are smaller than the Kolmogorov length scale.
The coalescence rate is calculated by
f\[
\frac{4}{3}\left(\frac{3\pi}{10}\right)^{0.5}
\left(\frac{\epsilon}{\nu}\right)^{0.5}(d_i+d_j)^3
\f]
where
\vartable
d_i | Diameter of particle i [m]
d_j | Diameter of particle j [m]
\nu | Kinematic viscosity of continuous phase [m2/s]
\epsilon | Continuous phase turbulent dissipation rate [m2/s3]
\endtable
Reference:
\verbatim
Adachi, Y., Stuart, M. C., & Fokkink, R. (1994).
Kinetics of turbulent coagulation studied by means of end-over-end
rotation.
Journal of colloid and interface science, 165(2), 310-317.
\endverbatim
SourceFiles
AdachiStuartFokkink.C
\*---------------------------------------------------------------------------*/
#ifndef AdachiStuartFokkink_H
#define AdachiStuartFokkink_H
#include "coalescenceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace coalescenceModels
{
/*---------------------------------------------------------------------------*\
Class AdachiStuartFokkink Declaration
\*---------------------------------------------------------------------------*/
class AdachiStuartFokkink
:
public coalescenceModel
{
public:
//- Runtime type information
TypeName("AdachiStuartFokkink");
// Constructor
AdachiStuartFokkink
(
const populationBalanceModel& popBal,
const dictionary& dict
);
//- Destructor
virtual ~AdachiStuartFokkink()
{}
// 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
// ************************************************************************* //