multiphaseEulerFoam/.../BrownianCollisions: Added slip correction
Patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
This commit is contained in:
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
(
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
Dahneke’s 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
|
||||
(
|
||||
|
||||
@ -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()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -104,7 +104,10 @@ populationBalanceCoeffs
|
||||
|
||||
coalescenceModels
|
||||
(
|
||||
DahnekeInterpolation{}
|
||||
DahnekeInterpolation
|
||||
{
|
||||
sigma 340e-12;
|
||||
}
|
||||
);
|
||||
|
||||
binaryBreakupModels
|
||||
|
||||
@ -110,7 +110,10 @@ populationBalanceCoeffs
|
||||
|
||||
coalescenceModels
|
||||
(
|
||||
DahnekeInterpolation{}
|
||||
DahnekeInterpolation
|
||||
{
|
||||
sigma 340e-12;
|
||||
}
|
||||
);
|
||||
|
||||
binaryBreakupModels
|
||||
|
||||
Reference in New Issue
Block a user