PilchErdman.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2013 OpenFOAM Foundation
9  Copyright (C) 2021 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
29 #include "PilchErdman.H"
30 
31 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32 
33 template<class CloudType>
35 (
36  const dictionary& dict,
37  CloudType& owner
38 )
39 :
40  BreakupModel<CloudType>(dict, owner, typeName),
41  B1_(0.375),
42  B2_(0.2274)
43 {
44  if (!this->defaultCoeffs(true))
45  {
46  this->coeffDict().readEntry("B1", B1_);
47  this->coeffDict().readEntry("B2", B2_);
48  }
49 }
50 
51 
52 template<class CloudType>
54 :
55  BreakupModel<CloudType>(bum),
56  B1_(bum.B1_),
57  B2_(bum.B2_)
58 {}
59 
60 
61 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
62 
63 template<class CloudType>
65 (
66  const scalar dt,
67  const vector& g,
68  scalar& d,
69  scalar& tc,
70  scalar& ms,
71  scalar& nParticle,
72  scalar& KHindex,
73  scalar& y,
74  scalar& yDot,
75  const scalar d0,
76  const scalar rho,
77  const scalar mu,
78  const scalar sigma,
79  const vector& U,
80  const scalar rhoc,
81  const scalar muc,
82  const vector& Urel,
83  const scalar Urmag,
84  const scalar tMom,
85  scalar& dChild,
86  scalar& massChild
87 )
88 {
89  // Weber number - eq (1)
90  const scalar We = rhoc*sqr(Urmag)*d/sigma;
91 
92  // Ohnesorge number - eq (2)
93  const scalar Oh = mu/sqrt(rho*d*sigma);
94 
95  // Critical Weber number - eq (5)
96  const scalar Wec = 12.0*(1.0 + 1.077*pow(Oh, 1.6));
97 
98  if (We > Wec)
99  {
100  // We > 2670, wave crest stripping - eq (12)
101  scalar taubBar = 5.5;
102 
103  if (We < 2670)
104  {
105  if (We > 351)
106  {
107  // sheet stripping - eq (11)
108  taubBar = 0.766*pow(We - 12.0, 0.25);
109  }
110  else if (We > 45)
111  {
112  // bag-and-stamen breakup - eq (10)
113  taubBar = 14.1*pow(We - 12.0, -0.25);
114  }
115  else if (We > 18)
116  {
117  // bag breakup - eq (9)
118  taubBar = 2.45*pow(We - 12.0, 0.25);
119  }
120  else if (We > 12)
121  {
122  // vibrational breakup - eq (8)
123  taubBar = 6.0*pow(We - 12.0, -0.25);
124  }
125  else
126  {
127  // no break-up
128  taubBar = GREAT;
129  }
130  }
131 
132  const scalar rho12 = sqrt(rhoc/rho);
133 
134  // velocity of fragmenting drop - eq (20)
135  const scalar Vd = Urmag*rho12*(B1_*taubBar + B2_*sqr(taubBar));
136 
137  // maximum stable diameter - eq (33)
138  const scalar Vd1 = max(sqr(1.0 - Vd/Urmag), SMALL);
139  const scalar dStable = Wec*sigma/(Vd1*rhoc*sqr(Urmag));
140 
141  if (d < dStable)
142  {
143  // droplet diameter already stable = no break-up
144  // - do not update d and nParticle
145  return false;
146  }
147  else
148  {
149  const scalar semiMass = nParticle*pow3(d);
150 
151  // invert eq (3) to create a dimensional break-up time
152  const scalar taub = taubBar*d/(Urmag*rho12);
153 
154  // update droplet diameter according to the rate eq (implicitly)
155  const scalar frac = dt/taub;
156  d = (d + frac*dStable)/(1.0 + frac);
157 
158  // correct the number of particles to conserve mass
159  nParticle = semiMass/pow3(d);
160  }
161  }
162 
163  return false;
164 }
165 
166 
167 // ************************************************************************* //
Foam::PilchErdman::update
virtual bool update(const scalar dt, const vector &g, scalar &d, scalar &tc, scalar &ms, scalar &nParticle, scalar &KHindex, scalar &y, scalar &yDot, const scalar d0, const scalar rho, const scalar mu, const scalar sigma, const vector &U, const scalar rhoc, const scalar muc, const vector &Urel, const scalar Urmag, const scalar tMom, scalar &dChild, scalar &massChild)
Update the parcel properties.
Definition: PilchErdman.C:65
Foam::constant::physicoChemical::mu
const dimensionedScalar mu
Atomic mass unit.
Definition: createFieldRefs.H:4
Urel
Urel
Definition: pEqn.H:56
Foam::PilchErdman
Particle secondary breakup model based on Pilch-Erdman total droplet breakup model.
Definition: PilchErdman.H:111
rho
rho
Definition: readInitialConditions.H:88
PilchErdman.H
Foam::pow3
dimensionedScalar pow3(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:89
Foam::PilchErdman::PilchErdman
PilchErdman(const dictionary &, CloudType &)
Construct from dictionary.
Definition: PilchErdman.C:35
Foam::pow
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
Definition: dimensionedScalar.C:75
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
Foam::DSMCCloud
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:71
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
g
const uniformDimensionedVectorField & g
Definition: createFluidFields.H:26
Foam::BreakupModel
Templated break-up model class.
Definition: SprayCloud.H:50
U
U
Definition: pEqn.H:72
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:51
Foam::Vector< scalar >
Foam::sqrt
dimensionedScalar sqrt(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:144
sigma
dimensionedScalar sigma("sigma", dimMass/sqr(dimTime), transportProperties)
y
scalar y
Definition: LISASMDCalcMethod1.H:14