alphatWallBoilingWallFunctionFvPatchScalarField.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) 2015-2019 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 
27 #include "phaseSystem.H"
29 #include "ThermalDiffusivity.H"
31 #include "saturationModel.H"
33 
34 using namespace Foam::constant::mathematical;
35 
36 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37 
38 template<>
39 const char* Foam::NamedEnum
40 <
43  2
44 >::names[] =
45 {
46  "vapor",
47  "liquid"
48 };
49 
50 const Foam::NamedEnum
51 <
54  2
55 >
56 Foam::compressible::
57 alphatWallBoilingWallFunctionFvPatchScalarField::phaseTypeNames_;
58 
59 
60 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
61 
62 namespace Foam
63 {
64 namespace compressible
65 {
66 
67 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
68 
69 alphatWallBoilingWallFunctionFvPatchScalarField::
70 alphatWallBoilingWallFunctionFvPatchScalarField
71 (
72  const fvPatch& p,
73  const DimensionedField<scalar, volMesh>& iF
74 )
75 :
76  alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField(p, iF),
77  otherPhaseName_("vapor"),
78  phaseType_(liquidPhase),
79  relax_(0.5),
80  AbyV_(p.size(), 0),
81  alphatConv_(p.size(), 0),
82  dDep_(p.size(), 1e-5),
83  qq_(p.size(), 0),
84  partitioningModel_(nullptr),
85  nucleationSiteModel_(nullptr),
86  departureDiamModel_(nullptr),
87  departureFreqModel_(nullptr)
88 {
89  AbyV_ = this->patch().magSf();
90  forAll(AbyV_, facei)
91  {
92  const label faceCelli = this->patch().faceCells()[facei];
93  AbyV_[facei] /= iF.mesh().V()[faceCelli];
94  }
95 }
96 
97 
100 (
101  const fvPatch& p,
102  const DimensionedField<scalar, volMesh>& iF,
103  const dictionary& dict
104 )
105 :
106  alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField(p, iF, dict),
107  otherPhaseName_(dict.lookup("otherPhase")),
108  phaseType_(phaseTypeNames_.read(dict.lookup("phaseType"))),
109  relax_(dict.lookupOrDefault<scalar>("relax", 0.5)),
110  AbyV_(p.size(), 0),
111  alphatConv_(p.size(), 0),
112  dDep_(p.size(), 1e-5),
113  qq_(p.size(), 0),
114  partitioningModel_(nullptr),
115  nucleationSiteModel_(nullptr),
116  departureDiamModel_(nullptr),
117  departureFreqModel_(nullptr)
118 {
119 
120  // Check that otherPhaseName != this phase
121  if (internalField().group() == otherPhaseName_)
122  {
124  << "otherPhase should be the name of the vapor phase that "
125  << "corresponds to the liquid base of vice versa" << nl
126  << "This phase: " << internalField().group() << nl
127  << "otherPhase: " << otherPhaseName_
128  << abort(FatalError);
129  }
130 
131  switch (phaseType_)
132  {
133  case vaporPhase:
134  {
135  partitioningModel_ =
137  (
138  dict.subDict("partitioningModel")
139  );
140 
141  dmdt_ = 0;
142 
143  break;
144  }
145  case liquidPhase:
146  {
147  partitioningModel_ =
149  (
150  dict.subDict("partitioningModel")
151  );
152 
153  nucleationSiteModel_ =
155  (
156  dict.subDict("nucleationSiteModel")
157  );
158 
159  departureDiamModel_ =
161  (
162  dict.subDict("departureDiamModel")
163  );
164 
165  departureFreqModel_ =
167  (
168  dict.subDict("departureFreqModel")
169  );
170 
171  if (dict.found("dDep"))
172  {
173  dDep_ = scalarField("dDep", dict, p.size());
174  }
175 
176  if (dict.found("qQuenching"))
177  {
178  qq_ = scalarField("qQuenching", dict, p.size());
179  }
180 
181  break;
182  }
183  }
184 
185  if (dict.found("alphatConv"))
186  {
187  alphatConv_ = scalarField("alphatConv", dict, p.size());
188  }
189 
190  AbyV_ = this->patch().magSf();
191  forAll(AbyV_, facei)
192  {
193  const label faceCelli = this->patch().faceCells()[facei];
194  AbyV_[facei] /= iF.mesh().V()[faceCelli];
195  }
196 }
197 
198 
201 (
202  const alphatWallBoilingWallFunctionFvPatchScalarField& psf,
203  const fvPatch& p,
204  const DimensionedField<scalar, volMesh>& iF,
205  const fvPatchFieldMapper& mapper
206 )
207 :
208  alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField
209  (
210  psf,
211  p,
212  iF,
213  mapper
214  ),
215  otherPhaseName_(psf.otherPhaseName_),
216  phaseType_(psf.phaseType_),
217  relax_(psf.relax_),
218  AbyV_(psf.AbyV_),
219  alphatConv_(mapper(psf.alphatConv_)),
220  dDep_(mapper(psf.dDep_)),
221  qq_(mapper(psf.qq_)),
222  partitioningModel_(psf.partitioningModel_),
223  nucleationSiteModel_(psf.nucleationSiteModel_),
224  departureDiamModel_(psf.departureDiamModel_),
225  departureFreqModel_(psf.departureFreqModel_)
226 {}
227 
228 
231 (
232  const alphatWallBoilingWallFunctionFvPatchScalarField& psf
233 )
234 :
235  alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField(psf),
236  otherPhaseName_(psf.otherPhaseName_),
237  phaseType_(psf.phaseType_),
238  relax_(psf.relax_),
239  AbyV_(psf.AbyV_),
240  alphatConv_(psf.alphatConv_),
241  dDep_(psf.dDep_),
242  qq_(psf.qq_),
243  partitioningModel_(psf.partitioningModel_),
244  nucleationSiteModel_(psf.nucleationSiteModel_),
245  departureDiamModel_(psf.departureDiamModel_),
246  departureFreqModel_(psf.departureFreqModel_)
247 {}
248 
249 
252 (
253  const alphatWallBoilingWallFunctionFvPatchScalarField& psf,
254  const DimensionedField<scalar, volMesh>& iF
255 )
256 :
257  alphatPhaseChangeJayatillekeWallFunctionFvPatchScalarField(psf, iF),
258  otherPhaseName_(psf.otherPhaseName_),
259  phaseType_(psf.phaseType_),
260  relax_(psf.relax_),
261  AbyV_(psf.AbyV_),
262  alphatConv_(psf.alphatConv_),
263  dDep_(psf.dDep_),
264  qq_(psf.qq_),
265  partitioningModel_(psf.partitioningModel_),
266  nucleationSiteModel_(psf.nucleationSiteModel_),
267  departureDiamModel_(psf.departureDiamModel_),
268  departureFreqModel_(psf.departureFreqModel_)
269 {}
270 
271 
272 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
273 
275 activePhasePair(const phasePairKey& phasePair) const
276 {
277  if (phasePair == phasePairKey(otherPhaseName_, internalField().group()))
278  {
279  return true;
280  }
281  else
282  {
283  return false;
284  }
285 }
286 
288 dmdt(const phasePairKey& phasePair) const
289 {
290  if (activePhasePair(phasePair))
291  {
292  return dmdt_;
293  }
294  else
295  {
297  << " dmdt requested for invalid phasePair!"
298  << abort(FatalError);
299 
300  return dmdt_;
301  }
302 }
303 
305 mDotL(const phasePairKey& phasePair) const
306 {
307  if (activePhasePair(phasePair))
308  {
309  return mDotL_;
310  }
311  else
312  {
314  << " mDotL requested for invalid phasePair!"
315  << abort(FatalError);
316 
317  return mDotL_;
318  }
319 }
320 
322 {
323  if (updated())
324  {
325  return;
326  }
327 
328  // Check that partitioningModel has been constructed
329  if (!partitioningModel_.valid())
330  {
332  << "partitioningModel has not been constructed!"
333  << abort(FatalError);
334  }
335 
336  // Lookup the fluid model
337  const phaseSystem& fluid =
338  refCast<const phaseSystem>
339  (
340  db().lookupObject<phaseSystem>("phaseProperties")
341  );
342 
343  const saturationModel& satModel =
344  db().lookupObject<saturationModel>("saturationModel");
345 
346  const label patchi = patch().index();
347 
348  switch (phaseType_)
349  {
350  case vaporPhase:
351  {
352  const phaseModel& vapor
353  (
354  fluid.phases()[internalField().group()]
355  );
356 
357  // Vapor Liquid phase fraction at the wall
358  const scalarField vaporw(vapor.boundaryField()[patchi]);
359 
360  // NOTE! Assumes 1-thisPhase for liquid fraction in
361  // multiphase simulations
362  const scalarField fLiquid
363  (
364  partitioningModel_->fLiquid(1-vaporw)
365  );
366 
367  operator==
368  (
369  calcAlphat(*this)*(1 - fLiquid)/max(vaporw, scalar(1e-8))
370  );
371  break;
372  }
373  case liquidPhase:
374  {
375  // Check that nucleationSiteModel has been constructed
376  if (!nucleationSiteModel_.valid())
377  {
379  << "nucleationSiteModel has not been constructed!"
380  << abort(FatalError);
381  }
382 
383  // Check that departureDiameterModel has been constructed
384  if (!departureDiamModel_.valid())
385  {
387  << "departureDiameterModel has not been constructed!"
388  << abort(FatalError);
389  }
390 
391  // Check that nucleationSiteModel has been constructed
392  if (!departureFreqModel_.valid())
393  {
395  << "departureFrequencyModel has not been constructed!"
396  << abort(FatalError);
397  }
398 
399  const phaseModel& liquid
400  (
401  fluid.phases()[internalField().group()]
402  );
403 
404  const phaseModel& vapor(fluid.phases()[otherPhaseName_]);
405 
406  // Retrieve turbulence properties from models
407  const phaseCompressibleTurbulenceModel& turbModel =
408  db().lookupObject<phaseCompressibleTurbulenceModel>
409  (
411  (
413  liquid.name()
414  )
415  );
416  const phaseCompressibleTurbulenceModel& vaporTurbModel =
417  db().lookupObject<phaseCompressibleTurbulenceModel>
418  (
420  (
422  vapor.name()
423  )
424  );
425 
426  const nutWallFunctionFvPatchScalarField& nutw =
427  nutWallFunctionFvPatchScalarField::nutw(turbModel, patchi);
428 
429  const scalar Cmu25(pow025(nutw.Cmu()));
430 
431  const scalarField& y = turbModel.y()[patchi];
432 
433  const tmp<scalarField> tmuw = turbModel.mu(patchi);
434  const scalarField& muw = tmuw();
435 
436  const tmp<scalarField> talphaw = liquid.thermo().alpha(patchi);
437  const scalarField& alphaw = talphaw();
438 
439  const tmp<volScalarField> tk = turbModel.k();
440  const volScalarField& k = tk();
441  const fvPatchScalarField& kw = k.boundaryField()[patchi];
442 
443  const fvPatchVectorField& Uw =
444  turbModel.U().boundaryField()[patchi];
445  const scalarField magUp(mag(Uw.patchInternalField() - Uw));
446  const scalarField magGradUw(mag(Uw.snGrad()));
447 
448  const fvPatchScalarField& rhoLiquidw =
449  turbModel.rho().boundaryField()[patchi];
450 
451  const fvPatchScalarField& rhoVaporw =
452  vaporTurbModel.rho().boundaryField()[patchi];
453 
454  const fvPatchScalarField& pw =
455  liquid.thermo().p().boundaryField()[patchi];
456 
457  const fvPatchScalarField& Tw =
458  liquid.thermo().T().boundaryField()[patchi];
459  const scalarField Tc(Tw.patchInternalField());
460 
461  const scalarField uTau(Cmu25*sqrt(kw));
462 
463  const scalarField yPlus(uTau*y/(muw/rhoLiquidw));
464 
465  const scalarField Pr(muw/alphaw);
466 
467  // Molecular-to-turbulent Prandtl number ratio
468  const scalarField Prat(Pr/Prt_);
469 
470  // Thermal sublayer thickness
471  const scalarField P(this->Psmooth(Prat));
472 
473  const scalarField yPlusTherm(this->yPlusTherm(nutw, P, Prat));
474 
475  tmp<volScalarField> tCp = liquid.thermo().Cp();
476  const volScalarField& Cp = tCp();
477  const fvPatchScalarField& Cpw = Cp.boundaryField()[patchi];
478 
479  // Saturation temperature
480  const tmp<volScalarField> tTsat =
481  satModel.Tsat(liquid.thermo().p());
482 
483  const volScalarField& Tsat = tTsat();
484  const fvPatchScalarField& Tsatw(Tsat.boundaryField()[patchi]);
485  const scalarField Tsatc(Tsatw.patchInternalField());
486 
487  const fvPatchScalarField& hew
488  = liquid.thermo().he().boundaryField()[patchi];
489 
490  const scalarField hw
491  (
492  liquid.thermo().he().member() == "e"
493  ? hew.patchInternalField() + pw/rhoLiquidw.patchInternalField()
494  : hew.patchInternalField()
495  );
496 
497  const scalarField L
498  (
499  vapor.thermo().he().member() == "e"
500  ? vapor.thermo().he(pw, Tsatc, patchi) + pw/rhoVaporw - hw
501  : vapor.thermo().he(pw, Tsatc, patchi) - hw
502  );
503 
504  // Liquid phase fraction at the wall
505  const scalarField liquidw(liquid.boundaryField()[patchi]);
506 
507  const scalarField fLiquid(partitioningModel_->fLiquid(liquidw));
508 
509  // Convective thermal diffusivity
510  alphatConv_ = calcAlphat(alphatConv_);
511 
512  for (label i=0; i<10; i++)
513  {
514  // Liquid temperature at y+=250 is estimated from logarithmic
515  // thermal wall function (Koncar, Krepper & Egorov, 2005)
516  const scalarField Tplus_y250
517  (
518  Prt_*(log(nutw.E()*250)/nutw.kappa() + P)
519  );
520 
521  const scalarField Tplus
522  (
523  Prt_*(log(nutw.E()*yPlus)/nutw.kappa() + P)
524  );
525 
526  const scalarField Tl
527  (
528  max
529  (
530  Tc - 40,
531  Tw - (Tplus_y250/Tplus)*(Tw - Tc)
532  )
533  );
534 
535  // Nucleation site density:
536  const scalarField N
537  (
538  nucleationSiteModel_->N
539  (
540  liquid,
541  vapor,
542  patchi,
543  Tl,
544  Tsatw,
545  L
546  )
547  );
548 
549  // Bubble departure diameter:
550  dDep_ = departureDiamModel_->dDeparture
551  (
552  liquid,
553  vapor,
554  patchi,
555  Tl,
556  Tsatw,
557  L
558  );
559 
560  // Bubble departure frequency:
561  const scalarField fDep
562  (
563  departureFreqModel_->fDeparture
564  (
565  liquid,
566  vapor,
567  patchi,
568  dDep_
569  )
570  );
571 
572  // Area fractions:
573 
574  // Del Valle & Kenning (1985)
575  const scalarField Ja
576  (
577  rhoLiquidw*Cpw*(Tsatw - Tl)/(rhoVaporw*L)
578  );
579 
580  const scalarField Al
581  (
582  fLiquid*4.8*exp( min(-Ja/80, log(vGreat)))
583  );
584 
585  const scalarField A2(min(pi*sqr(dDep_)*N*Al/4, scalar(1)));
586  const scalarField A1(max(1 - A2, scalar(1e-4)));
587  const scalarField A2E(min(pi*sqr(dDep_)*N*Al/4, scalar(5)));
588 
589  // Volumetric mass source in the near wall cell due to the
590  // wall boiling
591  dmdt_ =
592  (1 - relax_)*dmdt_
593  + relax_*(1.0/6.0)*A2E*dDep_*rhoVaporw*fDep*AbyV_;
594 
595  // Volumetric source in the near wall cell due to the wall
596  // boiling
597  mDotL_ = dmdt_*L;
598 
599  // Quenching heat transfer coefficient
600  const scalarField hQ
601  (
602  2*(alphaw*Cpw)*fDep*sqrt((0.8/fDep)/(pi*alphaw/rhoLiquidw))
603  );
604 
605  // Quenching heat flux
606  qq_ = (A2*hQ*max(Tw - Tl, scalar(0)));
607 
608  // Effective thermal diffusivity that corresponds to the
609  // calculated convective, quenching and evaporative heat fluxes
610 
611  operator==
612  (
613  (
614  A1*alphatConv_
615  + (qq_ + qe())/max(hew.snGrad(), scalar(1e-16))
616  )
617  /max(liquidw, scalar(1e-8))
618  );
619 
620  scalarField TsupPrev(max((Tw - Tsatw), scalar(0)));
621  const_cast<fvPatchScalarField&>(Tw).evaluate();
622  scalarField TsupNew(max((Tw - Tsatw), scalar(0)));
623 
624  scalar maxErr(max(mag(TsupPrev - TsupNew)));
625 
626  if (debug)
627  {
628  const scalarField qc
629  (
630  fLiquid*A1*(alphatConv_ + alphaw)*hew.snGrad()
631  );
632 
633  const scalarField qEff
634  (
635  liquidw*(*this + alphaw)*hew.snGrad()
636  );
637 
638  Info<< " L: " << gMin(L) << " - " << gMax(L) << endl;
639  Info<< " Tl: " << gMin(Tl) << " - " << gMax(Tl) << endl;
640  Info<< " N: " << gMin(N) << " - " << gMax(N) << endl;
641  Info<< " dDep_: " << gMin(dDep_) << " - "
642  << gMax(dDep_) << endl;
643  Info<< " fDep: " << gMin(fDep) << " - "
644  << gMax(fDep) << endl;
645  Info<< " Al: " << gMin(Al) << " - " << gMax(Al) << endl;
646  Info<< " A1: " << gMin(A1) << " - " << gMax(A1) << endl;
647  Info<< " A2: " << gMin(A2) << " - " << gMax(A2) << endl;
648  Info<< " A2E: " << gMin(A2E) << " - "
649  << gMax(A2E) << endl;
650  Info<< " dmdtW: " << gMin(dmdt_) << " - "
651  << gMax(dmdt_) << endl;
652  Info<< " qc: " << gMin(qc) << " - " << gMax(qc) << endl;
653  Info<< " qq: " << gMin(fLiquid*qq()) << " - "
654  << gMax(fLiquid*qq()) << endl;
655  Info<< " qe: " << gMin(fLiquid*qe()) << " - "
656  << gMax(fLiquid*qe()) << endl;
657  Info<< " qEff: " << gMin(qEff) << " - "
658  << gMax(qEff) << endl;
659  Info<< " alphat: " << gMin(*this) << " - "
660  << gMax(*this) << endl;
661  Info<< " alphatConv: " << gMin(alphatConv_)
662  << " - " << gMax(alphatConv_) << endl;
663  }
664 
665  if (maxErr < 1e-1)
666  {
667  if (i > 0)
668  {
669  Info<< "Wall boiling wall function iterations: "
670  << i + 1 << endl;
671  }
672  break;
673  }
674 
675  }
676  break;
677  }
678  default:
679  {
681  << "Unknown phase type. Valid types are: "
682  << phaseTypeNames_ << nl << exit(FatalError);
683  }
684  }
685 
686  fixedValueFvPatchScalarField::updateCoeffs();
687 }
688 
689 
691 {
693 
694  writeEntry(os, "phaseType", phaseTypeNames_[phaseType_]);
695 
696  writeEntry(os, "relax", relax_);
697 
698  switch (phaseType_)
699  {
700  case vaporPhase:
701  {
702  os.writeKeyword("partitioningModel") << nl;
703  os << indent << token::BEGIN_BLOCK << incrIndent << nl;
704  partitioningModel_->write(os);
705  os << decrIndent << indent << token::END_BLOCK << nl;
706  break;
707  }
708  case liquidPhase:
709  {
710  os.writeKeyword("partitioningModel") << nl;
711  os << indent << token::BEGIN_BLOCK << incrIndent << nl;
712  partitioningModel_->write(os);
713  os << decrIndent << indent << token::END_BLOCK << nl;
714 
715  os.writeKeyword("nucleationSiteModel") << nl;
716  os << indent << token::BEGIN_BLOCK << incrIndent << nl;
717  nucleationSiteModel_->write(os);
718  os << decrIndent << indent << token::END_BLOCK << nl;
719 
720  os.writeKeyword("departureDiamModel") << nl;
721  os << indent << token::BEGIN_BLOCK << incrIndent << nl;
722  departureDiamModel_->write(os);
723  os << decrIndent << indent << token::END_BLOCK << nl;
724 
725  os.writeKeyword("departureFreqModel") << nl;
726  os << indent << token::BEGIN_BLOCK << incrIndent << nl;
727  departureFreqModel_->write(os);
728  os << decrIndent << indent << token::END_BLOCK << nl;
729 
730  break;
731  }
732  }
733 
734  writeEntry(os, "otherPhase", otherPhaseName_);
735  writeEntry(os, "dmdt", dmdt_);
736  writeEntry(os, "dDep", dDep_);
737  writeEntry(os, "qQuenching", qq_);
738  writeEntry(os, "alphatConv", alphatConv_);
739  writeEntry(os, "value", *this);
740 }
741 
742 
743 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
744 
746 (
748  alphatWallBoilingWallFunctionFvPatchScalarField
749 );
750 
751 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
752 
753 } // End namespace compressible
754 } // End namespace Foam
755 
756 // ************************************************************************* //
const char *const group
Group name for atomic constants.
virtual const scalarField & dmdt() const
Return the rate of phase-change.
static autoPtr< departureDiameterModel > New(const dictionary &dict)
Select null constructed.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
ThermalDiffusivity< PhaseCompressibleTurbulenceModel< phaseModel > > phaseCompressibleTurbulenceModel
Typedef for phaseCompressibleTurbulenceModel.
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
static autoPtr< partitioningModel > New(const dictionary &dict)
Select null constructed.
fvPatchField< vector > fvPatchVectorField
Ostream & indent(Ostream &os)
Indent stream.
Definition: Ostream.H:226
dimensionedScalar log(const dimensionedScalar &ds)
multiphaseSystem & fluid
Definition: createFields.H:11
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
error FatalError
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:319
Type gMin(const FieldField< Field, Type > &f)
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar sqrt(const dimensionedScalar &ds)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:256
dimensionedScalar pow025(const dimensionedScalar &ds)
virtual const scalarField & mDotL() const
Return the enthalpy source due to phase-change.
static autoPtr< nucleationSiteModel > New(const dictionary &dict)
Select null constructed.
virtual void write(Ostream &) const
Write.
Definition: fvPatchField.C:280
Initialise the NamedEnum HashTable from the static list of names.
Definition: NamedEnum.H:51
virtual bool activePhasePair(const phasePairKey &) const
Is there phase change mass transfer for this phasePair.
Macros for easy insertion into run-time selection tables.
scalar magUp
virtual bool activePhasePair(const phasePairKey &) const
Is there phase change mass transfer for this phasePair.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:52
scalar uTau
bool read(const char *, int32_t &)
Definition: int32IO.C:85
stressControl lookup("compactNormalStress") >> compactNormalStress
dimensionedScalar exp(const dimensionedScalar &ds)
fvPatchField< scalar > fvPatchScalarField
static const word propertiesName
Default name of the turbulence properties dictionary.
mathematical constants.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
static word groupName(Name name, const word &group)
errorManip< error > abort(error &err)
Definition: errorManip.H:131
alphatWallBoilingWallFunctionFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
static const char nl
Definition: Ostream.H:265
Type gMax(const FieldField< Field, Type > &f)
Ostream & decrIndent(Ostream &os)
Decrement the indent level.
Definition: Ostream.H:240
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
Definition: HashTableIO.C:96
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
label patchi
static autoPtr< departureFrequencyModel > New(const dictionary &dict)
Select null constructed.
scalar yPlus
messageStream Info
label N
Definition: createFields.H:22
dimensioned< scalar > mag(const dimensioned< Type > &)
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:98
Ostream & incrIndent(Ostream &os)
Increment the indent level.
Definition: Ostream.H:233
static const nutWallFunctionFvPatchScalarField & nutw(const turbulenceModel &turbModel, const label patchi)
Return the nut patchField for the given wall patch.
makePatchTypeField(fvPatchScalarField, thermalBaffleFvPatchScalarField)
Namespace for OpenFOAM.