37 namespace regionModels
39 namespace surfaceFilmModels
49 VoFPatchTransfer::VoFPatchTransfer
51 surfaceFilmRegionModel& film,
52 const dictionary&
dict
58 coeffDict_.getOrDefault<scalar>(
"deltaFactorToVoF", 1.0)
62 coeffDict_.getOrDefault<scalar>(
"deltaFactorToFilm", 0.5)
66 coeffDict_.getOrDefault<scalar>(
"alphaToVoF", 0.5)
70 coeffDict_.getOrDefault<scalar>(
"alphaToFilm", 0.1)
74 coeffDict_.getOrDefault<scalar>(
"transferRateCoeff", 0.1)
77 patchTransferredMasses_()
79 const polyBoundaryMesh& pbm = film.regionMesh().boundaryMesh();
83 pbm.size() - film.regionMesh().globalData().processorPatches().size()
87 if (coeffDict_.readIfPresent(
"patches",
patchNames))
89 patchIDs_ = pbm.patchSet(
patchNames).sortedToc();
91 Info<<
" applying to " << patchIDs_.size() <<
" patches:" <<
nl;
93 for (
const label patchi : patchIDs_)
95 Info<<
" " << pbm[patchi].name() <<
endl;
100 Info<<
" applying to all patches" <<
endl;
105 patchTransferredMasses_.resize(patchIDs_.size(),
Zero);
107 if (patchIDs_.empty())
110 <<
"No patches selected"
118 VoFPatchTransfer::~VoFPatchTransfer()
142 if (!patchIDs_.size())
return;
148 const polyBoundaryMesh& pbm = film().regionMesh().boundaryMesh();
151 const twoPhaseMixtureThermo&
thermo
153 film().primaryMesh().lookupObject<twoPhaseMixtureThermo>
167 const label patchi = patchIDs_[pidi];
168 label primaryPatchi = -1;
170 forAll(film().intCoupledPatchIDs(), i)
172 const label filmPatchi = film().intCoupledPatchIDs()[i];
174 if (filmPatchi == patchi)
176 primaryPatchi = film().primaryPatchIDs()[i];
180 if (primaryPatchi != -1)
184 film().primaryMesh().
boundary()[primaryPatchi].deltaCoeffs()
186 film().toRegion(patchi, deltaCoeffs);
188 scalarField hp(heVoF.boundaryField()[primaryPatchi]);
189 film().toRegion(patchi, hp);
191 scalarField Tp(TVoF.boundaryField()[primaryPatchi]);
192 film().toRegion(patchi, Tp);
194 scalarField Cpp(CpVoF.boundaryField()[primaryPatchi]);
195 film().toRegion(patchi, Cpp);
197 scalarField rhop(rhoVoF.boundaryField()[primaryPatchi]);
198 film().toRegion(patchi, rhop);
200 scalarField alphap(alphaVoF.boundaryField()[primaryPatchi]);
201 film().toRegion(patchi, alphap);
205 film().primaryMesh().
boundary()[primaryPatchi]
206 .patchInternalField(film().primaryMesh().V())
208 film().toRegion(patchi, Vp);
210 const polyPatch& pp = pbm[patchi];
211 const labelList& faceCells = pp.faceCells();
214 scalar dMassPatch = 0;
218 const label celli = faceCells[facei];
224 delta[celli] > 2*deltaFactorToVoF_/deltaCoeffs[facei]
225 || alphap[facei] > alphaToVoF_
229 transferRateCoeff_*
delta[celli]*
rho[celli]*magSf[celli];
231 massToTransfer[celli] += dMass;
232 energyToTransfer[celli] += dMass*film().hs()[celli];
239 &&
delta[celli] < 2*deltaFactorToFilm_/deltaCoeffs[facei]
240 && alphap[facei] < alphaToFilm_
244 -transferRateCoeff_*alphap[facei]*rhop[facei]*Vp[facei];
246 massToTransfer[celli] += dMass;
247 energyToTransfer[celli] += dMass*hp[facei];
250 availableMass[celli] -= dMass;
254 patchTransferredMasses_[pidi] += dMassPatch;
255 addToTransferredMass(dMassPatch);
265 getModelProperty<scalarField>
267 "patchTransferredMasses",
272 scalarField patchTransferredMassTotals(patchTransferredMasses_);
273 Pstream::listCombineGather
275 patchTransferredMassTotals,
278 patchTransferredMasses0 += patchTransferredMassTotals;
280 setModelProperty<scalarField>
282 "patchTransferredMasses",
283 patchTransferredMasses0
286 patchTransferredMasses_ = 0;
291 void VoFPatchTransfer::patchTransferredMassTotals
297 if (!patchIDs_.size())
return;
301 getModelProperty<scalarField>
303 "patchTransferredMasses",
308 scalarField patchTransferredMassTotals(patchTransferredMasses_);
309 Pstream::listCombineGather(patchTransferredMassTotals, plusEqOp<scalar>());
313 const label patchi = patchIDs_[pidi];
314 patchMasses[patchi] +=
315 patchTransferredMasses[pidi] + patchTransferredMassTotals[pidi];