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