reactingEulerFoam: Added Laakkonen et al (2006) breakup model

Patch contributed by Institute of Fluid Dynamics, Helmholtz-Zentrum
Dresden - Rossendorf (HZDR)
This commit is contained in:
Will Bainbridge
2018-04-23 09:24:15 +01:00
parent ee6216b4e7
commit 9de5f9e761
5 changed files with 527 additions and 0 deletions

View File

@ -27,10 +27,12 @@ populationBalanceModel/binaryBreakupModels/powerLawUniformBinary/powerLawUniform
populationBalanceModel/breakupModels/breakupModel/breakupModel.C
populationBalanceModel/breakupModels/exponential/exponential.C
populationBalanceModel/breakupModels/LaakkonenAlopaeusAittamaa/LaakkonenAlopaeusAittamaa.C
populationBalanceModel/breakupModels/powerLaw/powerLaw.C
populationBalanceModel/daughterSizeDistributionModels/daughterSizeDistributionModel/daughterSizeDistributionModel.C
populationBalanceModel/daughterSizeDistributionModels/uniformBinary/uniformBinary.C
populationBalanceModel/daughterSizeDistributionModels/LaakkonenAlopaeusAittamaaDsd/LaakkonenAlopaeusAittamaaDsd.C
populationBalanceModel/driftModels/driftModel/driftModel.C
populationBalanceModel/driftModels/constantDrift/constantDrift.C

View File

@ -0,0 +1,109 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2018 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 "LaakkonenAlopaeusAittamaa.H"
#include "addToRunTimeSelectionTable.H"
#include "phaseCompressibleTurbulenceModel.H"
#include "phaseSystem.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace breakupModels
{
defineTypeNameAndDebug(LaakkonenAlopaeusAittamaa, 0);
addToRunTimeSelectionTable
(
breakupModel,
LaakkonenAlopaeusAittamaa,
dictionary
);
}
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::diameterModels::breakupModels::LaakkonenAlopaeusAittamaa::
LaakkonenAlopaeusAittamaa
(
const populationBalanceModel& popBal,
const dictionary& dict
)
:
breakupModel(popBal, dict),
C1_
(
"C1",
dimensionSet(0, -2.0/3.0, 0, 0, 0),
dict.lookupOrDefault<scalar>("C1", 6.0)
),
C2_("C2", dimless, dict.lookupOrDefault<scalar>("C2", 0.04)),
C3_("C3", dimless, dict.lookupOrDefault<scalar>("C3", 0.01))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void
Foam::diameterModels::breakupModels::LaakkonenAlopaeusAittamaa::setBreakupRate
(
volScalarField& breakupRate,
const label i
)
{
const phaseModel& continuousPhase = popBal_.continuousPhase();
const sizeGroup& fi = *popBal_.sizeGroups()[i];
const volScalarField sigma
(
popBal_.fluid().sigma(phasePair(fi.phase(), continuousPhase))
);
breakupRate =
C1_*cbrt(continuousTurbulence().epsilon())
*erfc
(
sqrt
(
C2_*sigma
/(
continuousPhase.rho()*pow(fi.d(), 5.0/3.0)
*pow(continuousTurbulence().epsilon(), 2.0/3.0)
)
+ C3_*continuousPhase.mu()
/(
sqrt(continuousPhase.rho()*fi.phase().rho())
*cbrt(continuousTurbulence().epsilon())*pow(fi.d(), 4.0/3.0)
)
)
);
}
// ************************************************************************* //

View File

