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