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")),
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"))
180 const externalWallHeatFluxTemperatureFvPatchScalarField& rhs,
182 const DimensionedField<scalar, volMesh>& iF,
183 const fvPatchFieldMapper& mapper
186 mixedFvPatchScalarField(rhs,
p, iF, mapper),
187 temperatureCoupledBase(
patch(), rhs),
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);
212 const externalWallHeatFluxTemperatureFvPatchScalarField& rhs
215 mixedFvPatchScalarField(rhs),
216 temperatureCoupledBase(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);
275 if (qrName_ !=
"none")
277 qrPrevious_.autoMap(mapper);
288 mixedFvPatchScalarField::rmap(ptf, addr);
291 refCast<const externalWallHeatFluxTemperatureFvPatchScalarField>(ptf);
298 q_->rmap(rhs.q_(), addr);
302 h_->rmap(rhs.h_(), addr);
305 if (qrName_ !=
"none")
307 qrPrevious_.rmap(rhs.qrPrevious_, addr);
325 if (qrName_ !=
"none")
330 + (1 - qrRelaxation_)*qrPrevious_;
339 const scalar heatPower =
340 Q_->value(this->db().time().timeOutputValue());
350 tmp<scalarField> heatFlux =
351 q_->
value(this->db().time().timeOutputValue());
353 refGrad() = (heatFlux + qr)/
kappa(Tp);
359 case fixedHeatTransferCoeff:
361 tmp<scalarField> thtcCoeff =
363 h_->value(this->db().time().timeOutputValue()) + VSMALL
365 const auto& htcCoeff = thtcCoeff();
367 scalar totalSolidRes = 0;
368 if (thicknessLayers_.size())
370 forAll(thicknessLayers_, iLayer)
372 const scalar l = thicknessLayers_[iLayer];
373 if (kappaLayers_[iLayer] > 0)
375 totalSolidRes += l/kappaLayers_[iLayer];
382 Ta_->value(this->db().time().timeOutputValue());
390 if (totalSolidRes > 0)
394 scalarField TpLambda(htcCoeff/(htcCoeff + 1/totalSolidRes));
421 const scalar hpmqr = hp[i] - qr[i]/Tp[i];
423 refValue()[i] = hpTa[i]/hpmqr;
424 valueFraction()[i] = hpmqr/(hpmqr + kappaDeltaCoeffs[i]);
428 refValue()[i] = (hpTa[i] + qr[i])/hp[i];
429 valueFraction()[i] = hp[i]/(hp[i] + kappaDeltaCoeffs[i]);
438 relaxation_*valueFraction() + (1 - relaxation_)*valueFraction0;
439 refValue() = relaxation_*refValue() + (1 - relaxation_)*refValue0;
441 mixedFvPatchScalarField::updateCoeffs();
444 <<
patch().boundaryMesh().mesh().name() <<
':' <<
patch().name() <<
':'
445 << internalField().name() <<
" :"
447 <<
" wall temperature "
449 <<
" max:" <<
gMax(*
this)
483 case fixedHeatTransferCoeff:
495 if (thicknessLayers_.size())
510 if (qrName_ !=
"none")
520 writeEntry(
"value",
os);
531 externalWallHeatFluxTemperatureFvPatchScalarField