BrunDrippingInjection: Calculate drop diameter from the capillary length

The diameter of the drops formed are obtained from the local capillary
length multiplied by the \c dCoeff coefficient which defaults to 3.3.

Reference:
    Lefebvre, A. (1988).
    Atomization and sprays
    (Vol. 1040, No. 2756). CRC press.
This commit is contained in:
Henry Weller
2016-08-04 15:02:51 +01:00
parent 6131d5c1a3
commit c022e5ade3
2 changed files with 44 additions and 78 deletions

View File

@ -25,11 +25,6 @@ License
#include "BrunDrippingInjection.H" #include "BrunDrippingInjection.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include "fvMesh.H"
#include "Time.H"
#include "mathematicalConstants.H"
#include "Random.H"
#include "volFields.H"
#include "kinematicSingleLayer.H" #include "kinematicSingleLayer.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -56,17 +51,8 @@ BrunDrippingInjection::BrunDrippingInjection
: :
injectionModel(type(), owner, dict), injectionModel(type(), owner, dict),
ubarStar_(coeffDict_.lookupOrDefault("ubarStar", 1.62208)), ubarStar_(coeffDict_.lookupOrDefault("ubarStar", 1.62208)),
deltaStable_(readScalar(coeffDict_.lookup("deltaStable"))), dCoeff_(coeffDict_.lookupOrDefault("dCoeff", 3.3)),
particlesPerParcel_(readScalar(coeffDict_.lookup("particlesPerParcel"))), deltaStable_(coeffDict_.lookupOrDefault("deltaStable", 0)),
rndGen_(label(0), -1),
parcelDistribution_
(
distributionModels::distributionModel::New
(
coeffDict_.subDict("parcelDistribution"),
rndGen_
)
),
diameter_(owner.regionMesh().nCells(), -1.0) diameter_(owner.regionMesh().nCells(), -1.0)
{} {}
@ -89,8 +75,6 @@ void BrunDrippingInjection::correct
const kinematicSingleLayer& film = const kinematicSingleLayer& film =
refCast<const kinematicSingleLayer>(this->owner()); refCast<const kinematicSingleLayer>(this->owner());
const scalar pi = constant::mathematical::pi;
// Calculate available dripping mass // Calculate available dripping mass
tmp<volScalarField> tsinAlpha(film.gNorm()/mag(film.g())); tmp<volScalarField> tsinAlpha(film.gNorm()/mag(film.g()));
const scalarField& sinAlpha = tsinAlpha(); const scalarField& sinAlpha = tsinAlpha();
@ -101,66 +85,47 @@ void BrunDrippingInjection::correct
const scalarField& sigma = film.sigma(); const scalarField& sigma = film.sigma();
const scalar magg = mag(film.g().value()); const scalar magg = mag(film.g().value());
scalarField massDrip(film.regionMesh().nCells(), 0.0); scalarField massDrip(film.regionMesh().nCells(), scalar(0));
forAll(delta, i) forAll(delta, celli)
{ {
if (sinAlpha[i] > SMALL && delta[i] > deltaStable_) if (sinAlpha[celli] > SMALL && delta[celli] > deltaStable_)
{ {
scalar lc = sqrt(sigma[i]/(rho[i]*magg)); const scalar lc = sqrt(sigma[celli]/(rho[celli]*magg));
scalar deltaStable = max const scalar deltaStable = max
( (
3*lc*sqrt(1 - sqr(sinAlpha[i])) 3*lc*sqrt(1 - sqr(sinAlpha[celli]))
/(ubarStar_*sqrt(sinAlpha[i])*sinAlpha[i]), /(ubarStar_*sqrt(sinAlpha[celli])*sinAlpha[celli]),
deltaStable_ deltaStable_
); );
Info<< delta[i] << " " << deltaStable << endl; if (delta[celli] > deltaStable)
if (delta[i] > deltaStable)
{ {
const scalar ddelta = max(0.0, delta[i] - deltaStable); const scalar ddelta = max(delta[celli] - deltaStable, 0);
massDrip[i] += massDrip[celli] +=
min(availableMass[i], max(0.0, ddelta*rho[i]*magSf[i])); min
(
availableMass[celli],
max(ddelta*rho[celli]*magSf[celli], 0)
);
} }
} }
} }
// Collect the data to be transferred // Collect the data to be transferred
forAll(massDrip, celli) forAll(massDrip, celli)
{ {
if (massDrip[celli] > 0) if (massDrip[celli] > 0)
{ {
// Set new particle diameter if not already set const scalar rhoc = rho[celli];
if (diameter_[celli] < 0) const scalar diam = dCoeff_*sqrt(sigma[celli]/(rhoc*magg));
{ diameter_[celli] = diam;
diameter_[celli] = parcelDistribution_->sample();
}
scalar& diam = diameter_[celli]; massToInject[celli] += massDrip[celli];
scalar rhoc = rho[celli]; availableMass[celli] -= massDrip[celli];
scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam);
if (massDrip[celli] > minMass) diameterToInject[celli] = diam;
{ addToInjectedMass(massDrip[celli]);
// All drip mass can be injected
massToInject[celli] += massDrip[celli];
availableMass[celli] -= massDrip[celli];
// Set particle diameter
diameterToInject[celli] = diam;
// Retrieve new particle diameter sample
diam = parcelDistribution_->sample();
addToInjectedMass(massDrip[celli]);
}
else
{
// Particle mass below minimum threshold - cannot be injected
massToInject[celli] = 0;
diameterToInject[celli] = 0;
}
} }
else else
{ {

View File

@ -27,10 +27,10 @@ Class
Description Description
Film Dripping mass transfer model. Film Dripping mass transfer model.
If the film thickness exceeds the critical value needed to generate a valid If the film thickness exceeds the critical value needed to generate one or
parcel, the equivalent mass is removed from the film. The critical film more drops, the equivalent mass is removed from the film. The critical film
thickness is calculated from the Rayleigh-Taylor stability analysis thickness is calculated from the Rayleigh-Taylor stability analysis of film
of film flow on an inclined plane by Brun et.al. flow on an inclined plane by Brun et.al.
Reference: Reference:
\verbatim \verbatim
@ -39,7 +39,15 @@ Description
Physics of Fluids (1994-present), 27(8), 084107. Physics of Fluids (1994-present), 27(8), 084107.
\endverbatim \endverbatim
New parcel diameters are sampled from a PDF. The diameter of the drops formed are obtained from the local capillary
length multiplied by the \c dCoeff coefficient which defaults to 3.3.
Reference:
\verbatim
Lefebvre, A. (1988).
Atomization and sprays
(Vol. 1040, No. 2756). CRC press.
\endverbatim
SourceFiles SourceFiles
BrunDrippingInjection.C BrunDrippingInjection.C
@ -50,8 +58,6 @@ SourceFiles
#define BrunDrippingInjection_H #define BrunDrippingInjection_H
#include "injectionModel.H" #include "injectionModel.H"
#include "distributionModel.H"
#include "cachedRandom.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -84,24 +90,19 @@ protected:
// Protected data // Protected data
//- Critical non-dimensional interface velocity //- Critical non-dimensional interface velocity
// Coefficient in the film angle stability function // Coefficient in the film angle stability function.
// defaults to 1.62208 // Defaults to 1.62208
scalar ubarStar_; scalar ubarStar_;
//- Coefficient relating the diameter of the drops formed to
// the capillary length.
// Defaults to 3.3
scalar dCoeff_;
//- Stable film thickness - drips only formed if thickness //- Stable film thickness - drips only formed if thickness
// execeeds this threhold value // execeeds this threhold value
scalar deltaStable_; scalar deltaStable_;
//- Number of particles per parcel
scalar particlesPerParcel_;
//- Random number generator
cachedRandom rndGen_;
//- Parcel size PDF model
const autoPtr<distributionModels::distributionModel>
parcelDistribution_;
//- Diameters of particles to inject into the dripping //- Diameters of particles to inject into the dripping
scalarList diameter_; scalarList diameter_;