45 { operationMode::fixedPower,
"power" },
46 { operationMode::fixedHeatFlux,
"flux" },
47 { operationMode::fixedHeatTransferCoeff,
"coefficient" },
60 mixedFvPatchScalarField(
p, iF),
77 qrName_(
"undefined-qr"),
95 mixedFvPatchScalarField(
p, iF),
97 mode_(operationModeNames.get(
"mode",
dict)),
102 relaxation_(
dict.getOrDefault<scalar>(
"relaxation", 1)),
103 emissivity_(
dict.getOrDefault<scalar>(
"emissivity", 0)),
104 qrRelaxation_(
dict.getOrDefault<scalar>(
"qrRelaxation", 1)),
105 qrName_(
dict.getOrDefault<
word>(
"qr",
"none")),
121 case fixedHeatTransferCoeff:
126 if (
dict.readIfPresent(
"thicknessLayers", thicknessLayers_))
128 dict.readEntry(
"kappaLayers", kappaLayers_);
130 if (thicknessLayers_.size() != kappaLayers_.size())
133 <<
"\n number of layers for thicknessLayers and "
134 <<
"kappaLayers must be the same"
135 <<
"\n for patch " <<
p.name()
136 <<
" of field " << internalField().name()
137 <<
" in file " << internalField().objectPath()
148 if (qrName_ !=
"none")
150 if (
dict.found(
"qrPrevious"))
156 qrPrevious_.resize(
p.size(),
Zero);
160 if (
dict.found(
"refValue"))
186 mixedFvPatchScalarField(rhs,
p, iF, mapper),
192 Ta_(rhs.Ta_.clone()),
193 relaxation_(rhs.relaxation_),
194 emissivity_(rhs.emissivity_),
196 qrRelaxation_(rhs.qrRelaxation_),
197 qrName_(rhs.qrName_),
198 thicknessLayers_(rhs.thicknessLayers_),
199 kappaLayers_(rhs.kappaLayers_)
201 if (qrName_ !=
"none")
203 qrPrevious_.resize(mapper.
size());
204 qrPrevious_.map(rhs.qrPrevious_, mapper);
215 mixedFvPatchScalarField(rhs),
221 Ta_(rhs.Ta_.clone()),
222 relaxation_(rhs.relaxation_),
223 emissivity_(rhs.emissivity_),
224 qrPrevious_(rhs.qrPrevious_),
225 qrRelaxation_(rhs.qrRelaxation_),
226 qrName_(rhs.qrName_),
227 thicknessLayers_(rhs.thicknessLayers_),
228 kappaLayers_(rhs.kappaLayers_)
239 mixedFvPatchScalarField(rhs, iF),
245 Ta_(rhs.Ta_.clone()),
246 relaxation_(rhs.relaxation_),
247 emissivity_(rhs.emissivity_),
248 qrPrevious_(rhs.qrPrevious_),
249 qrRelaxation_(rhs.qrRelaxation_),
250 qrName_(rhs.qrName_),
251 thicknessLayers_(rhs.thicknessLayers_),
252 kappaLayers_(rhs.kappaLayers_)
263 mixedFvPatchScalarField::autoMap(mapper);
274 if (qrName_ !=
"none")
276 qrPrevious_.autoMap(mapper);
287 mixedFvPatchScalarField::rmap(ptf, addr);
290 refCast<const externalWallHeatFluxTemperatureFvPatchScalarField>(ptf);
294 q_->rmap(rhs.q_(), addr);
298 h_->rmap(rhs.h_(), addr);
301 if (qrName_ !=
"none")
303 qrPrevious_.rmap(rhs.qrPrevious_, addr);
321 if (qrName_ !=
"none")
326 + (1 - qrRelaxation_)*qrPrevious_;
335 const scalar heatPower =
336 Q_->value(this->db().time().timeOutputValue());
347 q_->value(this->db().time().timeOutputValue());
349 refGrad() = (heatFlux + qr)/
kappa(Tp);
359 h_->value(this->db().time().timeOutputValue()) + VSMALL
361 const auto& htcCoeff = thtcCoeff();
363 scalar totalSolidRes = 0;
364 if (thicknessLayers_.size())
366 forAll(thicknessLayers_, iLayer)
368 const scalar l = thicknessLayers_[iLayer];
369 if (kappaLayers_[iLayer] > 0)
371 totalSolidRes += l/kappaLayers_[iLayer];
378 Ta_->value(this->db().time().timeOutputValue());
386 if (totalSolidRes > 0)
390 scalarField TpLambda(htcCoeff/(htcCoeff + 1/totalSolidRes));
394 hp += emissivity_*
sigma.value()*(
pow4(Ts) - lambdaTa4)/Tp;
395 hpTa += emissivity_*
sigma.value()*(lambdaTa4 +
pow4(Ta));
401 hp += emissivity_*
sigma.value()*
pow3(Tp);
402 hpTa += emissivity_*
sigma.value()*
pow4(Ta);
417 const scalar hpmqr = hp[i] - qr[i]/Tp[i];
419 refValue()[i] = hpTa[i]/hpmqr;
420 valueFraction()[i] = hpmqr/(hpmqr + kappaDeltaCoeffs[i]);
424 refValue()[i] = (hpTa[i] + qr[i])/hp[i];
425 valueFraction()[i] = hp[i]/(hp[i] + kappaDeltaCoeffs[i]);
434 relaxation_*valueFraction() + (1 - relaxation_)*valueFraction0;
435 refValue() = relaxation_*refValue() + (1 - relaxation_)*refValue0;
437 mixedFvPatchScalarField::updateCoeffs();
440 <<
patch().boundaryMesh().mesh().name() <<
':' <<
patch().name() <<
':'
441 << internalField().name() <<
" :"
443 <<
" wall temperature "
444 <<
" min:" <<
gMin(*
this)
445 <<
" max:" <<
gMax(*
this)
457 os.
writeEntry(
"mode", operationModeNames[mode_]);
479 case fixedHeatTransferCoeff:
491 if (thicknessLayers_.size())
493 thicknessLayers_.
writeEntry(
"thicknessLayers", os);
506 if (qrName_ !=
"none")
515 valueFraction().
writeEntry(
"valueFraction", os);
516 writeEntry(
"value", os);