@ -0,0 +1,150 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2018 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::LaakkonenAlopaeusAittamaa
Description
Model of Laakkonen et al. (2006). The total breakup rate is calculated by
\f[
C_1 \epsilon_c^{1/3}
\mathrm{erfc}
\left(
\sqrt
{
C_2 \frac{\sigma}{\rho_c \epsilon_c^{2/3} (6v_i/\pi)^{5/9}}
+ C_3 \frac{\mu_c}{\sqrt{\rho_c \rho_d}
\epsilon_c^{1/3} (6v_i/\pi)^{4/9}}
}
\right)
\f]
where
\vartable
\sigma | Surface tension [N/m]
v_i | Volume of mother bubble i [m]
\epsilon_c | Turbulent dissipation rate of continuous phase [m2/s3]
\mu_c | Molecular dynamic viscosity of liquid phase [Pa s]
\rho_c | Density of continous phase [kg/m3]
\rho_d | Density of disperse phase [kg/m3]
\endvartable
References:
\verbatim
"Validation of bubble breakage, coalescence and mass transfer models for
gas-liquid dispersion in agitated vessel"
Laakkonen, M., Alopaeus, V., Aittamaa, J.
Chemical Engineering Science, Vol. 61, 2006, pp. 218-228
Eq. 2-3, p. 220
\endverbatim
Usage
\table
Property | Description | Required | Default value
C1 | Coefficient C1 | no | 6.0
C2 | Coefficient C2 | no | 0.04
C3 | Coefficient C3 | no | 0.01
\endtable
SourceFiles
LaakkonenAlopaeusAittamaa.C
\*---------------------------------------------------------------------------*/
#ifndef LaakkonenAlopaeusAittamaa_H
#define LaakkonenAlopaeusAittamaa_H
#include "breakupModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace breakupModels
{
/*---------------------------------------------------------------------------*\
Class LaakkonenAlopaeusAittamaa Declaration
\*---------------------------------------------------------------------------*/
class LaakkonenAlopaeusAittamaa
:
public breakupModel
{
// Private data
//- Optional coefficient C1, defaults to 6.0
dimensionedScalar C1_;
//- Optional coefficient C2, defaults to 0.04
dimensionedScalar C2_;
//- Optional coefficient C3, defaults to 0.01
dimensionedScalar C3_;
public:
//- Runtime type information
TypeName("LaakkonenAlopaeusAittamaa");
// Constructor
LaakkonenAlopaeusAittamaa
(
const populationBalanceModel& popBal,
const dictionary& dict
);
//- Destructor
virtual ~LaakkonenAlopaeusAittamaa()
{}
// 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,130 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2018 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 "LaakkonenAlopaeusAittamaaDsd.H"
#include "addToRunTimeSelectionTable.H"
#include "breakupModel.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace daughterSizeDistributionModels
{
defineTypeNameAndDebug(LaakkonenAlopaeusAittamaaDsd, 0);
addToRunTimeSelectionTable
(
daughterSizeDistributionModel,
LaakkonenAlopaeusAittamaaDsd,
dictionary
);
}
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::diameterModels::daughterSizeDistributionModels::
LaakkonenAlopaeusAittamaaDsd::LaakkonenAlopaeusAittamaaDsd
(
const breakupModel& breakup,
const dictionary& dict
)
:
daughterSizeDistributionModel(breakup, dict)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::diameterModels::daughterSizeDistributionModels::
LaakkonenAlopaeusAittamaaDsd::~LaakkonenAlopaeusAittamaaDsd()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::dimensionedScalar
Foam::diameterModels::daughterSizeDistributionModels::
LaakkonenAlopaeusAittamaaDsd::calcNik
(
const label i,
const label k
) const
{
const dimensionedScalar& xi = breakup_.popBal().sizeGroups()[i]->x();
const dimensionedScalar& xk = breakup_.popBal().sizeGroups()[k]->x();
const List<sizeGroup*>& sizeGroups = breakup_.popBal().sizeGroups();
if (i == 0)
{
const dimensionedScalar& xii = sizeGroups[i+1]->x();
return
(
5.0*pow4(xii)*sqr(xk) - 12.0*pow5(xi)*xii + 10.0*pow6(xi)
- (20.0*pow3(xi)*xii - 15.0*pow4(xi))*sqr(xk) - 6.0*pow5(xii)*xk
- (24*pow5(xi) - 30*pow4(xi)*xii)*xk + 2*pow6(xii)
)
/((xii - xi)*pow5(xk));
}
else if (i == k)
{
const dimensionedScalar& x = sizeGroups[i-1]->x();
return
(
(15.0*pow4(xi) - 20.0*x*pow3(xi))*sqr(xk)
+ 5.0*pow4(x)*sqr(xk) + (30.0*x*pow4(xi) - 24.0*pow5(xi))*xk
- 6.0*pow5(x)*xk + 10.0*pow6(xi) - 12.0*x*pow5(xi) + 2.0*pow6(x)
)
/((xi - x)*pow5(xk));
}
else
{
const dimensionedScalar& x = sizeGroups[i-1]->x();
const dimensionedScalar& xii = sizeGroups[i+1]->x();
return
(
5.0*pow4(xii)*sqr(xk) - 12.0*pow5(xi)*xii + 10.0*pow6(xi)
- (20.0*pow3(xi)*xii - 15.0*pow4(xi))*sqr(xk) - 6.0*pow5(xii)*xk
- (24*pow5(xi) - 30*pow4(xi)*xii)*xk + 2*pow6(xii)
)
/((xii - xi)*pow5(xk))
+ (
(15.0*pow4(xi) - 20.0*x*pow3(xi))*sqr(xk)
+ 5.0*pow4(x)*sqr(xk) + (30.0*x*pow4(xi) - 24.0*pow5(xi))*xk
- 6.0*pow5(x)*xk + 10.0*pow6(xi) - 12.0*x*pow5(xi) + 2.0*pow6(x)
)
/((xi - x)*pow5(xk));
}
}
// ************************************************************************* //

View File

@ -0,0 +1,136 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2018 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::daughterSizeDistributionModels::
LaakkonenAlopaeusAittamaaDsd
Description
Daughter size distribution model used by Laakkonen et al. (2006). Note that
it must be multiplied by the number of daughter particles (2). Also, the
coefficient C4 needs to be set to the value of 2 as to ensure number and
mass conservation following Kumar and Ramkrishna (1996). Also the internal
coordinate was changed to particle volume, which gives
\f[
\frac{60}{v_j} \left(\frac{v_i}{v_j}\right)^{2}
\left(1 - \frac{v_i}{v_j}\right)^{2}
\f]
where
\vartable
v_i | Volume of daughter bubble i [m]
v_j | Volume of mother bubble j [m]
\endvartable
References:
\verbatim
"Validation of bubble breakage, coalescence and mass transfer models for
gas-liquid dispersion in agitated vessel"
Laakkonen, M., Alopaeus, V., Aittamaa, J.
Chemical Engineering Science, Vol. 61, 2006, pp. 218-228
Eq. 3, p. 220
\endverbatim
\verbatim
"On the solution of population balance equations by
discretization - I. A fixed pivot technique."
Kumar, S. & Ramkrishna, D.
Chemical Engineering Science, Vol. 51(8) 1996, 1311-1332.
Eq. 33, p. 1318
\endverbatim
Usage
\table
Property | Description | Required | Default value
C1 | Coefficient C1 | no | 6.0
C2 | Coefficient C2 | no | 0.04
C3 | Coefficient C3 | no | 0.01
\endtable
SourceFiles
LaakkonenAlopaeusAittamaaBinaryBreakup.C
\*---------------------------------------------------------------------------*/
#ifndef LaakkonenAlopaeusAittamaaDsd_H
#define LaakkonenAlopaeusAittamaaDsd_H
#include "daughterSizeDistributionModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace diameterModels
{
namespace daughterSizeDistributionModels
{
/*---------------------------------------------------------------------------*\
Class LaakkonenAlopaeusAittamaaDsd Declaration
\*---------------------------------------------------------------------------*/
class LaakkonenAlopaeusAittamaaDsd
:
public daughterSizeDistributionModel
{
public:
//- Runtime type information
TypeName("LaakkonenAlopaeusAittamaa");
// Constructor
LaakkonenAlopaeusAittamaaDsd
(
const breakupModel& breakup,
const dictionary& dict
);
//- Destructor
virtual ~LaakkonenAlopaeusAittamaaDsd();
// Member Functions
//- Return total number of particles assigned to class i when a particle
// of class k breaks
virtual dimensionedScalar calcNik(const label i, const label k) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace daughterSizeDistributionModels
} // End namespace diameterModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //