35template<
class ParcelType>
39template<
class ParcelType>
42 offsetof(CollidingParcel<ParcelType>, collisionRecords_)
49template<
class ParcelType>
87template<
class ParcelType>
88template<
class CloudType>
91 const bool readOnProc = c.size();
93 ParcelType::readFields(c);
96 c.checkFieldIOobject(c,
f);
103 c.checkFieldIOobject(c, angularMomentum);
110 c.checkFieldIOobject(c, torque);
117 c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed);
123 "collisionRecordsPairOrigProcOfOther",
128 c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
134 "collisionRecordsPairOrigIdOfOther",
139 c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
146 c.checkFieldFieldIOobject(c, collisionRecordsPairData);
153 c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed);
160 c.checkFieldFieldIOobject(c, collisionRecordsWallPRel);
167 c.checkFieldFieldIOobject(c, collisionRecordsWallData);
174 p.angularMomentum_ = angularMomentum[i];
175 p.torque_ = torque[i];
179 collisionRecordsPairAccessed[i],
180 collisionRecordsPairOrigProcOfOther[i],
181 collisionRecordsPairOrigIdOfOther[i],
182 collisionRecordsPairData[i],
183 collisionRecordsWallAccessed[i],
184 collisionRecordsWallPRel[i],
185 collisionRecordsWallData[i]
193template<
class ParcelType>
194template<
class CloudType>
197 ParcelType::writeFields(c);
199 const label np = c.size();
200 const bool writeOnProc = c.size();
204 IOField<vector> angMom
220 "collisionRecordsPairOrigProcOfOther",
252 for (
const CollidingParcel<ParcelType>&
p : c)
255 angMom[i] =
p.angularMomentum();
256 torque[i] =
p.torque();
258 collisionRecordsPairAccessed[i] =
p.collisionRecords().pairAccessed();
259 collisionRecordsPairOrigProcOfOther[i] =
260 p.collisionRecords().pairOrigProcOfOther();
261 collisionRecordsPairOrigIdOfOther[i] =
262 p.collisionRecords().pairOrigIdOfOther();
263 collisionRecordsPairData[i] =
p.collisionRecords().pairData();
264 collisionRecordsWallAccessed[i] =
p.collisionRecords().wallAccessed();
265 collisionRecordsWallPRel[i] =
p.collisionRecords().wallPRel();
266 collisionRecordsWallData[i] =
p.collisionRecords().wallData();
271 f.write(writeOnProc);
272 angMom.write(writeOnProc);
273 torque.write(writeOnProc);
275 collisionRecordsPairAccessed.write(writeOnProc);
276 collisionRecordsPairOrigProcOfOther.write(writeOnProc);
277 collisionRecordsPairOrigIdOfOther.write(writeOnProc);
278 collisionRecordsPairData.write(writeOnProc);
279 collisionRecordsWallAccessed.write(writeOnProc);
280 collisionRecordsWallPRel.write(writeOnProc);
281 collisionRecordsWallData.write(writeOnProc);
285template<
class ParcelType>
294 ParcelType::writeProperties(
os, filters, delim, namesOnly);
297 #define writeProp(Name, Value) \
298 ParcelType::writeProperty(os, Name, Value, namesOnly, delim, filters)
301 writeProp(
"angularMomentum", angularMomentum_);
309template<
class ParcelType>
310template<
class CloudType>
317 ParcelType::readObjects(c, obr);
319 if (!c.size())
return;
329 p.angularMomentum_ = angMom[i];
330 p.torque_ = torque[i];
337template<
class ParcelType>
338template<
class CloudType>
345 ParcelType::writeObjects(c, obr);
347 const label np = c.size();
354 for (
const CollidingParcel<ParcelType>&
p : c)
357 angMom[i] =
p.angularMomentum();
358 torque[i] =
p.torque();
367template<
class ParcelType>
368Foam::Ostream& Foam::operator<<
387 reinterpret_cast<const char*
>(&
p.f_),
390 os <<
p.collisionRecords();
Useful combination of include files which define Sin, Sout and Serr and the use of IO streams general...
Wrapper around kinematic parcel types to add collision modelling.
static void writeObjects(const CloudType &c, objectRegistry &obr)
Write particle fields as objects into the obr registry.
const vector & angularMomentum() const
Return const access to angular momentum.
static const std::size_t sizeofFields
Size in bytes of the fields.
vector f_
Force on particle due to collisions [N].
static void readObjects(CloudType &c, const objectRegistry &obr)
Read particle fields as objects from the obr registry.
const vector & f() const
Return const access to force.
collisionRecordList collisionRecords_
Particle collision records.
static void writeFields(const CloudType &c)
Write.
const vector & torque() const
Return const access to torque.
void writeProperties(Ostream &os, const wordRes &filters, const word &delim, const bool namesOnly) const
Write individual parcel properties to stream.
vector angularMomentum_
Angular momentum of Parcel in global reference frame [kg m2/s].
static void readFields(CloudType &c)
Read.
vector torque_
Torque on particle due to collisions in global.
CollidingParcel(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti)
Construct from mesh, coordinates and topology.
A primitive field of type <T> with automated input and output.
@ NO_READ
Nothing to be read.
@ MUST_READ
Reading required.
streamFormat format() const noexcept
Get the current stream format.
@ ASCII
"ascii" (normal default)
virtual bool check(const char *operation) const
Check IOstream status for given operation.
bool fatalCheckNativeSizes(const char *operation) const
Assert that the label/scalar byte-size associated with the stream are the native label/scalar sizes.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
virtual Istream & read(token &)=0
Return next token from stream.
virtual Ostream & write(const char c) override
Write character.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
static const IOField< Type > & lookupIOField(const word &fieldName, const objectRegistry &obr)
Lookup an IOField within object registry.
static IOField< Type > & createIOField(const word &fieldName, const label nParticle, objectRegistry &obr)
Helper to construct IOField on a supplied object registry.
Registry of regIOobjects.
Mesh consisting of general polyhedral cells.
virtual bool write(const bool writeOnProc=true) const
Write using setting from DB.
A class for handling character strings derived from std::string.
A List of wordRe with additional matching capabilities.
A class for handling words, derived from Foam::string.
OBJstream os(runTime.globalPath()/outputName)
#define writeProp(Name, Value)
DSMCCloud< dsmcParcel > CloudType
vectorFieldCompactIOField pairDataFieldCompactIOField
CollisionRecordList< vector, vector > collisionRecordList
CompactIOField< labelField > labelFieldCompactIOField
Compact IO for a Field of labelField.
CompactIOField< vectorField > vectorFieldCompactIOField
Compact IO for a Field of vectorField.
static constexpr const zero Zero
Global zero (0).
vectorFieldCompactIOField wallDataFieldCompactIOField