mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: collisionRecord IO.
This commit is contained in:
@ -33,7 +33,7 @@ Description
|
||||
- drag
|
||||
- turbulent dispersion
|
||||
- wall interactions
|
||||
- many-body collisions
|
||||
- many-body collisions, including memory of data from previous collision
|
||||
|
||||
SourceFiles
|
||||
KinematicParcelI.H
|
||||
@ -59,6 +59,9 @@ SourceFiles
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
typedef CollisionRecordList<vector, vector> collisionRecordList;
|
||||
typedef IOList<collisionRecordList> collisionRecordIOList;
|
||||
|
||||
template<class ParcelType>
|
||||
class KinematicParcel;
|
||||
|
||||
@ -268,7 +271,7 @@ protected:
|
||||
vector UTurb_;
|
||||
|
||||
//- Particle collision records
|
||||
CollisionRecordList<vector, vector> collisionRecords_;
|
||||
collisionRecordList collisionRecords_;
|
||||
|
||||
|
||||
// Cell-based quantities
|
||||
@ -400,8 +403,7 @@ public:
|
||||
inline const vector& UTurb() const;
|
||||
|
||||
//- Return const access to the collision records
|
||||
inline const CollisionRecordList<vector, vector>&
|
||||
collisionRecords() const;
|
||||
inline const collisionRecordList& collisionRecords() const;
|
||||
|
||||
|
||||
// Edit
|
||||
@ -440,7 +442,7 @@ public:
|
||||
inline vector& UTurb();
|
||||
|
||||
//- Return access to collision records
|
||||
inline CollisionRecordList<vector, vector>& collisionRecords();
|
||||
inline collisionRecordList& collisionRecords();
|
||||
|
||||
|
||||
// Helper functions
|
||||
|
||||
@ -348,7 +348,7 @@ inline bool& Foam::KinematicParcel<ParcelType>::active()
|
||||
|
||||
|
||||
template <class ParcelType>
|
||||
inline const Foam::CollisionRecordList<Foam::vector, Foam::vector>&
|
||||
inline const Foam::collisionRecordList&
|
||||
Foam::KinematicParcel<ParcelType>::collisionRecords() const
|
||||
{
|
||||
return collisionRecords_;
|
||||
@ -426,7 +426,7 @@ inline Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb()
|
||||
|
||||
|
||||
template <class ParcelType>
|
||||
inline Foam::CollisionRecordList<Foam::vector, Foam::vector>&
|
||||
inline Foam::collisionRecordList&
|
||||
Foam::KinematicParcel<ParcelType>::collisionRecords()
|
||||
{
|
||||
return collisionRecords_;
|
||||
|
||||
@ -43,7 +43,8 @@ Foam::string Foam::KinematicParcel<ParcelType>::propHeader =
|
||||
+ " (torquex torquey torquez)"
|
||||
+ " rho"
|
||||
+ " tTurb"
|
||||
+ " (UTurbx UTurby UTurbz)";
|
||||
+ " (UTurbx UTurby UTurbz)"
|
||||
+ " pairCollisions wallCollisions";
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
@ -167,6 +168,31 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
|
||||
IOField<vector> UTurb(c.fieldIOobject("UTurb", IOobject::MUST_READ));
|
||||
c.checkFieldIOobject(c, UTurb);
|
||||
|
||||
collisionRecordIOList collisionRecords
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"collisionRecords",
|
||||
c.time().timeName(),
|
||||
c,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
if (collisionRecords.size() != c.size())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"void Foam::KinematicParcel<ParcelType>::readFields"
|
||||
"(Cloud<ParcelType>& c)"
|
||||
) << "Size of " << collisionRecords.name()
|
||||
<< " field " << collisionRecords.size()
|
||||
<< " does not match the number of particles " << c.size()
|
||||
<< abort(FatalError);
|
||||
}
|
||||
|
||||
label i = 0;
|
||||
forAllIter(typename Cloud<ParcelType>, c, iter)
|
||||
{
|
||||
@ -182,6 +208,7 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
|
||||
p.rho_ = rho[i];
|
||||
p.tTurb_ = tTurb[i];
|
||||
p.UTurb_ = UTurb[i];
|
||||
p.collisionRecords_ = collisionRecords[i];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@ -213,7 +240,22 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
|
||||
IOField<scalar> tTurb(c.fieldIOobject("tTurb", IOobject::NO_READ), np);
|
||||
IOField<vector> UTurb(c.fieldIOobject("UTurb", IOobject::NO_READ), np);
|
||||
|
||||
collisionRecordIOList collisionRecords
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"collisionRecords",
|
||||
c.time().timeName(),
|
||||
c,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
np
|
||||
);
|
||||
|
||||
label i = 0;
|
||||
|
||||
forAllConstIter(typename Cloud<ParcelType>, c, iter)
|
||||
{
|
||||
const KinematicParcel<ParcelType>& p = iter();
|
||||
@ -229,6 +271,7 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
|
||||
rho[i] = p.rho();
|
||||
tTurb[i] = p.tTurb();
|
||||
UTurb[i] = p.UTurb();
|
||||
collisionRecords[i] = p.collisionRecords();
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -243,6 +286,7 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
|
||||
rho.write();
|
||||
tTurb.write();
|
||||
UTurb.write();
|
||||
collisionRecords.write();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -25,14 +25,23 @@ License
|
||||
|
||||
#include "basicKinematicParcel.H"
|
||||
#include "KinematicCloud.H"
|
||||
#include "KinematicParcel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
defineTemplateTypeNameAndDebug(Cloud<basicKinematicParcel>, 0);
|
||||
|
||||
defineParcelTypeNameAndDebug(KinematicCloud<basicKinematicParcel>, 0);
|
||||
|
||||
defineTemplateTypeNameAndDebugWithName
|
||||
(
|
||||
collisionRecordIOList,
|
||||
"collisionRecordList",
|
||||
0
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user