thermoSingleLayer.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-2022 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 "thermoSingleLayer.H"
27 #include "fluidThermo.H"
28 #include "basicSpecieMixture.H"
29 #include "liquidThermo.H"
30 
31 #include "fvcDdt.H"
32 #include "fvcDiv.H"
33 #include "fvcFlux.H"
34 
35 #include "fvmDdt.H"
36 #include "fvmDiv.H"
37 #include "fvmSup.H"
38 
40 #include "mixedFvPatchFields.H"
42 #include "distributionMap.H"
43 #include "constants.H"
44 
45 #include "heatTransferModel.H"
46 #include "phaseChangeModel.H"
47 #include "filmRadiationModel.H"
48 
50 
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 
53 namespace Foam
54 {
55 namespace regionModels
56 {
57 namespace surfaceFilmModels
58 {
59 
60 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
61 
62 defineTypeNameAndDebug(thermoSingleLayer, 0);
63 
64 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
65 
67 {
68  // No additional properties to read
70 }
71 
72 
74 {
76 
78 
80 }
81 
82 
84 {
85  volScalarField& T = thermo_->T();
86 
88 
89  volScalarField::Boundary& heBf = thermo_->he().boundaryFieldRef();
90 
91  forAll(heBf, patchi)
92  {
93  const fvPatchField<scalar>& Tp = T.boundaryField()[patchi];
95  {
96  heBf[patchi] == thermo().he(Tp, patchi);
97  }
98  }
99 }
100 
101 
103 {
105 
107 
108  // Update primary region fields on local region via direct mapped (coupled)
109  // boundary conditions
111  forAll(YPrimary_, i)
112  {
113  YPrimary_[i].correctBoundaryConditions();
114  }
115 }
116 
117 
119 {
121 
123 
125 
126  // Convert accumulated source terms into per unit area per unit time
127  const scalar deltaT = time_.deltaTValue();
128  forAll(hSpPrimaryBf, patchi)
129  {
130  scalarField rpriMagSfdeltaT
131  (
132  (1/deltaT)/primaryMesh().magSf().boundaryField()[patchi]
133  );
134 
135  hSpPrimaryBf[patchi] *= rpriMagSfdeltaT;
136  }
137 
138  // Retrieve the source fields from the primary region
139  toRegion(hSp_, hSpPrimaryBf);
140  hSp_.field() /= VbyA();
141 }
142 
143 
145 {
146  if (hydrophilic_)
147  {
148  const scalar hydrophilicDry = hydrophilicDryScale_*deltaWet_;
149  const scalar hydrophilicWet = hydrophilicWetScale_*deltaWet_;
150 
151  forAll(coverage_, i)
152  {
153  if ((coverage_[i] < 0.5) && (delta_[i] > hydrophilicWet))
154  {
155  coverage_[i] = 1;
156  }
157  else if ((coverage_[i] > 0.5) && (delta_[i] < hydrophilicDry))
158  {
159  coverage_[i] = 0;
160  }
161  }
162 
164  }
165  else
166  {
168  }
169 }
170 
171 
173 {
175 
176  // Update heat transfer coefficient sub-models
177  htcs_->correct();
178  htcw_->correct();
179 
180  // Update radiation
181  radiation_->correct();
182 
183  // Update ejection model - mass returned is mass available for ejection
185 
186  phaseChange_->correct
187  (
188  time_.deltaTValue(),
192  );
193 
194  const volScalarField::Internal rMagSfDt((1/time().deltaT())/magSf());
195 
196  // Vapour recoil pressure
197  pSp_ -= sqr(rMagSfDt*primaryMassTrans_())/(2*rhoPrimary_());
198 
199  // Update transfer model - mass returned is mass available for transfer
201  (
203  primaryMassTrans_,
206  );
207 
208  const volScalarField::Internal rVDt
209  (
210  1/(time().deltaT()*regionMesh().V())
211  );
212 
213  volScalarField& he = thermo_->he();
214 
215  // Update source fields
216  rhoSp_ += rVDt*(cloudMassTrans_() + primaryMassTrans_());
217  USp_ += rVDt*(cloudMassTrans_()*U_() + primaryMomentumTrans_());
218  hSp_ += rVDt*(cloudMassTrans_()*he() + primaryEnergyTrans_());
219 
220  momentumTransport_->correct();
221 }
222 
223 
225 {
227 
228  const volScalarField::Internal& T = thermo().T();
229 
230  const tmp<volScalarField> tCpv = thermo().Cpv();
231  const volScalarField::Internal& Cpv = tCpv();
232 
233  return
234  (
235  // Heat-transfer to the primary region
236  - fvm::Sp((htcs_->h()/VbyA())/Cpv, h)
237  + (htcs_->h()/VbyA())*(h()/Cpv + coverage*(TPrimary_() - T))
238 
239  // Heat-transfer to the wall
240  - fvm::Sp((htcw_->h()/VbyA())/Cpv, h)
241  + (htcw_->h()/VbyA())*(h()/Cpv + coverage*(Tw() - T))
242  );
243 }
244 
245 
247 {
249 
251 
252  volScalarField& he = thermo_->he();
253 
254  fvScalarMatrix heEqn
255  (
256  fvm::ddt(alpha_, rho(), he) + fvm::div(phi_, he)
257  - fvm::Sp(continuityErr_, he)
258  ==
259  - hSp_
260  + q(he)
261  + radiation_->Shs()/VbyA()
262  );
263 
264  heEqn.relax();
265 
266  heEqn.solve();
267 
268  thermo_->correct();
269 }
270 
271 
272 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
273 
275 (
276  const word& modelType,
277  const fvMesh& mesh,
278  const dimensionedVector& g,
279  const word& regionType,
280  const bool readFields
281 )
282 :
283  kinematicSingleLayer(modelType, mesh, g, regionType, false),
284 
286  (
288  (
289  IOobject::groupName(physicalProperties::typeName, phaseName_)
290  )
291  ),
292 
294  (
295  IOobject
296  (
297  "primaryEnergyTrans",
298  time().timeName(),
299  regionMesh(),
302  ),
303  regionMesh(),
305  zeroGradientFvPatchScalarField::typeName
306  ),
307 
308  deltaWet_(coeffs_.lookup<scalar>("deltaWet")),
309  hydrophilic_(readBool(coeffs_.lookup("hydrophilic"))),
312 
313  hSp_
314  (
315  IOobject
316  (
317  "hSp",
318  time().timeName(),
319  regionMesh(),
322  ),
323  regionMesh(),
325  ),
326 
328  (
329  IOobject
330  (
331  hSp_.name(),
332  time().timeName(),
333  primaryMesh(),
336  ),
337  primaryMesh(),
339  ),
340 
341  TPrimary_
342  (
343  IOobject
344  (
345  "T", // Same name as T on primary region to enable mapping
346  time().timeName(),
347  regionMesh(),
350  ),
351  regionMesh(),
353  this->mappedFieldAndInternalPatchTypes<scalar>()
354  ),
355 
356  YPrimary_(),
357 
358  htcs_
359  (
360  heatTransferModel::New(*this, coeffs().subDict("upperSurfaceModels"))
361  ),
362 
363  htcw_
364  (
365  heatTransferModel::New(*this, coeffs().subDict("lowerSurfaceModels"))
366  ),
367 
370  Tmin_(-vGreat),
371  Tmax_(vGreat)
372 {
373  if (coeffs().readIfPresent("Tmin", Tmin_))
374  {
375  Info<< " limiting minimum temperature to " << Tmin_ << endl;
376  }
377 
378  if (coeffs().readIfPresent("Tmax", Tmax_))
379  {
380  Info<< " limiting maximum temperature to " << Tmax_ << endl;
381  }
382 
383  if (isA<basicSpecieMixture>(primaryThermo_))
384  {
385  const basicSpecieMixture& primarySpecieThermo =
386  refCast<const basicSpecieMixture>(primaryThermo_);
387 
388  YPrimary_.setSize(primarySpecieThermo.species().size());
389 
390  forAll(primarySpecieThermo.species(), i)
391  {
392  YPrimary_.set
393  (
394  i,
395  new volScalarField
396  (
397  IOobject
398  (
399  primarySpecieThermo.species()[i],
400  time().timeName(),
401  regionMesh(),
404  ),
405  regionMesh(),
407  this->mappedFieldAndInternalPatchTypes<scalar>()
408  )
409  );
410  }
411  }
412 
413  if (hydrophilic_)
414  {
415  coeffs_.lookup("hydrophilicDryScale") >> hydrophilicDryScale_;
416  coeffs_.lookup("hydrophilicWetScale") >> hydrophilicWetScale_;
417  }
418 
419  if (readFields)
420  {
422 
423  correctCoverage();
424 
426  (
427  IOobject
428  (
429  "phi",
430  time().timeName(),
431  regionMesh(),
434  false
435  ),
437  );
438 
439  phi_ == phi;
440  }
441 }
442 
443 
444 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
445 
447 {}
448 
449 
450 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
451 
453 (
454  const label patchi,
455  const label facei,
456  const scalar massSource,
457  const vector& momentumSource,
458  const scalar pressureSource,
459  const scalar energySource
460 )
461 {
463  (
464  patchi,
465  facei,
466  massSource,
467  momentumSource,
468  pressureSource,
469  energySource
470  );
471 
472  DebugInFunction << " energy = " << energySource << endl;
473 
474  hSpPrimary_.boundaryFieldRef()[patchi][facei] -= energySource;
475 }
476 
477 
479 {
481 
484 }
485 
486 
488 {
490 
491  // Update film coverage indicator
492  correctCoverage();
493 
495 
496  // Predict delta_ from continuity
497  predictDelta();
498 
499  // Update sub-models to provide updated source contributions
500  updateSubmodels();
501 
502  // Predict delta_ from continuity with updated source
503  predictDelta();
504 
505  // Capillary pressure
506  const volScalarField pc(this->pc());
507 
508  while (pimple_.loop())
509  {
510  // External pressure
511  const volScalarField pe(this->pe());
512 
513  // Solve for momentum for U_
514  const fvVectorMatrix UEqn(solveMomentum(pc, pe));
515 
516  // Solve energy for h_ - also updates thermo
517  solveEnergy();
518 
519  // Film thickness correction loop
520  while (pimple_.correct())
521  {
522  solveAlpha(UEqn, pc, pe);
523  }
524  }
525 
526  // Reset source terms for next time integration
528 }
529 
530 
532 {
533  return thermo().T();
534 }
535 
536 
538 {
540  (
542  (
543  "Tw",
544  regionMesh(),
546  )
547  );
548 
550 
551  const volScalarField& T = thermo().T();
552 
553  // Push boundary film temperature into wall temperature internal field
554  for (label i=0; i<intCoupledPatchIDs_.size(); i++)
555  {
556  label patchi = intCoupledPatchIDs_[i];
557  const polyPatch& pp = regionMesh().boundaryMesh()[patchi];
559  T.boundaryField()[patchi];
560  }
561 
562  return tTw;
563 }
564 
565 
567 {
569 
570  const scalarField& Tinternal = thermo().T();
571 
572  Info<< indent << "min/mean/max(T) = "
573  << gMin(Tinternal) << ", "
574  << gAverage(Tinternal) << ", "
575  << gMax(Tinternal) << nl;
576 
577  phaseChange_->info(Info);
578 }
579 
580 
582 (
583  const label i
584 ) const
585 {
586  const basicSpecieMixture& primarySpecieThermo =
587  refCast<const basicSpecieMixture>(primaryThermo_);
588 
589  // Set local liquidThermo properties
590  const liquidProperties& liquidThermo =
591  refCast<const heRhoThermopureMixtureliquidProperties>(thermo())
592  .cellThermoMixture(0).properties();
593 
594  const label vapId = primarySpecieThermo.species()[liquidThermo.name()];
595 
597  (
599  (
600  IOobject::modelName("SY(" + Foam::name(i) + ")", typeName),
601  primaryMesh(),
603  )
604  );
605 
606  if (vapId == i)
607  {
608  scalarField& SYi = tSYi.ref();
609  const scalarField& V = primaryMesh().V();
610  const scalar dt = time().deltaTValue();
611 
613  {
614  const label filmPatchi = intCoupledPatchIDs_[i];
615 
616  scalarField patchMass =
617  primaryMassTrans_.boundaryField()[filmPatchi];
618 
619  toPrimary(filmPatchi, patchMass);
620 
621  const label primaryPatchi = primaryPatchIDs()[i];
622  const unallocLabelList& cells =
623  primaryMesh().boundaryMesh()[primaryPatchi].faceCells();
624 
625  forAll(patchMass, j)
626  {
627  SYi[cells[j]] += patchMass[j]/(V[cells[j]]*dt);
628  }
629  }
630  }
631 
632  return tSYi;
633 }
634 
635 
637 {
639  (
641  (
642  IOobject::modelName("Sh", typeName),
643  primaryMesh(),
645  )
646  );
647 
648  scalarField& Sh = tSh.ref();
649  const scalarField& V = primaryMesh().V();
650  const scalar dt = time_.deltaTValue();
651 
653  {
654  const label filmPatchi = intCoupledPatchIDs_[i];
655 
656  scalarField patchEnergy =
657  primaryEnergyTrans_.boundaryField()[filmPatchi];
658 
659  toPrimary(filmPatchi, patchEnergy);
660 
661  const unallocLabelList& cells =
662  primaryMesh().boundaryMesh()[primaryPatchIDs()[i]].faceCells();
663 
664  forAll(patchEnergy, j)
665  {
666  Sh[cells[j]] += patchEnergy[j]/(V[cells[j]]*dt);
667  }
668  }
669 
670  return tSh;
671 }
672 
673 
674 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
675 
676 } // end namespace Foam
677 } // end namespace regionModels
678 } // end namespace surfaceFilmModels
679 
680 // ************************************************************************* //
virtual bool read()
Read control parameters from dictionary.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Definition: polyMesh.H:453
bool isA(const Type &t)
Check if a dynamic_cast to typeid is possible.
Definition: typeInfo.H:134
virtual tmp< volScalarField::Internal > Ts() const
Return the film surface temperature [K].
autoPtr< heatTransferModel > htcw_
Heat transfer coefficient between wall and film [W/m^2/K].
autoPtr< phaseChangeModel > phaseChange_
Phase change.
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
const volScalarField & VbyA() const
Return the cell layer volume/area [m].
thermoSingleLayer(const word &modelType, const fvMesh &mesh, const dimensionedVector &g, const word &regionType, const bool readFields=true)
Construct from components.
virtual void resetPrimaryRegionSourceTerms()
Reset source term fields.
const word & name() const
Return name.
Definition: IOobject.H:315
Ostream & indent(Ostream &os)
Indent stream.
Definition: Ostream.H:221
static tmp< DimensionedField< Type, GeoMesh > > New(const word &name, const Mesh &mesh, const dimensionSet &)
Return a temporary field constructed from name, mesh.
volScalarField primaryMassTrans_
Film mass available for transfer to the primary region.
volVectorField primaryMomentumTrans_
Film momentum transfer.
virtual void correctCoverage()
Correct film coverage field.
scalar Tmax_
Maximum temperature limit (optional)
virtual void transferPrimaryRegionSourceFields()
Transfer source fields from the primary region to the film region.
Type gMin(const FieldField< Field, Type > &f)
const Boundary & boundaryField() const
Return const-reference to the boundary field.
volScalarField::Internal continuityErr_
Current continuity error caused by delta_ bounding.
T & ref() const
Return non-const reference or generate a fatal error.
Definition: tmpI.H:181
dimensionedSymmTensor sqr(const dimensionedVector &dv)
virtual tmp< fvScalarMatrix > q(volScalarField &h) const
Return the wall/surface heat transfer term for the enthalpy equation.
void size(const label)
Override size to be inconsistent with allocated storage.
Definition: ListI.H:164
static autoPtr< radiationModel > New(surfaceFilmRegionModel &film, const dictionary &dict)
Return a reference to the selected phase change model.
virtual void transferPrimaryRegionThermoFields()
Transfer thermo fields from the primary region to the film region.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
static autoPtr< phaseChangeModel > New(surfaceFilmRegionModel &film, const dictionary &dict)
Return a reference to the selected phase change model.
volScalarField::Internal hSp_
Energy [J/m2/s].
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:66
volVectorField::Internal USp_
Momentum [kg/m/s^2].
virtual void transferPrimaryRegionThermoFields()
Transfer thermo fields from the primary region to the film region.
scalarField availableMass_
Available mass for transfer via sub-models.
volScalarField cloudDiameterTrans_
Parcel diameters originating from film to cloud.
const dimensionSet dimless
volScalarField coverage_
Film coverage indicator, 1 = covered, 0 = uncovered [].
bool readBool(Istream &)
Definition: boolIO.C:60
autoPtr< heatTransferModel > htcs_
Heat transfer coefficient between film surface and primary.
const Time & time() const
Return the reference to the time database.
Definition: regionModelI.H:37
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
const DimensionedField< scalar, volMesh > & V() const
Return cell volumes.
Specialisation of basicMixture for a mixture consisting of a number for molecular species...
const Type & lookupObject(const word &name) const
Lookup and return the object of the given Type.
const dimensionedScalar h
Planck constant.
virtual tmp< volScalarField > Cpv() const =0
Heat capacity at constant pressure/volume [J/kg/K].
Macros for easy insertion into run-time selection tables.
const dimensionSet dimLength
virtual volScalarField & he()=0
Enthalpy/Internal energy [J/kg].
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
Definition: dictionary.C:1002
virtual tmp< fvVectorMatrix > solveMomentum(const volScalarField &pc, const volScalarField &pe)
Solve for film velocity.
virtual void transferPrimaryRegionSourceFields()
Transfer source fields from the primary region to the film region.
Calculate the first temporal derivative.
dimensionedScalar pos(const dimensionedScalar &ds)
const dimensionSet dimTime
const dimensionSet & dimensions() const
Return dimensions.
void toPrimary(const label regionPatchi, List< Type > &regionField) const
Convert a local region field to the primary region.
const fvMesh & primaryMesh() const
Return the reference to the primary mesh database.
Definition: regionModelI.H:31
virtual void updateSubmodels()
Update the film sub-models.
virtual void correct(scalarField &availableMass, volScalarField &massToTransfer, volVectorField &momentumToTransfer)
Correct kinematic transfers.
const cellShapeList & cells
const labelUList & faceCells() const
Return face-cell addressing.
Definition: polyPatch.C:340
static word timeName(const scalar, const int precision=curPrecision_)
Return time name of given scalar time.
Definition: Time.C:666
scalar hydrophilicDryScale_
Length scale applied to deltaWet_ to determine when a wet.
A class for handling words, derived from string.
Definition: word.H:59
Calculate the face-flux of the given field.
static word groupName(Name name, const word &group)
Base-class for fluid thermodynamic properties.
Definition: fluidThermo.H:53
#define DebugInFunction
Report an information message using Foam::Info.
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvmDdt.C:46
Calculate the matrix for the first temporal derivative.
scalar deltaTValue() const
Return time step value.
Definition: TimeStateI.H:34
bool loop()
Pimple loop.
Definition: pimpleControl.C:83
bool readIfPresent(const word &, T &, bool recursive=false, bool patternMatch=true) const
Find an entry if present, and assign to T.
const volScalarField & coverage() const
Return the film coverage, 1 = covered, 0 = uncovered [].
const surfaceScalarField & phi() const
Return the film flux [kg m/s].
const fvMesh & regionMesh() const
Return the region mesh database.
Definition: regionModelI.H:55
The thermophysical properties of a liquid.
const fluidThermo & primaryThermo_
Reference to the primary region thermo.
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
Definition: fvPatchField.H:72
word timeName
Definition: getTimeIndex.H:3
virtual void solveAlpha(const fvVectorMatrix &UEqn, const volScalarField &pc, const volScalarField &pe)
Solve for film volume fraction and thickness.
virtual tmp< volScalarField::Internal > SYi(const label i) const
Return mass source for specie i - Eulerian phase only.
scalar hydrophilicWetScale_
Length scale applied to deltaWet_ to determine when a dry.
scalar Tmin_
Minimum temperature limit (optional)
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
Definition: HashTable.H:60
autoPtr< momentumTransportModel > momentumTransport_
Momentum transport model.
Calculate the divergence of the given field.
bool correct()
Piso loop.
Definition: pisoControl.C:80
const labelList & primaryPatchIDs() const
Return the list of patch IDs on the primary region coupled.
Definition: regionModelI.H:166
virtual void evolveRegion()
Evolve the film equations.
virtual void addSources(const label patchi, const label facei, const scalar massSource, const vector &momentumSource, const scalar pressureSource, const scalar energySource)
External hook to add sources to the film.
static const char nl
Definition: Ostream.H:260
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmDiv.C:46
thermo he()
Type gMax(const FieldField< Field, Type > &f)
void relax(const scalar alpha)
Relax matrix (for steady-state solution).
Definition: fvMatrix.C:604
virtual void resetPrimaryRegionSourceTerms()
Reset source term fields.
const dimensionSet dimEnergy
const Field< Type > & field() const
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
volScalarField primaryEnergyTrans_
Film energy transfer.
const dimensionSet dimMass
word name(const complex &)
Return a string representation of a complex.
Definition: complex.C:47
transferModelList transfer_
Transfer with the continuous phase.
kinematicSingleLayer(const word &modelType, const fvMesh &mesh, const dimensionedVector &g, const word &regionType, const bool readFields=true)
Construct from components.
dictionary coeffs_
Model coefficients dictionary.
Definition: regionModel.H:94
virtual bool read()
Read control parameters from dictionary.
Calculate the matrix for the divergence of the given field and flux.
virtual void correctHforMappedT()
Correct sensible enthalpy for mapped temperature fields.
label patchi
const volScalarField::Internal & magSf() const
Return the face area magnitudes [m^2].
virtual void predictDelta()
Predict delta_ from the continuity equation.
scalar deltaWet_
Threshold film thickness beyond which the film is considered &#39;wet&#39;.
virtual const volScalarField & T() const =0
Temperature [K].
Boundary & boundaryFieldRef()
Return a reference to the boundary field.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Type gAverage(const FieldField< Field, Type > &f)
const Time & time_
Reference to the time database.
Definition: regionModel.H:82
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:95
volScalarField alpha_
Film volume fraction in the cell layer [].
virtual void preEvolveRegion()
Pre-evolve film hook.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
PtrList< volScalarField > YPrimary_
List of specie mass fractions [0-1].
virtual void correct(scalarField &availableMass, volScalarField &massToEject, volScalarField &diameterToEject)
Correct.
const dimensionSet dimVolume
void correctBoundaryConditions()
Correct boundary field.
messageStream Info
void toRegion(const label regionPatchi, List< Type > &primaryFieldField) const
Convert a primary region field to the local region.
static autoPtr< heatTransferModel > New(surfaceFilmRegionModel &film, const dictionary &dict)
Return a reference to the selected phase change model.
virtual void addSources(const label patchi, const label facei, const scalar massSource, const vector &momentumSource, const scalar pressureSource, const scalar energySource=0)
External hook to add sources to the film.
const volScalarField & rho() const
Return the film density [kg/m^3].
virtual tmp< volScalarField::Internal > Tw() const
Return the film wall temperature [K].
volScalarField cloudMassTrans_
Film mass available for transfer to cloud.
static word modelName(Name name, const word &model)
Return the name of the object within the given model.
This boundary condition provides a self-contained version of the mapped condition. It does not use information on the patch; instead it holds thr data locally.
labelList intCoupledPatchIDs_
List of patch IDs internally coupled with the primary region.
Definition: regionModel.H:106
A class for managing temporary objects.
Definition: PtrList.H:53
tmp< surfaceScalarField > flux(const volVectorField &vvf)
Return the face-flux field obtained from the given volVectorField.
Definition: fvcFlux.C:32
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
const dictionary & coeffs() const
Return the model coefficients dictionary.
Definition: regionModelI.H:90
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:98
defineTypeNameAndDebug(kinematicSingleLayer, 0)
virtual tmp< volScalarField::Internal > Sh() const
Return enthalpy source - Eulerian phase only.
Calculate the matrix for implicit and explicit sources.
const dimensionSet dimTemperature
Namespace for OpenFOAM.
const speciesTable & species() const
Return the table of species.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:864
fvVectorMatrix & UEqn
Definition: UEqn.H:13