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.lookupOrDefault<scalar>(
"relaxation", 1)),
103 emissivity_(
dict.lookupOrDefault<scalar>(
"emissivity", 0)),
104 qrRelaxation_(
dict.lookupOrDefault<scalar>(
"qrRelaxation", 1)),
105 qrName_(
dict.lookupOrDefault<
word>(
"qr",
"none")),
113 dict.readEntry(
"Q", Q_);
123 case fixedHeatTransferCoeff:
128 if (
dict.readIfPresent(
"thicknessLayers", thicknessLayers_))
130 dict.readEntry(
"kappaLayers", kappaLayers_);
132 if (thicknessLayers_.size() != kappaLayers_.size())
135 <<
"\n number of layers for thicknessLayers and "
136 <<
"kappaLayers must be the same"
137 <<
"\n for patch " <<
p.name()
138 <<
" of field " << internalField().name()
139 <<
" in file " << internalField().objectPath()
150 if (qrName_ !=
"none")
152 if (
dict.found(
"qrPrevious"))
158 qrPrevious_.setSize(
p.size(), 0);
162 if (
dict.found(
"refValue"))
188 mixedFvPatchScalarField(ptf,
p, iF, mapper),
194 Ta_(ptf.Ta_.clone()),
195 relaxation_(ptf.relaxation_),
196 emissivity_(ptf.emissivity_),
198 qrRelaxation_(ptf.qrRelaxation_),
199 qrName_(ptf.qrName_),
200 thicknessLayers_(ptf.thicknessLayers_),
201 kappaLayers_(ptf.kappaLayers_)
211 q_.setSize(mapper.
size());
212 q_.map(ptf.q_, mapper);
216 case fixedHeatTransferCoeff:
218 h_.setSize(mapper.
size());
219 h_.map(ptf.h_, mapper);
225 if (qrName_ !=
"none")
227 qrPrevious_.setSize(mapper.
size());
228 qrPrevious_.map(ptf.qrPrevious_, mapper);
239 mixedFvPatchScalarField(ewhftpsf),
241 mode_(ewhftpsf.mode_),
245 Ta_(ewhftpsf.Ta_.clone()),
246 relaxation_(ewhftpsf.relaxation_),
247 emissivity_(ewhftpsf.emissivity_),
248 qrPrevious_(ewhftpsf.qrPrevious_),
249 qrRelaxation_(ewhftpsf.qrRelaxation_),
250 qrName_(ewhftpsf.qrName_),
251 thicknessLayers_(ewhftpsf.thicknessLayers_),
252 kappaLayers_(ewhftpsf.kappaLayers_)
263 mixedFvPatchScalarField(ewhftpsf, iF),
265 mode_(ewhftpsf.mode_),
269 Ta_(ewhftpsf.Ta_.clone()),
270 relaxation_(ewhftpsf.relaxation_),
271 emissivity_(ewhftpsf.emissivity_),
272 qrPrevious_(ewhftpsf.qrPrevious_),
273 qrRelaxation_(ewhftpsf.qrRelaxation_),
274 qrName_(ewhftpsf.qrName_),
275 thicknessLayers_(ewhftpsf.thicknessLayers_),
276 kappaLayers_(ewhftpsf.kappaLayers_)
287 mixedFvPatchScalarField::autoMap(m);
301 case fixedHeatTransferCoeff:
309 if (qrName_ !=
"none")
311 qrPrevious_.autoMap(m);
322 mixedFvPatchScalarField::rmap(ptf, addr);
325 refCast<const externalWallHeatFluxTemperatureFvPatchScalarField>(ptf);
335 q_.rmap(ewhftpsf.q_, addr);
339 case fixedHeatTransferCoeff:
341 h_.rmap(ewhftpsf.h_, addr);
347 if (qrName_ !=
"none")
349 qrPrevious_.rmap(ewhftpsf.qrPrevious_, addr);
364 if (qrName_ !=
"none")
369 + (1 - qrRelaxation_)*qrPrevious_;
386 refGrad() = (q_ + qr)/
kappa(Tp);
394 scalar totalSolidRes = 0;
395 if (thicknessLayers_.size())
397 forAll(thicknessLayers_, iLayer)
399 const scalar l = thicknessLayers_[iLayer];
400 if (kappaLayers_[iLayer] > 0)
402 totalSolidRes += l/kappaLayers_[iLayer];
408 const scalar Ta = Ta_->value(this->db().time().timeOutputValue());
415 if (totalSolidRes > 0)
423 hp += emissivity_*
sigma.value()*(
pow4(Ts) - lambdaTa4)/Tp;
424 hpTa += emissivity_*
sigma.value()*(lambdaTa4 +
pow4(Ta));
430 hp += emissivity_*
sigma.value()*
pow3(Tp);
431 hpTa += emissivity_*
sigma.value()*
pow4(Ta);
446 const scalar hpmqr = hp[i] - qr[i]/Tp[i];
448 refValue()[i] = hpTa[i]/hpmqr;
449 valueFraction()[i] = hpmqr/(hpmqr + kappaDeltaCoeffs[i]);
453 refValue()[i] = (hpTa[i] + qr[i])/hp[i];
454 valueFraction()[i] = hp[i]/(hp[i] + kappaDeltaCoeffs[i]);
462 valueFraction() = relaxation_*valueFraction() + (1 - relaxation_);
463 refValue() = relaxation_*refValue() + (1 - relaxation_)*Tp;
465 mixedFvPatchScalarField::updateCoeffs();
468 <<
patch().boundaryMesh().mesh().name() <<
':' <<
patch().name() <<
':'
469 << internalField().name() <<
" :"
471 <<
" wall temperature "
472 <<
" min:" <<
gMin(*
this)
473 <<
" max:" <<
gMax(*
this)
485 os.
writeEntry(
"mode", operationModeNames[mode_]);
501 case fixedHeatTransferCoeff:
516 if (thicknessLayers_.size())
518 thicknessLayers_.
writeEntry(
"thicknessLayers", os);
528 if (qrName_ !=
"none")
537 valueFraction().
writeEntry(
"valueFraction", os);
538 writeEntry(
"value", os);