33template<
class CloudType>
37 { interactionType::STICK,
"stick" },
38 { interactionType::ESCAPE,
"escape" },
39 { interactionType::REBOUND,
"rebound" },
45template<
class CloudType>
49 const label localZonei
52 if (!faceZoneBBs_[localZonei].contains(
p.position()))
58 if ((
p.d() > dMax_) || (
p.d() < dMin_))
67template<
class CloudType>
73 Info<< type() <<
" output:" <<
nl;
76 const label
nZones = faceZoneIDs_.size();
81 this->getModelProperty(
"nEscape", npe0);
82 this->getModelProperty(
"nStick", nps0);
83 this->getModelProperty(
"nRebound", npr0);
91 npe[i] = npe[i] + npe0[i];
92 nps[i] = nps[i] + nps0[i];
93 npr[i] = npr[i] + npr0[i];
100 const label zonei = faceZoneIDs_[i];
102 <<
" Escape : " << npe[i] <<
nl
103 <<
" Stick : " << nps[i] <<
nl
104 <<
" Rebound : " << npr[i] <<
nl;
106 if (this->writeToFile())
108 auto&
os = filePtrs_[i];
110 writeCurrentTime(
os);
113 os <<
tab << scalar(npe[i])
114 <<
tab << scalar(nps[i])
115 <<
tab << scalar(npr[i])
122 this->setModelProperty(
"nEscape", npe);
123 this->setModelProperty(
"nStick", nps);
124 this->setModelProperty(
"nRebound", npr);
126 nEscapeParticles_ = Zero;
127 nStickParticles_ = Zero;
128 nReboundParticles_ = Zero;
134template<
class CloudType>
139 const word& modelName
143 functionObjects::writeFile
152 faceZoneInteraction_(),
156 nReboundParticles_(),
157 dMin_(this->coeffDict().getOrDefault(
"dMin", -GREAT)),
158 dMax_(this->coeffDict().getOrDefault(
"dMax", GREAT))
165 filePtrs_.setSize(nameAndInteraction.
size());
167 faceZoneBBs_.setSize(nameAndInteraction.
size());
168 faceZoneInteraction_.
setSize(nameAndInteraction.
size());
176 for (
const auto& zoneInfo : nameAndInteraction)
178 const word& zoneName = zoneInfo.first();
190 faceZoneInteraction_[nZone] =
194 auto& bb = faceZoneBBs_[nZone];
195 for (
const label facei : fz)
197 for (
const label fpi : faces[facei])
222 filePtrs_[nZone] <<
nl;
229 <<
"Unable to find faceZone " << zoneName
230 <<
" - removing" <<
endl;
235 filePtrs_.setSize(nZone);
236 faceZoneBBs_.setSize(nZone);
237 faceZoneInteraction_.
setSize(nZone);
244template<
class CloudType>
251 functionObjects::writeFile(pfi),
252 faceZoneIDs_(pfi.faceZoneIDs_),
253 faceZoneBBs_(pfi.faceZoneBBs_),
255 nEscapeParticles_(pfi.nEscapeParticles_),
256 nStickParticles_(pfi.nStickParticles_),
257 nReboundParticles_(pfi.nReboundParticles_),
265template<
class CloudType>
272 const auto& fzm = this->owner().mesh().faceZones();
276 if (!processParticle(
p, i))
281 const label zonei = faceZoneIDs_[i];
283 const label localFacei = fzm[zonei].find(
p.face());
285 if (localFacei != -1)
287 const label facei = fzm[zonei][localFacei];
289 switch (faceZoneInteraction_[i])
291 case interactionType::ESCAPE:
293 keepParticle =
false;
294 ++nEscapeParticles_[i];
297 case interactionType::STICK:
302 ++nStickParticles_[i];
305 case interactionType::REBOUND:
307 const face&
f = this->owner().mesh().faces()[facei];
308 const auto n =
f.unitNormal(this->owner().
mesh().
points());
311 pRef.U() -= 2*
n*(pRef.U() &
n);
312 ++nReboundParticles_[i];
318 <<
"Unhandled enumeration "
319 << interactionTypeNames_[faceZoneInteraction_[i]]
Templated cloud function object base class.
const CloudType & owner() const
Return const access to the owner cloud.
Templated base class for dsmc cloud.
const fvMesh & mesh() const
Return reference to the mesh.
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
Face zone-based particle interactions.
static const Enum< interactionType > interactionTypeNames_
Names for the interaction types.
bool processParticle(const parcelType &p, const label localZonei)
Return true if this particle will be assessed.
void write()
Write post-processing info.
CloudType::parcelType parcelType
Convenience typedef for parcel type.
virtual void postFace(const parcelType &p, bool &keepParticle)
Post-face hook.
const word & name() const noexcept
Return the object name.
void transfer(List< T > &list)
void setSize(const label n)
Alias for resize()
void append(const T &val)
Append an element at the end of the list.
void size(const label n)
Older name for setAddressableSize.
label findZoneID(const word &zoneName) const
Find zone index by name, return -1 if not found.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
A subset of mesh faces organised as a primitive patch.
A face is a list of labels corresponding to mesh vertices.
virtual void writeTabbed(Ostream &os, const string &str) const
Write a tabbed string to stream.
void writeHeaderValue(Ostream &os, const string &property, const Type &value) const
Write a (commented) header property and value pair.
virtual autoPtr< OFstream > createFile(const word &name, scalar timeValue) const
Return autoPtr to a new file for a given time.
virtual void writeCommented(Ostream &os, const string &str) const
Write a commented string to stream.
virtual bool writeToFile() const
Flag to allow writing to file.
Mesh data needed to do the Finite Volume discretisation.
const faceZoneMesh & faceZones() const noexcept
Return face zone mesh.
virtual const faceList & faces() const
Return raw faces.
virtual const pointField & points() const
Return raw points.
Lookup type of boundary radiation properties.
const dictionary & coeffDict() const
Return const access to the coefficients dictionary.
A class for handling words, derived from Foam::string.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
OBJstream os(runTime.globalPath()/outputName)
const labelList nFaces(UPstream::listGatherValues< label >(aMesh.nFaces()))
const labelIOList & zoneIDs
#define WarningInFunction
Report a warning using Foam::Warning.
messageStream Info
Information stream (stdout output on master, null elsewhere)
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void reduce(const List< UPstream::commsStruct > &comms, T &value, const BinaryOp &bop, const int tag, const label comm)
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0)
T returnReduce(const T &value, const BinaryOp &bop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
Reduce (copy) and return value.
constexpr char nl
The newline '\n' character (0x0a)
constexpr char tab
The tab '\t' character(0x09)
#define forAll(list, i)
Loop across all elements in list.