SprayParcel.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2015 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 Class
25  Foam::SprayParcel
26 
27 Description
28  Reacing spray parcel, with added functionality for atomization and breakup
29 
30 \*---------------------------------------------------------------------------*/
31 
32 #ifndef SprayParcel_H
33 #define SprayParcel_H
34 
35 #include "particle.H"
36 #include "demandDrivenEntry.H"
37 
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
39 
40 namespace Foam
41 {
42 
43 template<class ParcelType>
44 class SprayParcel;
45 
46 template<class ParcelType>
47 Ostream& operator<<
48 (
49  Ostream&,
51 );
52 
53 /*---------------------------------------------------------------------------*\
54  Class SprayParcel Declaration
55 \*---------------------------------------------------------------------------*/
56 
57 template<class ParcelType>
58 class SprayParcel
59 :
60  public ParcelType
61 {
62  // Private data
63 
64  //- Size in bytes of the fields
65  static const std::size_t sizeofFields_;
66 
67 
68 public:
69 
70  //- Class to hold reacting particle constant properties
71  class constantProperties
72  :
73  public ParcelType::constantProperties
74  {
75  // Private data
76 
77  //- Particle initial surface tension [N/m]
79 
80  //- Particle initial dynamic viscosity [Pa.s]
82 
83 
84  public:
85 
86  // Constructors
87 
88  //- Null constructor
90 
91  //- Copy constructor
93 
94  //- Construct from dictionary
95  constantProperties(const dictionary& parentDict);
96 
97  //- Construct from components
99  (
100  const label parcelTypeId,
101  const scalar rhoMin,
102  const scalar rho0,
103  const scalar minParcelMass,
104  const scalar youngsModulus,
105  const scalar poissonsRatio,
106  const scalar T0,
107  const scalar TMin,
108  const scalar TMax,
109  const scalar Cp0,
110  const scalar epsilon0,
111  const scalar f0,
112  const scalar Pr,
113  const scalar pMin,
114  const Switch& constantVolume,
115  const scalar sigma0,
116  const scalar mu0
117  );
118 
119 
120  // Access
121 
122  //- Return const access to the initial surface tension
123  inline scalar sigma0() const;
124 
125  //- Return const access to the initial dynamic viscosity
126  inline scalar mu0() const;
127  };
128 
129 
130 protected:
131 
132  // Protected data
133 
134  // Spray parcel properties
135 
136  //- Initial droplet diameter
137  scalar d0_;
138 
139  //- Injection position
141 
142  //- Liquid surface tension [N/m]
143  scalar sigma_;
144 
145  //- Liquid dynamic viscosity [Pa.s]
146  scalar mu_;
147 
148  //- Part of liquid core ( >0.5=liquid, <0.5=droplet )
149  scalar liquidCore_;
150 
151  //- Index for KH Breakup
152  scalar KHindex_;
153 
154  //- Spherical deviation
155  scalar y_;
156 
157  //- Rate of change of spherical deviation
158  scalar yDot_;
159 
160  //- Characteristic time (used in atomization and/or breakup model)
161  scalar tc_;
162 
163  //- Stripped parcel mass due to breakup
164  scalar ms_;
165 
166  //- Injected from injector (needed e.g. for calculating distance
167  // from injector)
168  scalar injector_;
169 
170  //- Momentum relaxation time (needed for calculating parcel acc.)
171  scalar tMom_;
172 
173  //- Passive scalar (extra variable to be defined by user)
174  scalar user_;
175 
176 
177 public:
178 
179  // Static data members
180 
181  //- Runtime type information
182  TypeName("SprayParcel");
183 
184  //- String representation of properties
186  (
187  ParcelType,
188  + " d0"
189  + " position0"
190  + " sigma"
191  + " mu"
192  + " liquidCore"
193  + " KHindex"
194  + " y"
195  + " yDot"
196  + " tc"
197  + " ms"
198  + " injector"
199  + " tMom"
200  + " user"
201  );
202 
203 
204  // Constructors
205 
206  //- Construct from owner, position, and cloud owner
207  // Other properties initialised as null
208  inline SprayParcel
209  (
210  const polyMesh& mesh,
211  const vector& position,
212  const label cellI,
213  const label tetFaceI,
214  const label tetPtI
215  );
216 
217  //- Construct from components
218  inline SprayParcel
219  (
220  const polyMesh& mesh,
221  const vector& position,
222  const label cellI,
223  const label tetFaceI,
224  const label tetPtI,
225  const label typeId,
226  const scalar nParticle0,
227  const scalar d0,
228  const scalar dTarget0,
229  const vector& U0,
230  const vector& f0,
231  const vector& angularMomentum0,
232  const vector& torque0,
233  const scalarField& Y0,
234  const scalar liquidCore,
235  const scalar KHindex,
236  const scalar y,
237  const scalar yDot,
238  const scalar tc,
239  const scalar ms,
240  const scalar injector,
241  const scalar tMom,
242  const scalar user,
243  const typename ParcelType::constantProperties& constProps
244  );
245 
246  //- Construct from Istream
248  (
249  const polyMesh& mesh,
250  Istream& is,
251  bool readFields = true
252  );
253 
254  //- Construct as a copy
256  (
257  const SprayParcel& p,
258  const polyMesh& mesh
259  );
260 
261  //- Construct as a copy
262  SprayParcel(const SprayParcel& p);
263 
264  //- Construct and return a (basic particle) clone
265  virtual autoPtr<particle> clone() const
266  {
267  return autoPtr<particle>(new SprayParcel<ParcelType>(*this));
268  }
269 
270  //- Construct and return a (basic particle) clone
271  virtual autoPtr<particle> clone(const polyMesh& mesh) const
272  {
273  return autoPtr<particle>
274  (
275  new SprayParcel<ParcelType>(*this, mesh)
276  );
277  }
278 
279  //- Factory class to read-construct particles used for
280  // parallel transfer
281  class iNew
282  {
283  const polyMesh& mesh_;
284 
285  public:
286 
287  iNew(const polyMesh& mesh)
288  :
289  mesh_(mesh)
290  {}
291 
293  {
295  (
296  new SprayParcel<ParcelType>(mesh_, is, true)
297  );
298  }
299  };
300 
301 
302  // Member Functions
303 
304  // Access
305 
306  //- Return const access to initial droplet diameter
307  inline scalar d0() const;
308 
309  //- Return const access to initial droplet position
310  inline const vector& position0() const;
311 
312  //- Return const access to the liquid surface tension
313  inline scalar sigma() const;
314 
315  //- Return const access to the liquid dynamic viscosity
316  inline scalar mu() const;
317 
318  //- Return const access to liquid core
319  inline scalar liquidCore() const;
320 
321  //- Return const access to Kelvin-Helmholtz breakup index
322  inline scalar KHindex() const;
323 
324  //- Return const access to spherical deviation
325  inline scalar y() const;
326 
327  //- Return const access to rate of change of spherical deviation
328  inline scalar yDot() const;
329 
330  //- Return const access to atomization characteristic time
331  inline scalar tc() const;
332 
333  //- Return const access to stripped parcel mass
334  inline scalar ms() const;
335 
336  //- Return const access to injector id
337  inline scalar injector() const;
338 
339  //- Return const access to momentum relaxation time
340  inline scalar tMom() const;
341 
342  //- Return const access to passive user scalar
343  inline scalar user() const;
344 
345 
346  // Edit
347 
348  //- Return access to initial droplet diameter
349  inline scalar& d0();
350 
351  //- Return access to initial droplet position
352  inline vector& position0();
353 
354  //- Return access to the liquid surface tension
355  inline scalar& sigma();
356 
357  //- Return access to the liquid dynamic viscosity
358  inline scalar& mu();
359 
360  //- Return access to liquid core
361  inline scalar& liquidCore();
362 
363  //- Return access to Kelvin-Helmholtz breakup index
364  inline scalar& KHindex();
365 
366  //- Return access to spherical deviation
367  inline scalar& y();
368 
369  //- Return access to rate of change of spherical deviation
370  inline scalar& yDot();
371 
372  //- Return access to atomization characteristic time
373  inline scalar& tc();
374 
375  //- Return access to stripped parcel mass
376  inline scalar& ms();
377 
378  //- Return access to injector id
379  inline scalar& injector();
380 
381  //- Return access to momentum relaxation time
382  inline scalar& tMom();
383 
384  //- Return access to passive user scalar
385  inline scalar& user();
386 
387 
388  // Main calculation loop
389 
390  //- Set cell values
391  template<class TrackData>
392  void setCellValues
393  (
394  TrackData& td,
395  const scalar dt,
396  const label cellI
397  );
398 
399  //- Correct parcel properties according to atomization model
400  template<class TrackData>
401  void calcAtomization
402  (
403  TrackData& td,
404  const scalar dt,
405  const label cellI
406  );
407 
408  //- Correct parcel properties according to breakup model
409  template<class TrackData>
410  void calcBreakup
411  (
412  TrackData& td,
413  const scalar dt,
414  const label cellI
415  );
416 
417  //- Correct cell values using latest transfer information
418  template<class TrackData>
420  (
421  TrackData& td,
422  const scalar dt,
423  const label cellI
424  );
425 
426  //- Correct surface values due to emitted species
427  template<class TrackData>
429  (
430  TrackData& td,
431  const label cellI,
432  const scalar T,
433  const scalarField& Cs,
434  scalar& rhos,
435  scalar& mus,
436  scalar& Pr,
437  scalar& kappa
438  );
439 
440  //- Update parcel properties over the time interval
441  template<class TrackData>
442  void calc
443  (
444  TrackData& td,
445  const scalar dt,
446  const label cellI
447  );
448 
449  //- Calculate the chi-factor for flash-boiling for the
450  // atomization model
451  template<class TrackData>
452  scalar chi
453  (
454  TrackData& td,
455  const scalarField& X
456  ) const;
457 
458  //- Solve the TAB equation
459  template<class TrackData>
460  void solveTABEq
461  (
462  TrackData& td,
463  const scalar dt
464  );
465 
466 
467  // I-O
468 
469  //- Read
470  template<class CloudType, class CompositionType>
471  static void readFields
472  (
473  CloudType& c,
474  const CompositionType& compModel
475  );
476 
477  //- Read - no composition
478  template<class CloudType>
479  static void readFields(CloudType& c);
480 
481  //- Write
482  template<class CloudType, class CompositionType>
483  static void writeFields
484  (
485  const CloudType& c,
486  const CompositionType& compModel
487  );
488 
489  //- Write - composition supplied
490  template<class CloudType>
491  static void writeFields(const CloudType& c);
492 
493 
494  // Ostream Operator
495 
496  friend Ostream& operator<< <ParcelType>
497  (
498  Ostream&,
500  );
501 };
502 
503 
504 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
505 
506 } // End namespace Foam
507 
508 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
509 
510 #include "SprayParcelI.H"
511 
512 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
513 
514 #ifdef NoRepository
515  #include "SprayParcel.C"
516 #endif
517 
518 
519 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
520 
521 #endif
522 
523 // ************************************************************************* //
Foam::Switch
A simple wrapper around bool so that it can be read as a word: true/false, on/off,...
Definition: Switch.H:60
Foam::SprayParcel::y
scalar y() const
Return const access to spherical deviation.
Definition: SprayParcelI.H:259
Foam::SprayParcel::position0_
vector position0_
Injection position.
Definition: SprayParcel.H:139
Foam::SprayParcel::tc
scalar tc() const
Return const access to atomization characteristic time.
Definition: SprayParcelI.H:273
p
p
Definition: pEqn.H:62
Foam::SprayParcel::clone
virtual autoPtr< particle > clone() const
Construct and return a (basic particle) clone.
Definition: SprayParcel.H:264
Foam::SprayParcel::tc_
scalar tc_
Characteristic time (used in atomization and/or breakup model)
Definition: SprayParcel.H:160
Foam::SprayParcel::TypeName
TypeName("SprayParcel")
Runtime type information.
demandDrivenEntry.H
pMin
dimensionedScalar pMin("pMin", dimPressure, fluid)
Foam::SprayParcel::liquidCore_
scalar liquidCore_
Part of liquid core ( >0.5=liquid, <0.5=droplet )
Definition: SprayParcel.H:148
Foam::SprayParcel::sizeofFields_
static const std::size_t sizeofFields_
Size in bytes of the fields.
Definition: SprayParcel.H:64
Foam::cp
bool cp(const fileName &src, const fileName &dst)
Copy, recursively if necessary, the source to the destination.
Definition: POSIX.C:755
Foam::readFields
This function object reads fields from the time directories and adds them to the mesh database for fu...
Definition: readFields.H:104
Foam::constant::electromagnetic::kappa
const dimensionedScalar kappa
Coulomb constant: default SI units: [N.m2/C2].
Foam::SprayParcel::readFields
static void readFields(CloudType &c, const CompositionType &compModel)
Read.
Definition: SprayParcelIO.C:121
Foam::SprayParcel::d0_
scalar d0_
Initial droplet diameter.
Definition: SprayParcel.H:136
Foam::SprayParcel::position0
const vector & position0() const
Return const access to initial droplet position.
Definition: SprayParcelI.H:224
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:74
Foam::constant::electromagnetic::epsilon0
const dimensionedScalar epsilon0
Electric constant: default SI units: [F/m].
Foam::SprayParcel::correctSurfaceValues
void correctSurfaceValues(TrackData &td, const label cellI, const scalar T, const scalarField &Cs, scalar &rhos, scalar &mus, scalar &Pr, scalar &kappa)
Correct surface values due to emitted species.
Foam::SprayParcel::ms_
scalar ms_
Stripped parcel mass due to breakup.
Definition: SprayParcel.H:163
Foam::SprayParcel::ms
scalar ms() const
Return const access to stripped parcel mass.
Definition: SprayParcelI.H:280
rhoMin
PtrList< dimensionedScalar > rhoMin(fluidRegions.size())
Foam::SprayParcel::sigma
scalar sigma() const
Return const access to the liquid surface tension.
Definition: SprayParcelI.H:231
Foam::SprayParcel::user
scalar user() const
Return const access to passive user scalar.
Definition: SprayParcelI.H:301
Foam::SprayParcel::iNew
Factory class to read-construct particles used for.
Definition: SprayParcel.H:280
Foam::SprayParcel::sigma_
scalar sigma_
Liquid surface tension [N/m].
Definition: SprayParcel.H:142
SprayParcelI.H
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::SprayParcel::mu
scalar mu() const
Return const access to the liquid dynamic viscosity.
Definition: SprayParcelI.H:238
Foam::Istream
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:57
Foam::SprayParcel::constantProperties::sigma0
scalar sigma0() const
Return const access to the initial surface tension.
Definition: SprayParcelI.H:200
Foam::SprayParcel::constantProperties::mu0_
demandDrivenEntry< scalar > mu0_
Particle initial dynamic viscosity [Pa.s].
Definition: SprayParcel.H:80
Y0
scalarList Y0(nSpecie, 0.0)
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:55
Foam::SprayParcel::constantProperties::constantProperties
constantProperties()
Null constructor.
Definition: SprayParcelI.H:29
Foam::SprayParcel::solveTABEq
void solveTABEq(TrackData &td, const scalar dt)
Solve the TAB equation.
Definition: SprayParcel.C:378
Foam::SprayParcel::iNew::operator()
autoPtr< SprayParcel< ParcelType > > operator()(Istream &is) const
Definition: SprayParcel.H:291
Foam::SprayParcel::injector
scalar injector() const
Return const access to injector id.
Definition: SprayParcelI.H:287
Foam::SprayParcel::chi
scalar chi(TrackData &td, const scalarField &X) const
Calculate the chi-factor for flash-boiling for the.
Foam::SprayParcel::yDot
scalar yDot() const
Return const access to rate of change of spherical deviation.
Definition: SprayParcelI.H:266
Foam::SprayParcel
Reacing spray parcel, with added functionality for atomization and breakup.
Definition: SprayParcel.H:43
Foam::SprayParcel::cellValueSourceCorrection
void cellValueSourceCorrection(TrackData &td, const scalar dt, const label cellI)
Correct cell values using latest transfer information.
Definition: SprayParcel.C:49
Pr
dimensionedScalar Pr("Pr", dimless, laminarTransport)
Foam::DSMCCloud
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:68
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
Foam::SprayParcel::tMom_
scalar tMom_
Momentum relaxation time (needed for calculating parcel acc.)
Definition: SprayParcel.H:170
Foam::SprayParcel::clone
virtual autoPtr< particle > clone(const polyMesh &mesh) const
Construct and return a (basic particle) clone.
Definition: SprayParcel.H:270
Foam::SprayParcel::tMom
scalar tMom() const
Return const access to momentum relaxation time.
Definition: SprayParcelI.H:294
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:18
Foam::SprayParcel::iNew::iNew
iNew(const polyMesh &mesh)
Definition: SprayParcel.H:286
Foam::SprayParcel::y_
scalar y_
Spherical deviation.
Definition: SprayParcel.H:154
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::SprayParcel::setCellValues
void setCellValues(TrackData &td, const scalar dt, const label cellI)
Set cell values.
Definition: SprayParcel.C:36
Foam::SprayParcel::KHindex_
scalar KHindex_
Index for KH Breakup.
Definition: SprayParcel.H:151
Foam::SprayParcel::mu_
scalar mu_
Liquid dynamic viscosity [Pa.s].
Definition: SprayParcel.H:145
Foam::SprayParcel::KHindex
scalar KHindex() const
Return const access to Kelvin-Helmholtz breakup index.
Definition: SprayParcelI.H:252
Foam::SprayParcel::user_
scalar user_
Passive scalar (extra variable to be defined by user)
Definition: SprayParcel.H:173
Foam::SprayParcel::calcBreakup
void calcBreakup(TrackData &td, const scalar dt, const label cellI)
Correct parcel properties according to breakup model.
Definition: SprayParcel.C:224
Foam::SprayParcel::writeFields
static void writeFields(const CloudType &c, const CompositionType &compModel)
Write.
Definition: SprayParcelIO.C:211
Foam::SprayParcel::calc
void calc(TrackData &td, const scalar dt, const label cellI)
Update parcel properties over the time interval.
Definition: SprayParcel.C:62
SprayParcel.C
Foam::SprayParcel::AddToPropertyList
AddToPropertyList(ParcelType,+" d0"+" position0"+" sigma"+" mu"+" liquidCore"+" KHindex"+" y"+" yDot"+" tc"+" ms"+" injector"+" tMom"+" user")
String representation of properties.
Foam::autoPtr
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:117
rho0
scalar rho0
Definition: readInitialConditions.H:97
Foam::SprayParcel::yDot_
scalar yDot_
Rate of change of spherical deviation.
Definition: SprayParcel.H:157
Foam::SprayParcel::liquidCore
scalar liquidCore() const
Return const access to liquid core.
Definition: SprayParcelI.H:245
Foam::Vector< scalar >
Foam::demandDrivenEntry< scalar >
Foam::SprayParcel::calcAtomization
void calcAtomization(TrackData &td, const scalar dt, const label cellI)
Correct parcel properties according to atomization model.
Definition: SprayParcel.C:151
particle.H
Foam::constant::universal::c
const dimensionedScalar c
Speed of light in a vacuum.
Foam::SprayParcel::injector_
scalar injector_
Injected from injector (needed e.g. for calculating distance.
Definition: SprayParcel.H:167
Foam::SprayParcel::SprayParcel
SprayParcel(const polyMesh &mesh, const vector &position, const label cellI, const label tetFaceI, const label tetPtI)
Construct from owner, position, and cloud owner.
Definition: SprayParcelI.H:108
Foam::SprayParcel::constantProperties::mu0
scalar mu0() const
Return const access to the initial dynamic viscosity.
Definition: SprayParcelI.H:208
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:53
Foam::SprayParcel::d0
scalar d0() const
Return const access to initial droplet diameter.
Definition: SprayParcelI.H:217
Foam::SprayParcel::iNew::mesh_
const polyMesh & mesh_
Definition: SprayParcel.H:282
Foam::SprayParcel::constantProperties::sigma0_
demandDrivenEntry< scalar > sigma0_
Particle initial surface tension [N/m].
Definition: SprayParcel.H:77
Foam::SprayParcel::constantProperties
Class to hold reacting particle constant properties.
Definition: SprayParcel.H:70