From 05314755780c2fe89217404561d982fb2568cd67 Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 28 May 2010 16:12:54 +0100 Subject: [PATCH] ENH: IO Improvements, seg fault in parallel needing found. --- .../decomposePar/decomposePar.C | 55 +++++ .../reconstructPar/reconstructPar.C | 21 ++ src/lagrangian/basic/Cloud/Cloud.H | 9 + src/lagrangian/basic/Cloud/CloudIO.C | 25 +++ .../CollisionRecordList/CollisionRecordList.C | 200 +++++++++++++++++- .../CollisionRecordList/CollisionRecordList.H | 44 ++++ .../PairCollisionRecord/PairCollisionRecord.C | 16 +- .../PairCollisionRecord/PairCollisionRecord.H | 1 + .../WallCollisionRecord/WallCollisionRecord.C | 3 +- .../WallCollisionRecord/WallCollisionRecord.H | 1 + .../WallCollisionRecordI.H | 8 + .../KinematicParcel/KinematicParcel.H | 3 +- .../KinematicParcel/KinematicParcelIO.C | 155 ++++++++++---- .../defineBasicKinematicParcel.C | 7 - .../reconstruct/reconstructLagrangianFields.C | 2 +- 15 files changed, 483 insertions(+), 67 deletions(-) diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 3457c142bb..a3f6786861 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -70,8 +70,11 @@ Usage #include "vectorIOField.H" #include "vectorFieldIOField.H" #include "sphericalTensorIOField.H" +#include "sphericalTensorFieldIOField.H" #include "symmTensorIOField.H" +#include "symmTensorFieldIOField.H" #include "tensorIOField.H" +#include "tensorFieldIOField.H" #include "pointFields.H" #include "readFields.H" @@ -395,14 +398,24 @@ int main(int argc, char *argv[]) ( cloudDirs.size() ); + PtrList > + lagrangianSphericalTensorFieldFields(cloudDirs.size()); PtrList > lagrangianSymmTensorFields ( cloudDirs.size() ); + PtrList > lagrangianSymmTensorFieldFields + ( + cloudDirs.size() + ); PtrList > lagrangianTensorFields ( cloudDirs.size() ); + PtrList > lagrangianTensorFieldFields + ( + cloudDirs.size() + ); label cloudI = 0; @@ -545,6 +558,13 @@ int main(int argc, char *argv[]) lagrangianSphericalTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSphericalTensorFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -552,6 +572,13 @@ int main(int argc, char *argv[]) lagrangianSymmTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSymmTensorFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -559,6 +586,13 @@ int main(int argc, char *argv[]) lagrangianTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianTensorFieldFields + ); + cloudI++; } } @@ -572,8 +606,11 @@ int main(int argc, char *argv[]) lagrangianVectorFields.setSize(cloudI); lagrangianVectorFieldFields.setSize(cloudI); lagrangianSphericalTensorFields.setSize(cloudI); + lagrangianSphericalTensorFieldFields.setSize(cloudI); lagrangianSymmTensorFields.setSize(cloudI); + lagrangianSymmTensorFieldFields.setSize(cloudI); lagrangianTensorFields.setSize(cloudI); + lagrangianTensorFieldFields.setSize(cloudI); // Any uniform data to copy/link? @@ -771,8 +808,11 @@ int main(int argc, char *argv[]) || lagrangianVectorFields[cloudI].size() || lagrangianVectorFieldFields[cloudI].size() || lagrangianSphericalTensorFields[cloudI].size() + || lagrangianSphericalTensorFieldFields[cloudI].size() || lagrangianSymmTensorFields[cloudI].size() + || lagrangianSymmTensorFieldFields[cloudI].size() || lagrangianTensorFields[cloudI].size() + || lagrangianTensorFieldFields[cloudI].size() ) { fieldDecomposer.decomposeFields @@ -810,16 +850,31 @@ int main(int argc, char *argv[]) cloudDirs[cloudI], lagrangianSphericalTensorFields[cloudI] ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianSphericalTensorFieldFields[cloudI] + ); fieldDecomposer.decomposeFields ( cloudDirs[cloudI], lagrangianSymmTensorFields[cloudI] ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianSymmTensorFieldFields[cloudI] + ); fieldDecomposer.decomposeFields ( cloudDirs[cloudI], lagrangianTensorFields[cloudI] ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianTensorFieldFields[cloudI] + ); } } } diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C index 2566115cf8..3734296f51 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C +++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C @@ -444,6 +444,13 @@ int main(int argc, char *argv[]) procMeshes.meshes(), sprayObjs ); + reconstructLagrangianFieldFields + ( + cloudName, + mesh, + procMeshes.meshes(), + sprayObjs + ); reconstructLagrangianFields ( cloudName, @@ -451,6 +458,13 @@ int main(int argc, char *argv[]) procMeshes.meshes(), sprayObjs ); + reconstructLagrangianFieldFields + ( + cloudName, + mesh, + procMeshes.meshes(), + sprayObjs + ); reconstructLagrangianFields ( cloudName, @@ -458,6 +472,13 @@ int main(int argc, char *argv[]) procMeshes.meshes(), sprayObjs ); + reconstructLagrangianFieldFields + ( + cloudName, + mesh, + procMeshes.meshes(), + sprayObjs + ); } } else diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H index 0520c51869..25cf3fce33 100644 --- a/src/lagrangian/basic/Cloud/Cloud.H +++ b/src/lagrangian/basic/Cloud/Cloud.H @@ -38,6 +38,7 @@ SourceFiles #include "cloud.H" #include "IDLList.H" #include "IOField.H" +#include "IOFieldField.H" #include "polyMesh.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -267,6 +268,14 @@ public: const IOField& data ) const; + //- Check lagrangian data fieldfield + template + void checkFieldFieldIOobject + ( + const Cloud& c, + const IOFieldField, DataType>& data + ) const; + //- Read the field data for the cloud of particles. Dummy at // this level. virtual void readFields(); diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C index 24a65c1685..9b4bf0d618 100644 --- a/src/lagrangian/basic/Cloud/CloudIO.C +++ b/src/lagrangian/basic/Cloud/CloudIO.C @@ -205,6 +205,31 @@ void Foam::Cloud::checkFieldIOobject } +template +template +void Foam::Cloud::checkFieldFieldIOobject +( + const Cloud& c, + const IOFieldField, DataType>& data +) const +{ + if (data.size() != c.size()) + { + FatalErrorIn + ( + "void Cloud::checkFieldFieldIOobject" + "(" + "const Cloud&, " + "const IOFieldField, DataType>&" + ") const" + ) << "Size of " << data.name() + << " field " << data.size() + << " does not match the number of particles " << c.size() + << abort(FatalError); + } +} + + template void Foam::Cloud::readFields() {} diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C index ef160cc601..aa2db0b4de 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C @@ -51,6 +51,104 @@ Foam::CollisionRecordList::CollisionRecordList(Istream& is) } +template +Foam::CollisionRecordList::CollisionRecordList +( + const labelField& pairAccessed, + const labelField& pairOrigProcOfOther, + const labelField& pairOrigIdOfOther, + const Field& pairData, + const labelField& wallAccessed, + const vectorField& wallPRel, + const Field& wallData +) +: + pairRecords_(), + wallRecords_() +{ + label nPair = pairAccessed.size(); + + if + ( + pairOrigProcOfOther.size() != nPair + || pairOrigIdOfOther.size() != nPair + || pairData.size() != nPair + ) + { + FatalErrorIn + ( + "Foam::CollisionRecordList::CollisionRecordList" + "(" + "const labelField& pairAccessed," + "const labelField& pairOrigProcOfOther," + "const labelField& pairOrigIdOfOther," + "const Field& pairData," + "const labelField& wallAccessed," + "const vectorField& wallPRel," + "const Field& wallData" + ")" + ) + << "Pair field size mismatch." << nl + << pairAccessed << nl + << pairOrigProcOfOther << nl + << pairOrigIdOfOther << nl + << pairData << nl + << abort(FatalError); + } + + forAll(pairAccessed, i) + { + pairRecords_.append + ( + PairCollisionRecord + ( + pairAccessed[i], + pairOrigProcOfOther[i], + pairOrigIdOfOther[i], + pairData[i] + ) + ); + } + + label nWall = wallAccessed.size(); + + if (wallPRel.size() != nWall || wallData.size() != nWall) + { + FatalErrorIn + ( + "Foam::CollisionRecordList::CollisionRecordList" + "(" + "const labelField& pairAccessed," + "const labelField& pairOrigProcOfOther," + "const labelField& pairOrigIdOfOther," + "const Field& pairData," + "const labelField& wallAccessed," + "const vectorField& wallPRel," + "const Field& wallData" + ")" + ) + << "Wall field size mismatch." << nl + << wallAccessed << nl + << wallPRel << nl + << wallData << nl + << abort(FatalError); + } + + forAll(wallAccessed, i) + { + wallRecords_.append + ( + WallCollisionRecord + ( + wallAccessed[i], + wallPRel[i], + wallData[i] + ) + ); + } +} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * / template @@ -60,6 +158,51 @@ Foam::CollisionRecordList::~CollisionRecordList() // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // +template +Foam::labelField +Foam::CollisionRecordList::pairAccessed() const +{ + labelField f(pairRecords_.size()); + + forAll(pairRecords_, i) + { + f[i] = pairRecords_[i].accessed(); + } + + return f; +} + + +template +Foam::labelField +Foam::CollisionRecordList::pairOrigProcOfOther() const +{ + labelField f(pairRecords_.size()); + + forAll(pairRecords_, i) + { + f[i] = pairRecords_[i].origProcOfOther(); + } + + return f; +} + + +template +Foam::labelField +Foam::CollisionRecordList::pairOrigIdOfOther() const +{ + labelField f(pairRecords_.size()); + + forAll(pairRecords_, i) + { + f[i] = pairRecords_[i].origIdOfOther(); + } + + return f; +} + + template Foam::Field Foam::CollisionRecordList::pairData() const @@ -75,6 +218,51 @@ Foam::CollisionRecordList::pairData() const } +template +Foam::labelField +Foam::CollisionRecordList::wallAccessed() const +{ + labelField f(wallRecords_.size()); + + forAll(wallRecords_, i) + { + f[i] = wallRecords_[i].accessed(); + } + + return f; +} + + +template +Foam::vectorField +Foam::CollisionRecordList::wallPRel() const +{ + vectorField f(wallRecords_.size()); + + forAll(wallRecords_, i) + { + f[i] = wallRecords_[i].pRel(); + } + + return f; +} + + +template +Foam::Field +Foam::CollisionRecordList::wallData() const +{ + Field f(wallRecords_.size()); + + forAll(wallRecords_, i) + { + f[i] = wallRecords_[i].collisionData(); + } + + return f; +} + + template Foam::PairCollisionRecord& Foam::CollisionRecordList::matchPairRecord @@ -100,12 +288,12 @@ Foam::CollisionRecordList::matchPairRecord } // Record not found, create a new one and return it as the last - // member of the list. The status of the record will be accessed - // by construction. + // member of the list. Setting the status of the record to be accessed + // on construction. pairRecords_.append ( - PairCollisionRecord(origProcOfOther, origIdOfOther) + PairCollisionRecord(true, origProcOfOther, origIdOfOther) ); return pairRecords_.last(); @@ -136,10 +324,10 @@ Foam::CollisionRecordList::matchWallRecord } // Record not found, create a new one and return it as the last - // member of the list. The status of the record will be accessed - // by construction. + // member of the list. Setting the status of the record to be accessed + // on construction. - wallRecords_.append(WallCollisionRecord(pRel)); + wallRecords_.append(WallCollisionRecord(true, pRel)); return wallRecords_.last(); } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H index 1b2ebe750c..51aa29849f 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H @@ -95,6 +95,17 @@ public: //- Construct from Istream CollisionRecordList(Istream&); + //- Construct from component fields (for IO) + CollisionRecordList + ( + const labelField& pairAccessed, + const labelField& pairOrigProcOfOther, + const labelField& pairOrigIdOfOther, + const Field& pairData, + const labelField& wallAccessed, + const vectorField& wallPRel, + const Field& wallData + ); //- Destructor ~CollisionRecordList(); @@ -110,9 +121,42 @@ public: inline const DynamicList >& wallRecords() const; + // Fields representing the data from each record, i.e if the + // records 0-N containing each data members {a, b, c, d...} + // are organised: + // + // a0 b0 c0 d0 ... + // a1 b1 c1 d1 ... + // a2 b2 c2 d2 ... + // ... + // aN bN cN dN ... + // + // Then these field return, for example, (c0, c1, c2,... cN) + + //- Return field of pair accessed from each record, used for + // field IO + labelField pairAccessed() const; + + //- Return field of pair origProcOfOther from each record, + // used for field IO + labelField pairOrigProcOfOther() const; + + //- Return field of pair origIdOfOther from each record, used + // for field IO + labelField pairOrigIdOfOther() const; + //- Return field of pair data from each record, used for field IO Field pairData() const; + //- Return field of wall accessed from each record, used for field IO + labelField wallAccessed() const; + + //- Return field of wall pRel from each record, used for field IO + vectorField wallPRel() const; + + //- Return field of wall data from each record, used for field IO + Field wallData() const; + //- Enquires if the proc and id pair of the other particle are // present in the records. If so, return non-const access to // the PairCollisionRecord (hence the data) and mark the diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C index 0357d15c5d..e20e58c433 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C @@ -30,8 +30,8 @@ License template Foam::PairCollisionRecord::PairCollisionRecord() : - origProcOfOther_(-VGREAT), - origIdOfOther_(-VGREAT), + origProcOfOther_(0), + origIdOfOther_(-1), data_(pTraits::zero) {} @@ -39,6 +39,7 @@ Foam::PairCollisionRecord::PairCollisionRecord() template Foam::PairCollisionRecord::PairCollisionRecord ( + bool accessed, label origProcOfOther, label origIdOfOther, const Type& data @@ -47,7 +48,14 @@ Foam::PairCollisionRecord::PairCollisionRecord origProcOfOther_(origProcOfOther + 1), origIdOfOther_(origIdOfOther), data_(data) -{} +{ + // Default assignment to origProcOfOther_ assumes accessed is true + + if (!accessed) + { + setUnaccessed(); + } +} template @@ -56,7 +64,7 @@ Foam::PairCollisionRecord::PairCollisionRecord const PairCollisionRecord& pCR ) : - origProcOfOther_(pCR.origProcOfOther() + 1), + origProcOfOther_(pCR.origProcOfOther_), origIdOfOther_(pCR.origIdOfOther_), data_(pCR.data_) {} diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H index 4d4a4d25f1..5604efd549 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H @@ -108,6 +108,7 @@ public: //- Construct from components PairCollisionRecord ( + bool accessed, label origProcOfOther, label origIdOfOther, const Type& data = pTraits::zero diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C index da116c4992..04125ee7b3 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C @@ -45,11 +45,12 @@ Foam::WallCollisionRecord::WallCollisionRecord() template Foam::WallCollisionRecord::WallCollisionRecord ( + bool accessed, const vector& pRel, const Type& data ) : - accessed_(true), + accessed_(accessed), pRel_(pRel), data_(data) {} diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H index f70d2045b6..7383ba6485 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H @@ -106,6 +106,7 @@ public: //- Construct from components WallCollisionRecord ( + bool accessed, const vector& pRel, const Type& data = pTraits::zero ); diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H index afb855cb33..5928714412 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H @@ -75,6 +75,14 @@ inline bool Foam::WallCollisionRecord::match } +template +inline const Foam::vector& +Foam::WallCollisionRecord::pRel() const +{ + return pRel_; +} + + template inline const Type& Foam::WallCollisionRecord::collisionData() const diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 61bb778e98..8b693c6220 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -63,8 +63,7 @@ namespace Foam typedef CollisionRecordList collisionRecordList; typedef vectorIOFieldField pairDataIOFieldField; - -typedef IOList collisionRecordIOList; +typedef vectorIOFieldField wallDataIOFieldField; template class KinematicParcel; diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C index 39b66971bf..7660070383 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C @@ -44,7 +44,13 @@ Foam::string Foam::KinematicParcel::propHeader = + " rho" + " tTurb" + " (UTurbx UTurby UTurbz)" - + " pairCollisions wallCollisions"; + + " collisionRecordsPairAccessed" + + " collisionRecordsPairOrigProcOfOther" + + " collisionRecordsPairOrigIdOfOther" + + " (collisionRecordsPairData)" + + " collisionRecordsWallAccessed" + + " collisionRecordsWallPRel" + + " (collisionRecordsWallData)"; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -168,32 +174,58 @@ void Foam::KinematicParcel::readFields(Cloud& c) IOField UTurb(c.fieldIOobject("UTurb", IOobject::MUST_READ)); c.checkFieldIOobject(c, UTurb); - collisionRecordIOList collisionRecords + labelIOFieldField collisionRecordsPairAccessed ( - IOobject + c.fieldIOobject("collisionRecordsPairAccessed", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed); + + labelIOFieldField collisionRecordsPairOrigProcOfOther + ( + c.fieldIOobject ( - "collisionRecords", - c.time().timeName(), - c, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false + "collisionRecordsPairOrigProcOfOther", + IOobject::MUST_READ ) ); + c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); - if (collisionRecords.size() != c.size()) - { - FatalErrorIn + labelIOFieldField collisionRecordsPairOrigIdOfOther + ( + c.fieldIOobject ( - "void Foam::KinematicParcel::readFields" - "(Cloud& c)" - ) << "Size of " << collisionRecords.name() - << " field " << collisionRecords.size() - << " does not match the number of particles " << c.size() - << abort(FatalError); - } + "collisionRecordsPairOrigIdOfOther", + IOobject::MUST_READ + ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); + + pairDataIOFieldField collisionRecordsPairData + ( + c.fieldIOobject("collisionRecordsPairData", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairData); + + labelIOFieldField collisionRecordsWallAccessed + ( + c.fieldIOobject("collisionRecordsWallAccessed", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed); + + vectorIOFieldField collisionRecordsWallPRel + ( + c.fieldIOobject("collisionRecordsWallPRel", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallPRel); + + wallDataIOFieldField collisionRecordsWallData + ( + c.fieldIOobject("collisionRecordsWallData", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallData); label i = 0; + forAllIter(typename Cloud, c, iter) { ParcelType& p = iter(); @@ -208,7 +240,17 @@ void Foam::KinematicParcel::readFields(Cloud& c) p.rho_ = rho[i]; p.tTurb_ = tTurb[i]; p.UTurb_ = UTurb[i]; - p.collisionRecords_ = collisionRecords[i]; + p.collisionRecords_ = collisionRecordList + ( + collisionRecordsPairAccessed[i], + collisionRecordsPairOrigProcOfOther[i], + collisionRecordsPairOrigIdOfOther[i], + collisionRecordsPairData[i], + collisionRecordsWallAccessed[i], + collisionRecordsWallPRel[i], + collisionRecordsWallData[i] + ); + i++; } } @@ -241,23 +283,43 @@ void Foam::KinematicParcel::writeFields(const Cloud& c) IOField tTurb(c.fieldIOobject("tTurb", IOobject::NO_READ), np); IOField UTurb(c.fieldIOobject("UTurb", IOobject::NO_READ), np); - collisionRecordIOList collisionRecords + labelIOFieldField collisionRecordsPairAccessed ( - IOobject + c.fieldIOobject("collisionRecordsPairAccessed", IOobject::NO_READ), + np + ); + labelIOFieldField collisionRecordsPairOrigProcOfOther + ( + c.fieldIOobject ( - "collisionRecords", - c.time().timeName(), - c, - IOobject::NO_READ, - IOobject::NO_WRITE, - false + "collisionRecordsPairOrigProcOfOther", + IOobject::NO_READ ), np ); - - pairDataIOFieldField collisionRecords_pairData + labelIOFieldField collisionRecordsPairOrigIdOfOther ( - c.fieldIOobject("collisionRecords_pairData", IOobject::NO_READ), + c.fieldIOobject("collisionRecordsPairOrigIdOfOther", IOobject::NO_READ), + np + ); + pairDataIOFieldField collisionRecordsPairData + ( + c.fieldIOobject("collisionRecordsPairData", IOobject::NO_READ), + np + ); + labelIOFieldField collisionRecordsWallAccessed + ( + c.fieldIOobject("collisionRecordsWallAccessed", IOobject::NO_READ), + np + ); + vectorIOFieldField collisionRecordsWallPRel + ( + c.fieldIOobject("collisionRecordsWallPRel", IOobject::NO_READ), + np + ); + wallDataIOFieldField collisionRecordsWallData + ( + c.fieldIOobject("collisionRecordsWallData", IOobject::NO_READ), np ); @@ -278,19 +340,15 @@ void Foam::KinematicParcel::writeFields(const Cloud& c) rho[i] = p.rho(); tTurb[i] = p.tTurb(); UTurb[i] = p.UTurb(); - collisionRecords[i] = p.collisionRecords(); - collisionRecords_pairData[i] = p.collisionRecords().pairData(); - - // collisionRecords_pairData[i].setSize - // ( - // p.collisionRecords().pairRecords().size() - // ); - - // forAll(p.collisionRecords().pairRecords(), j) - // { - // collisionRecords_pairData[i][j] = - // p.collisionRecords().pairRecords()[j].collisionData(); - // } + collisionRecordsPairAccessed[i] = p.collisionRecords().pairAccessed(); + collisionRecordsPairOrigProcOfOther[i] = + p.collisionRecords().pairOrigProcOfOther(); + collisionRecordsPairOrigIdOfOther[i] = + p.collisionRecords().pairOrigIdOfOther(); + collisionRecordsPairData[i] = p.collisionRecords().pairData(); + collisionRecordsWallAccessed[i] = p.collisionRecords().wallAccessed(); + collisionRecordsWallPRel[i] = p.collisionRecords().wallPRel(); + collisionRecordsWallData[i] = p.collisionRecords().wallData(); i++; } @@ -306,8 +364,13 @@ void Foam::KinematicParcel::writeFields(const Cloud& c) rho.write(); tTurb.write(); UTurb.write(); - collisionRecords.write(); - collisionRecords_pairData.write(); + collisionRecordsPairAccessed.write(); + collisionRecordsPairOrigProcOfOther.write(); + collisionRecordsPairOrigIdOfOther.write(); + collisionRecordsPairData.write(); + collisionRecordsWallAccessed.write(); + collisionRecordsWallPRel.write(); + collisionRecordsWallData.write(); } diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C index 37c71946b3..aee5402c34 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C @@ -34,13 +34,6 @@ namespace Foam defineTemplateTypeNameAndDebug(Cloud, 0); defineParcelTypeNameAndDebug(KinematicCloud, 0); - - defineTemplateTypeNameAndDebugWithName - ( - collisionRecordIOList, - "collisionRecordList", - 0 - ); }; diff --git a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C index 5cbc4ca36f..753a21ccbe 100644 --- a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C +++ b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C @@ -89,7 +89,7 @@ Foam::tmp > Foam::reconstructLagrangianField template -Foam::tmp, Type> > +Foam::tmp, Type> > Foam::reconstructLagrangianFieldField ( const word& cloudName,