36 template<
class CloudType>
50 if (Pstream::master())
53 mkDir(this->writeTimeDir());
61 this->writeTimeDir()/(
type() +
'_' + zoneName +
".dat")
66 <<
"# Source : " <<
type() <<
nl
67 <<
"# Face zone : " << zoneName <<
nl
68 <<
"# Faces : " << nFaces <<
nl
69 <<
"# Area : " << totArea <<
nl
70 <<
"# Time" <<
tab <<
"nParcels" <<
tab <<
"mass" <<
endl;
78 template<
class CloudType>
81 const typename parcelType::trackingData& td
84 Info<< this->modelName() <<
" output:" <<
nl;
91 const word& zoneName = fzm[faceZoneIDs_[i]].name();
96 Info<<
" faceZone " << zoneName
97 <<
": removed " << zoneNParcels
98 <<
" parcels with mass " << zoneMass
106 template<
class CloudType>
109 const fvMesh&
mesh = this->owner().
mesh();
110 const Time& time =
mesh.time();
113 List<scalar> allZoneMass(faceZoneIDs_.size(), 0.0);
114 List<label> allZoneNParcels(faceZoneIDs_.size(), 0);
118 allZoneMass[i] =
returnReduce(mass_[i], sumOp<scalar>());
119 allZoneNParcels[i] =
returnReduce(nParcels_[i], sumOp<label>());
121 if (outputFilePtr_.set(i))
123 OFstream&
os = outputFilePtr_[i];
124 os << time.timeName() << token::TAB
125 << allZoneNParcels[i] << token::TAB
126 << allZoneMass[i] <<
endl;
141 this->setModelProperty(
"mass", allZoneMass);
142 this->setModelProperty(
"nParcels", allZoneNParcels);
148 template<
class CloudType>
153 const word& modelName
160 typeId_(this->coeffDict().template getOrDefault<label>(
"parcelType", -1)),
161 log_(this->coeffDict().getBool(
"log")),
162 resetOnWrite_(this->coeffDict().getBool(
"resetOnWrite")),
163 resetOnStart_(this->coeffDict().getBool(
"resetOnStart")),
168 nParcels_.
setSize(faceZoneNames.size(), 0);
169 mass_.
setSize(faceZoneNames.size(), 0.0);
177 outputFilePtr_.setSize(faceZoneNames.size());
186 const word& zoneName = faceZoneNames[i];
187 label zonei = fzm.findZoneID(zoneName);
192 const faceZone& fz = fzm[zonei];
195 Info<<
" " << zoneName <<
" faces: " << nFaces <<
nl;
197 scalar totArea = 0.0;
198 for (label facei : fz)
202 totArea += magSf[facei];
207 label patchi = pbm.patchID()[bFacei];
208 const polyPatch& pp = pbm[patchi];
212 !magSf.boundaryField()[patchi].coupled()
213 || refCast<const coupledPolyPatch>(pp).owner()
216 label localFacei = pp.whichFace(facei);
217 totArea += magSf.boundaryField()[patchi][localFacei];
223 makeLogFile(zoneName, i, nFaces, totArea);
231 template<
class CloudType>
238 faceZoneIDs_(rpf.faceZoneIDs_),
239 nParcels_(rpf.nParcels_),
241 typeId_(rpf.typeId_),
243 resetOnWrite_(rpf.resetOnWrite_),
244 resetOnStart_(rpf.resetOnStart_),
251 template<
class CloudType>
258 if ((typeId_ >= 0) && (
p.typeId() != typeId_))
266 this->owner().solution().
output()
267 || this->owner().solution().
transient()
274 const faceZone& fz = fzm[faceZoneIDs_[i]];
275 if (fz.found(
p.face()))
278 mass_[i] +=
p.mass()*
p.nParticle();
279 keepParticle =
false;