multiphaseEulerFoam/.../BrownianCollisions: Added slip correction

Patch contributed by Institute of Fluid Dynamics,
Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
This commit is contained in:
Will Bainbridge
2020-08-26 14:22:01 +01:00
parent 36ce8b31ae
commit 281f8ba40c
12 changed files with 171 additions and 56 deletions

View File

@ -42,7 +42,7 @@ populationBalanceModel/populationBalanceModel/populationBalanceModel.C
coalescenceModels = populationBalanceModel/coalescenceModels
$(coalescenceModels)/coalescenceModel/coalescenceModel.C
$(coalescenceModels)/ballisticCollisions/ballisticCollisions.C
$(coalescenceModels)/brownianCollisions/brownianCollisions.C
$(coalescenceModels)/BrownianCollisions/BrownianCollisions.C
$(coalescenceModels)/constantCoalescence/constantCoalescence.C
$(coalescenceModels)/CoulaloglouTavlaridesCoalescence/CoulaloglouTavlaridesCoalescence.C
$(coalescenceModels)/DahnekeInterpolation/DahnekeInterpolation.C

View File

@ -33,7 +33,7 @@ Description
area is taken into account by a separate source term.
Kappa is transported between the size groups as a secondary property by
means of coalescence (coagulation/aggregation), breakup as well as drift.
means of coalescence (coagulation), breakup as well as drift.
By assuming a monodisperse size distribution of the primary particles in the
aggregate, the collisional diameter of a size group can then be computed by

View File

@ -23,9 +23,10 @@ License
\*---------------------------------------------------------------------------*/
#include "brownianCollisions.H"
#include "BrownianCollisions.H"
#include "addToRunTimeSelectionTable.H"
#include "fundamentalConstants.H"
#include "mathematicalConstants.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -35,11 +36,11 @@ namespace diameterModels
{
namespace coalescenceModels
{
defineTypeNameAndDebug(brownianCollisions, 0);
defineTypeNameAndDebug(BrownianCollisions, 0);
addToRunTimeSelectionTable
(
coalescenceModel,
brownianCollisions,
BrownianCollisions,
dictionary
);
}
@ -47,24 +48,55 @@ namespace coalescenceModels
}
using Foam::constant::physicoChemical::k;
using Foam::constant::mathematical::pi;
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::diameterModels::coalescenceModels::brownianCollisions::
brownianCollisions
Foam::diameterModels::coalescenceModels::BrownianCollisions::
BrownianCollisions
(
const populationBalanceModel& popBal,
const dictionary& dict
)
:
coalescenceModel(popBal, dict)
coalescenceModel(popBal, dict),
A1_(dict.lookupOrDefault<scalar>("A1", 2.514)),
A2_(dict.lookupOrDefault<scalar>("A2", 0.8)),
A3_(dict.lookupOrDefault<scalar>("A3", 0.55)),
sigma_("sigma", dimLength, dict),
lambda_
(
IOobject
(
"lambda",
popBal_.time().timeName(),
popBal_.mesh()
),
popBal_.mesh(),
dimensionedScalar
(
"lambda",
dimLength,
Zero
)
)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::diameterModels::coalescenceModels::BrownianCollisions::correct()
{
const volScalarField& T = popBal_.continuousPhase().thermo().T();
const volScalarField& p = popBal_.continuousPhase().thermo().p();
lambda_ = k*T/(sqrt(2.0)*pi*p*sqr(sigma_));
}
void
Foam::diameterModels::coalescenceModels::brownianCollisions::
Foam::diameterModels::coalescenceModels::BrownianCollisions::
addToCoalescenceRate
(
volScalarField& coalescenceRate,
@ -78,9 +110,17 @@ addToCoalescenceRate
const volScalarField& T = popBal_.continuousPhase().thermo().T();
const volScalarField& mu = popBal_.continuousPhase().thermo().mu();
coalescenceRate +=
8.0*k*T/(3*mu)*(fi.d() + fj.d())
*(1.0/fi.d() + 1.0/fj.d());
const volScalarField Cci
(
1 + lambda_/fi.d()*(A1_ + A2_*exp(-A3_*fi.d()/lambda_))
);
const volScalarField Ccj
(
1 + lambda_/fj.d()*(A1_ + A2_*exp(-A3_*fj.d()/lambda_))
);
coalescenceRate += 8*k*T/(3*mu)*(fi.d() + fj.d())*(Cci/fi.d() + Ccj/fj.d());
}

View File

