const solidType& thermalBaffle1DFvPatchScalarField<solidType>::solidPtr() const { if (!solidPtr_.empty()) { return solidPtr_(); } else { solidPtr_.reset(new solidType(solidDict_)); return solidPtr_(); } }
const solidType& thermalBaffle1DFvPatchScalarField<solidType>::solid() const { if (this->owner()) { if (solidPtr_.empty()) { solidPtr_.reset(new solidType(solidDict_)); } return solidPtr_(); } else { const fvPatch& nbrPatch = patch().boundaryMesh()[samplePolyPatch().index()]; const thermalBaffle1DFvPatchScalarField& nbrField = refCast<const thermalBaffle1DFvPatchScalarField> ( nbrPatch.template lookupPatchField<volScalarField, scalar>(TName_) ); return nbrField.solid(); } }
void thermalBaffle1DFvPatchScalarField<solidType>::updateCoeffs() { if (updated()) { return; } // Since we're inside initEvaluate/evaluate there might be processor // comms underway. Change the tag we use. int oldTag = UPstream::msgType(); UPstream::msgType() = oldTag+1; const mappedPatchBase& mpp = refCast<const mappedPatchBase>(patch().patch()); const label patchi = patch().index(); const label nbrPatchi = mpp.samplePolyPatch().index(); if (baffleActivated_) { const fvPatch& nbrPatch = patch().boundaryMesh()[nbrPatchi]; const compressible::turbulenceModel& turbModel = db().template lookupObject<compressible::turbulenceModel> ( "turbulenceModel" ); // local properties const scalarField kappaw(turbModel.kappaEff(patchi)); const fvPatchScalarField& Tp = patch().template lookupPatchField<volScalarField, scalar>(TName_); const scalarField qDot(kappaw*Tp.snGrad()); tmp<scalarField> Ti = patchInternalField(); scalarField myh(patch().deltaCoeffs()*kappaw); // nbr properties const scalarField nbrKappaw(turbModel.kappaEff(nbrPatchi)); const fvPatchScalarField& nbrTw = turbModel.thermo().T().boundaryField()[nbrPatchi]; scalarField nbrQDot(nbrKappaw*nbrTw.snGrad()); mpp.map().distribute(nbrQDot); const thermalBaffle1DFvPatchScalarField& nbrField = refCast<const thermalBaffle1DFvPatchScalarField> ( nbrPatch.template lookupPatchField<volScalarField, scalar>(TName_) ); scalarField nbrTi(nbrField.patchInternalField()); mpp.map().distribute(nbrTi); scalarField nbrTp = nbrPatch.template lookupPatchField<volScalarField, scalar>(TName_); mpp.map().distribute(nbrTp); scalarField nbrh(nbrPatch.deltaCoeffs()*nbrKappaw); mpp.map().distribute(nbrh); // heat source const scalarField Q(Qs_/thickness_); tmp<scalarField> tKDeltaw(new scalarField(patch().size())); scalarField KDeltaw = tKDeltaw(); // Create fields for solid properties (p paramater not used) forAll(KDeltaw, i) { KDeltaw[i] = solidPtr_().kappa(0.0, (Tp[i] + nbrTw[i])/2.0)/thickness_[i]; } const scalarField q ( (Ti() - nbrTi)/(1.0/KDeltaw + 1.0/nbrh + 1.0/myh) ); forAll(qDot, i) { if (Qs_[i] == 0) { this->refValue()[i] = Ti()[i] - q[i]/myh[i]; this->refGrad()[i] = 0.0; this->valueFraction()[i] = 1.0; } else { if (q[i] > 0) { this->refValue()[i] = nbrTp[i] - Q[i]*thickness_[i]/(2*KDeltaw[i]); this->refGrad()[i] = 0.0; this->valueFraction()[i] = 1.0 / ( 1.0 + patch().deltaCoeffs()[i]*kappaw[i]/KDeltaw[i] ); } else if (q[i] < 0) { this->refValue()[i] = 0.0; this->refGrad()[i] = (-nbrQDot[i] + Q[i]*thickness_[i])/kappaw[i]; this->valueFraction()[i] = 0.0; } else { scalar Qt = Q[i]*thickness_[i]; this->refValue()[i] = 0.0; this->refGrad()[i] = Qt/2/kappaw[i]; this->valueFraction()[i] = 0.0; } } } if (debug) { scalar Q = gSum(patch().magSf()*qDot); Info<< patch().boundaryMesh().mesh().name() << ':' << patch().name() << ':' << this->dimensionedInternalField().name() << " <- " << nbrPatch.name() << ':' << this->dimensionedInternalField().name() << " :" << " heat[W]:" << Q << " walltemperature " << " min:" << gMin(*this) << " max:" << gMax(*this) << " avg:" << gAverage(*this) << endl; } }