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