@ -22,19 +22,54 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::diameterModels::coalescenceModels::brownianCollisions
Foam::diameterModels::coalescenceModels::BrownianCollisions
Description
Model describing aggregation due to brownian motion. Utilizes physical, i.e.
collisional diameters.
Model describing coagulation due to Brownian motion. Utilizes collisional
diameters and the Cunningham slip correction. The slip correction
coefficient is implemented in the following form:
\f[
C_{c_i} = 1 + \lambda [A_1 + A_2 \exp(-A_3 d_i/\lambda)]/d_i\,.
\f]
The coefficients default to the values proposed by Davis (1945). The mean
free path is computed by
\f[
\lambda = \frac{kT}{\sqrt{2} \pi p \sigma^{2}}\,.
\f]
\vartable
A_1 | Coefficient [-]
A_2 | Coefficient [-]
A_3 | Coefficient [-]
\sigma | Lennard-Jones parameter [m]
\endvartable
Reference:
\verbatim
Davies, C. N. (1945).
Definitive equations for the fluid resistance of spheres.
Proceedings of the Physical Society, 57(4), 259.
\endverbatim
Usage
\table
Property | Description | Required | Default value
A1 | Coefficient A1 | no | 2.514
A2 | Coefficient A2 | no | 0.8
A3 | Coefficient A2 | no | 0.55
sigma | Lennard-Jones parameter | yes | none
\endtable
SourceFiles
brownianCollisions.C
BrownianCollisions.C
\*---------------------------------------------------------------------------*/
#ifndef brownianCollisions_H
#define brownianCollisions_H
#ifndef BrownianCollisions_H
#define BrownianCollisions_H
#include "coalescenceModel.H"
@ -48,21 +83,39 @@ namespace coalescenceModels
{
/*---------------------------------------------------------------------------*\
Class brownianCollisions Declaration
Class BrownianCollisions Declaration
\*---------------------------------------------------------------------------*/
class brownianCollisions
class BrownianCollisions
:
public coalescenceModel
{
// Private Data
//- Cunningham slip correction coefficient A1
const dimensionedScalar A1_;
//- Cunningham slip correction coefficient A2
const dimensionedScalar A2_;
//- Cunningham slip correction coefficient A3
const dimensionedScalar A3_;
//- Lennard-Jones sigma parameter
const dimensionedScalar sigma_;
//- Mean free path
volScalarField lambda_;
public:
//- Runtime type information
TypeName("brownianCollisions");
TypeName("BrownianCollisions");
// Constructor
brownianCollisions
BrownianCollisions
(
const populationBalanceModel& popBal,
const dictionary& dict
@ -70,12 +123,15 @@ public:
//- Destructor
virtual ~brownianCollisions()
virtual ~BrownianCollisions()
{}
// Member Functions
//- Correct diameter independent expressions
virtual void correct();
//- Add to coalescenceRate
virtual void addToCoalescenceRate
(

View File

@ -25,7 +25,7 @@ License
#include "DahnekeInterpolation.H"
#include "addToRunTimeSelectionTable.H"
#include "brownianCollisions.H"
#include "BrownianCollisions.H"
#include "ballisticCollisions.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -58,20 +58,20 @@ DahnekeInterpolation
)
:
coalescenceModel(popBal, dict),
brownian_(new brownianCollisions(popBal, dict)),
brownianCollisionRate_
Brownian_(new BrownianCollisions(popBal, dict)),
BrownianRate_
(
IOobject
(
"brownianCollisionRate",
"BrownianCollisionRate",
popBal_.mesh().time().timeName(),
popBal_.mesh()
),
popBal_.mesh(),
dimensionedScalar("brownianCollisionRate", dimVolume/dimTime, 0.0)
dimensionedScalar("BrownianCollisionRate", dimVolume/dimTime, Zero)
),
ballistic_(new ballisticCollisions(popBal, dict)),
ballisticCollisionRate_
ballisticRate_
(
IOobject
(
@ -80,13 +80,19 @@ DahnekeInterpolation
popBal_.mesh()
),
popBal_.mesh(),
dimensionedScalar("ballisticCollisionRate", dimVolume/dimTime, 0.0)
dimensionedScalar("ballisticCollisionRate", dimVolume/dimTime, Zero)
)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::diameterModels::coalescenceModels::DahnekeInterpolation::correct()
{
Brownian_().correct();
}
void
Foam::diameterModels::coalescenceModels::DahnekeInterpolation::
addToCoalescenceRate
@ -96,19 +102,15 @@ addToCoalescenceRate
const label j
)
{
brownianCollisionRate_ = Zero;
ballisticCollisionRate_ = Zero;
BrownianRate_ = Zero;
ballisticRate_ = Zero;
brownian_().addToCoalescenceRate(brownianCollisionRate_, i, j);
ballistic_().addToCoalescenceRate(ballisticCollisionRate_, i, j);
Brownian_().addToCoalescenceRate(BrownianRate_, i, j);
ballistic_().addToCoalescenceRate(ballisticRate_, i, j);
const volScalarField KnD
(
brownianCollisionRate_/(2.0*ballisticCollisionRate_)
);
const volScalarField KnD(BrownianRate_/(2*ballisticRate_));
coalescenceRate +=
brownianCollisionRate_*(1.0 + KnD)/(1.0 + 2.0*KnD + 2.0*sqr(KnD));
coalescenceRate += BrownianRate_*(1 + KnD)/(1 + 2*KnD + 2*sqr(KnD));
}

View File

@ -25,8 +25,8 @@ Class
Foam::diameterModels::coalescenceModels::DahnekeInterpolation
Description
Aggregation model of Dahneke (1983). Utilizes physical, i.e. collisional
diameters.
Interpolation formula of Dahneke (1983) as presented by Otto et al. (1999).
Utilizes collisional diameters.
References:
\verbatim
@ -35,6 +35,14 @@ Description
In Theory of dispersed multiphase flow (pp. 97-133). Academic Press.
\endverbatim
\verbatim
Otto, E., Fissan, H., Park, S. H., & Lee, K. W. (1999).
The log-normal size distribution theory of Brownian aerosol coagulation
for the entire particle size range: part II—analytical solution using
Dahnekes coagulation kernel.
Journal of aerosol science, 30(1), 17-34.
\endverbatim
SourceFiles
DahnekeInterpolation.C
@ -54,7 +62,7 @@ namespace diameterModels
namespace coalescenceModels
{
class brownianCollisions;
class BrownianCollisions;
class ballisticCollisions;
/*---------------------------------------------------------------------------*\
@ -67,17 +75,17 @@ class DahnekeInterpolation
{
// Private Data
//- Model for coagulation due to brownian collisions
autoPtr<brownianCollisions> brownian_;
//- Model for coagulation due to Brownian collisions
autoPtr<BrownianCollisions> Brownian_;
//- Rate for coagulation due to brownian collisions
volScalarField brownianCollisionRate_;
//- Rate for coagulation due to Brownian collisions
volScalarField BrownianRate_;
//- Model for coagulation due to ballistic collisions
autoPtr<ballisticCollisions> ballistic_;
//- Rate for coagulation due to ballistic collisions
volScalarField ballisticCollisionRate_;
volScalarField ballisticRate_;
public:
@ -101,6 +109,9 @@ public:
// Member Functions
//- Correct diameter independent expressions
virtual void correct();
//- Add to coalescenceRate
virtual void addToCoalescenceRate
(

View File

@ -79,8 +79,8 @@ addToCoalescenceRate
const volScalarField& rhoP = fi.phase().rho();
coalescenceRate +=
sqrt(3*k*T/rhoP)*sqr((fi.d() + fj.d()))
*sqrt(1.0/pow3(fi.d()) + 1.0/pow3(fj.d()));
sqrt(3*k*T/rhoP)*sqr(fi.d() + fj.d())
*sqrt(1/pow3(fi.d()) + 1/pow3(fj.d()));
}

View File

@ -25,8 +25,8 @@ Class
Foam::diameterModels::coalescenceModels::ballisticCollisions
Description
Model describing aggregation due to ballistic collisions. Utilizes physical,
i.e. collisional diameters.
Model describing coagulation due to ballistic collisions. Utilizes
collisional diameters.
SourceFiles
ballisticCollisions.C

View File

@ -25,7 +25,7 @@ Class
Foam::diameterModels::coalescenceModels::turbulentShear
Description
Model describing aggregation due to turbulent shear. Utilizes physical, i.e.
Model describing coagulation due to turbulent shear. Utilizes physical, i.e.
collisional diameters.
SourceFiles

View File

@ -31,7 +31,7 @@ Description
a transport equation of the volume-based number density function. The
discretization is done using the fixed pivot technique of Kumar and
Ramkrishna (1996). The source terms are written in a way that particle
number and mass are preserved. Coalescence (aggregation), breakup, drift
number and mass are preserved. Coalescence (coagulation), breakup, drift
(growth and surface loss) as well as nucleation are supported.
For the discrete breakup term two recipes are available, depending on the
model choice. For models which state a total breakup rate and a separate

View File

@ -104,7 +104,10 @@ populationBalanceCoeffs
coalescenceModels
(
DahnekeInterpolation{}
DahnekeInterpolation
{
sigma 340e-12;
}
);
binaryBreakupModels

View File

@ -110,7 +110,10 @@ populationBalanceCoeffs
coalescenceModels
(
DahnekeInterpolation{}
DahnekeInterpolation
{
sigma 340e-12;
}
);
binaryBreakupModels