34 namespace regionModels
36 namespace surfaceFilmModels
46 VoFPatchTransfer::VoFPatchTransfer
48 surfaceFilmRegionModel& film,
49 const dictionary& dict
52 transferModel(
type(), film, dict),
55 coeffDict_.lookupOrDefault<scalar>(
"deltaFactorToVoF", 1.0)
59 coeffDict_.lookupOrDefault<scalar>(
"deltaFactorToFilm", 0.5)
63 coeffDict_.lookupOrDefault<scalar>(
"alphaToVoF", 0.5)
67 coeffDict_.lookupOrDefault<scalar>(
"alphaToFilm", 0.1)
71 coeffDict_.lookupOrDefault<scalar>(
"transferRateCoeff", 0.1)
74 const polyBoundaryMesh& pbm = film.regionMesh().boundaryMesh();
77 pbm.size() - film.regionMesh().globalData().processorPatches().size()
80 if (coeffDict_.found(
"patches"))
85 Info<<
" applying to patches:" <<
nl;
90 const label patchi = iter.key();
91 patchIDs_[pidi++] =
patchi;
94 patchIDs_.setSize(pidi);
95 patchTransferredMasses_.setSize(pidi, 0);
99 Info<<
" applying to all patches" <<
endl;
106 patchTransferredMasses_.setSize(patchIDs_.size(), 0);
109 if (!patchIDs_.size())
112 <<
"No patches selected" 120 VoFPatchTransfer::~VoFPatchTransfer()
144 if (!patchIDs_.size())
return;
150 const polyBoundaryMesh& pbm = film().regionMesh().boundaryMesh();
153 const twoPhaseMixtureThermo&
thermo 155 film().primaryMesh().lookupObject<twoPhaseMixtureThermo>
169 const label patchi = patchIDs_[pidi];
170 label primaryPatchi = -1;
172 forAll(film().intCoupledPatchIDs(), i)
174 const label filmPatchi = film().intCoupledPatchIDs()[i];
176 if (filmPatchi == patchi)
178 primaryPatchi = film().primaryPatchIDs()[i];
182 if (primaryPatchi != -1)
186 film().primaryMesh().
boundary()[primaryPatchi].deltaCoeffs()
188 film().toRegion(patchi, deltaCoeffs);
190 scalarField hp(heVoF.boundaryField()[primaryPatchi]);
191 film().toRegion(patchi, hp);
193 scalarField Tp(TVoF.boundaryField()[primaryPatchi]);
194 film().toRegion(patchi, Tp);
196 scalarField Cpp(CpVoF.boundaryField()[primaryPatchi]);
197 film().toRegion(patchi, Cpp);
199 scalarField rhop(rhoVoF.boundaryField()[primaryPatchi]);
200 film().toRegion(patchi, rhop);
202 scalarField alphap(alphaVoF.boundaryField()[primaryPatchi]);
203 film().toRegion(patchi, alphap);
207 film().primaryMesh().
boundary()[primaryPatchi]
208 .patchInternalField(film().primaryMesh().V())
210 film().toRegion(patchi, Vp);
212 const polyPatch& pp = pbm[
patchi];
213 const labelList& faceCells = pp.faceCells();
216 scalar dMassPatch = 0;
220 const label celli = faceCells[facei];
226 delta[celli] > 2*deltaFactorToVoF_/deltaCoeffs[facei]
227 || alphap[facei] > alphaToVoF_
231 transferRateCoeff_*delta[celli]*rho[celli]*magSf[celli];
233 massToTransfer[celli] += dMass;
234 energyToTransfer[celli] += dMass*film().hs()[celli];
240 && delta[celli] < 2*deltaFactorToFilm_/deltaCoeffs[facei]
241 && alphap[facei] < alphaToFilm_
245 -transferRateCoeff_*alphap[facei]*rhop[facei]*Vp[facei];
247 massToTransfer[celli] += dMass;
248 energyToTransfer[celli] += dMass*hp[facei];
251 availableMass[celli] -= dMass;
255 patchTransferredMasses_[pidi] += dMassPatch;
256 addToTransferredMass(dMassPatch);
266 getModelProperty<scalarField>
268 "patchTransferredMasses",
273 scalarField patchTransferredMassTotals(patchTransferredMasses_);
274 Pstream::listCombineGather
276 patchTransferredMassTotals,
279 patchTransferredMasses0 += patchTransferredMassTotals;
281 setModelProperty<scalarField>
283 "patchTransferredMasses",
284 patchTransferredMasses0
287 patchTransferredMasses_ = 0;
292 void VoFPatchTransfer::patchTransferredMassTotals
298 if (!patchIDs_.size())
return;
302 getModelProperty<scalarField>
304 "patchTransferredMasses",
309 scalarField patchTransferredMassTotals(patchTransferredMasses_);
310 Pstream::listCombineGather(patchTransferredMassTotals, plusEqOp<scalar>());
314 const label patchi = patchIDs_[pidi];
316 patchTransferredMasses[pidi] + patchTransferredMassTotals[pidi];
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
errorManipArg< error, int > exit(error &err, const int errNo=1)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Ostream & endl(Ostream &os)
Add newline and flush stream.
rhoReactionThermo & thermo
addToRunTimeSelectionTable(surfaceFilmRegionModel, kinematicSingleLayer, mesh)
Macros for easy insertion into run-time selection tables.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
HashSet< label, Hash< label > > labelHashSet
A HashSet with label keys.
wordList patchNames(nPatches)
List< label > labelList
A List of labels.
const word dictName("particleTrackDict")
faceListList boundary(nPatches)
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
volScalarField scalarField(fieldObject, mesh)
Info<< "Predicted p max-min : "<< max(p).value()<< " "<< min(p).value()<< endl;rho==max(psi *p+alphal *rhol0+((alphav *psiv+alphal *psil) - psi) *pSat, rhoMin);# 1 "/home/ubuntu/OpenFOAM-6/applications/solvers/multiphase/cavitatingFoam/alphavPsi.H" 1{ alphav=max(min((rho - rholSat)/(rhovSat - rholSat), scalar(1)), scalar(0));alphal=1.0 - alphav;Info<< "max-min alphav: "<< max(alphav).value()<< " "<< min(alphav).value()<< endl;psiModel-> correct()
fileName::Type type(const fileName &, const bool followLink=true)
Return the file type: DIRECTORY or FILE.
List< wordRe > wordReList
A List of wordRe (word or regular expression)
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
defineTypeNameAndDebug(kinematicSingleLayer, 0)