83 patch().boundaryMesh().mesh()
104 mixedFvPatchScalarField(
p, iF,
dict, false),
119 db().time().userUnits(),
132 db().time().userUnits(),
138 haveEmissivity_(
dict.
found(
"emissivity")),
160 haveh_ || haveEmissivity_
164 db().time().userUnits(),
175 qrName_ !=
word::null
187 if (haveEmissivity_ && (emissivity_ < 0 || emissivity_ > 1))
190 <<
"Emissivity must be in the range 0 to 1"
194 if (thicknessLayers_.
size() != kappaLayers_.
size())
197 <<
"If either thicknessLayers or kappaLayers is specified, then "
198 <<
"both must be specified and be lists of the same length "
202 if (haveEmissivity_ && haveLayers_)
205 <<
"Emissivity and thicknessLayers/kappaLayers are incompatible"
209 if (
dict.found(
"refValue"))
243 mixedFvPatchScalarField(ptf,
p, iF, mapper),
250 haveEmissivity_(ptf.haveEmissivity_),
251 emissivity_(ptf.emissivity_),
252 haveLayers_(ptf.haveLayers_),
253 thicknessLayers_(ptf.thicknessLayers_),
254 kappaLayers_(ptf.kappaLayers_),
257 qrName_(ptf.qrName_),
258 qrRelax_(ptf.qrRelax_),
261 qrName_ !=
word::null
262 ? mapper(ptf.qrPrevious_)()
275 mixedFvPatchScalarField(tppsf, iF),
276 haveQ_(tppsf.haveQ_),
278 haveq_(tppsf.haveq_),
280 haveh_(tppsf.haveh_),
282 haveEmissivity_(tppsf.haveEmissivity_),
283 emissivity_(tppsf.emissivity_),
284 haveLayers_(tppsf.haveLayers_),
285 thicknessLayers_(tppsf.thicknessLayers_),
286 kappaLayers_(tppsf.kappaLayers_),
287 Ta_(tppsf.Ta_, false),
288 relax_(tppsf.relax_),
289 qrName_(tppsf.qrName_),
290 qrRelax_(tppsf.qrRelax_),
291 qrPrevious_(tppsf.qrPrevious_)
303 mixedFvPatchScalarField::map(ptf, mapper);
306 refCast<const externalTemperatureFvPatchScalarField>(ptf);
310 mapper(qrPrevious_, tiptf.qrPrevious_);
320 mixedFvPatchScalarField::reset(ptf);
323 refCast<const externalTemperatureFvPatchScalarField>(ptf);
327 qrPrevious_.reset(tiptf.qrPrevious_);
340 const scalar t = db().time().value();
348 getKappa(
kappa, sumKappaTcByDelta, sumKappaByDelta,
T, sumq);
366 const scalarField qr(qrRelax_*qrCurrent + (1 - qrRelax_)*qrPrevious_);
374 const scalar Ta = haveh_ || haveEmissivity_ ? Ta_->value(t) : NaN;
397 if (hEff.
valid() && haveLayers_)
399 scalar oneByHLayers = 0;
402 forAll(thicknessLayers_, layeri)
404 oneByHLayers += thicknessLayers_[layeri]/kappaLayers_[layeri];
408 hEff = 1/(1/hEff + oneByHLayers);
415 plusEqOp(sumKappaTcByDelta, hEff*Ta);
422 sumKappaByDelta.
valid()
423 ? kappaByDelta + sumKappaByDelta()
428 if (sumKappaByDelta.
valid())
430 valueFraction() = sumKappaByDelta()/kappaPlusSumKappaByDelta();
434 valueFraction() =
Zero;
439 if (sumKappaByDelta.
valid())
444 max(sumKappaTcByDelta, small*kappaByDelta*patchInternalField())
445 /
max(sumKappaByDelta, small*kappaByDelta)
450 plusEqOp(trefValue, sumq()/kappaPlusSumKappaByDelta());
452 if (trefValue.
valid())
454 refValue() = trefValue;
464 refGrad() = sumq*patch().deltaCoeffs()/kappaPlusSumKappaByDelta();
475 valueFraction() = 1 - relax_*(1 -
f);
476 refValue() = (
f*relax_*refValue() + (1 - relax_)*
T)/valueFraction();
479 mixedFvPatchScalarField::updateCoeffs();
485 Info<< patch().boundaryMesh().mesh().name() <<
':'
486 << patch().name() <<
':'
487 << this->internalField().name() <<
" :"
488 <<
" heat transfer rate:" << Q
489 <<
" walltemperature "
490 <<
" min:" <<
gMin(*
this)
491 <<
" max:" <<
gMax(*
this)
520 db().time().userUnits(),
533 writeEntry(os,
"thicknessLayers", thicknessLayers_);
537 if (haveh_ || haveEmissivity_)
553 writeEntry(os,
"valueFraction", valueFraction());
573 externalWallHeatFluxTemperature,
574 "externalWallHeatFluxTemperature"
582 externalWallHeatFluxTemperature,
583 "externalWallHeatFluxTemperature"
#define forAll(list, i)
Loop across all elements in list.
Macros for easy insertion into run-time selection tables.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const dimensionSet & dimensions() const
Return dimensions.
Run-time selectable general function of one variable.
void size(const label)
Override size to be inconsistent with allocated storage.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
This boundary condition applies a heat flux condition to temperature on an external wall....
virtual void getKappa(scalarField &kappa, tmp< scalarField > &sumKappaTcByDelta, tmp< scalarField > &sumKappaByDelta, tmp< scalarField > &T, tmp< scalarField > &sumq) const
Get the patch kappa, kappa*Tc/delta, kappa/delta,.
void plusEqOp(tmp< scalarField > &tf, const scalar d) const
Plus-equals op for a tmp field. Will initialise the tmp if empty.
void write(Ostream &) const
Write.
virtual void reset(const fvPatchScalarField &)
Reset the fvPatchField to the given fvPatchField.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
virtual void map(const fvPatchScalarField &, const fieldMapper &)
Map the given fvPatchField onto this fvPatchField.
externalTemperatureFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &, const dictionary &)
Construct from patch, internal field and dictionary.
Abstract base class for field mapping.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
virtual void write(Ostream &) const
Write.
friend Ostream & operator(Ostream &, const fvPatchField< Type > &)
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Abstract base class for all fluid and solid thermophysical transport models.
virtual tmp< scalarField > qCorr(const label patchi) const =0
Return the patch heat flux correction [W/m^2].
virtual tmp< volScalarField > kappaEff() const =0
Effective thermal turbulent conductivity.
A class for managing temporary objects.
bool valid() const
Is this temporary object valid,.
T * ptr() const
Return tmp pointer for reuse.
A class for handling words, derived from string.
static const word null
An empty word.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
const dimensionedScalar kappa
Coulomb constant: default SI units: [N.m2/C2].
const dimensionedScalar sigma
Stefan-Boltzmann constant: default SI units: [W/m^2/K^4].
tmp< SurfaceField< Type > > snGrad(const VolField< Type > &vf, const word &name)
errorManipArg< error, int > exit(error &err, const int errNo=1)
Type gSum(const FieldField< Field, Type > &f)
void writeEntryIfDifferent(Ostream &os, const word &entryName, const EntryType &value1, const EntryType &value2)
Helper function to write the keyword and entry only if the.
Ostream & endl(Ostream &os)
Add newline and flush stream.
const dimensionSet dimPower
void T(LagrangianPatchField< Type > &f, const LagrangianPatchField< Type > &f1)
const dimensionSet dimLength
const dimensionSet dimTemperature
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
addBackwardCompatibleToRunTimeSelectionTable(fvPatchScalarField, coupledTemperatureFvPatchScalarField, patchMapper, turbulentTemperatureCoupledBaffleMixed, "compressible::turbulentTemperatureCoupledBaffleMixed")
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
VolField< scalar > volScalarField
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
void sqr(LagrangianPatchField< typename outerProduct< Type, Type >::type > &f, const LagrangianPatchField< Type > &f1)
Type gAverage(const FieldField< Field, Type > &f)
const dimensionSet dimArea
makePatchTypeField(fvPatchScalarField, atmBoundaryLayerInletEpsilonFvPatchScalarField)
Type gMin(const FieldField< Field, Type > &f)
const dimensionSet dimThermalConductivity
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)
Type gMax(const FieldField< Field, Type > &f)
const unitConversion unitFraction