diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C index 5c01e9b48814bb9e502ce6977d02a019af94271e..452b6f8240fffa25ceda04314d6a07e3ad625a96 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C @@ -62,7 +62,7 @@ void Foam::PatchPostProcessing<CloudType>::write() mesh_.time().writeCompression() ); - patchData_[patchI].clear(); + patchData_[patchI].clearStorage(); } } @@ -79,8 +79,10 @@ Foam::PatchPostProcessing<CloudType>::PatchPostProcessing PostProcessingModel<CloudType>(dict, owner, typeName), mesh_(owner.mesh()), patchNames_(this->coeffDict().lookup("patches")), - patchData_(patchNames_.size()) + patchData_(patchNames_.size()), + globalToLocalPatchIds_(patchNames_.size()) { + labelList localToGlobal(patchNames_.size()); forAll(patchNames_, patchI) { label id = mesh_.boundaryMesh().findPatchID(patchNames_[patchI]); @@ -97,6 +99,12 @@ Foam::PatchPostProcessing<CloudType>::PatchPostProcessing << "Available patches are: " << mesh_.boundaryMesh().names() << nl << exit(FatalError); } + localToGlobal[patchI] = id; + } + + forAll(localToGlobal, patchI) + { + globalToLocalPatchIds_[localToGlobal[patchI]] = patchI; } } @@ -124,14 +132,10 @@ void Foam::PatchPostProcessing<CloudType>::postPatch const label patchI ) { - const word& patchName = mesh_.boundaryMesh()[patchI].name(); - forAll(patchNames_, i) + label localPatchI = globalToLocalPatchIds_[patchI]; + if (patchData_[localPatchI].size() < maxStoredParcels_) { - if (patchNames_[i] == patchName) - { - patchData_[i].append(p.clone()); - break; - } + patchData_[localPatchI].append(p.clone()); } } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H index 9f5dc85096402fc19604b0626e30e2a40a05f1f1..86e04f7a1c1b92f60b7cb35941254af490a4807e 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H @@ -59,12 +59,18 @@ class PatchPostProcessing //- Reference to the mesh const polyMesh& mesh_; + //- Maximum number of parcels to store per patch + label maxStoredParcels_; + //- List of patch names wordList patchNames_; //- List of parcel data per patch List<DynamicList<autoPtr<parcelType> > > patchData_; + //- Mapping from global to local patch ids + labelList globalToLocalPatchIds_; + protected: @@ -97,10 +103,15 @@ public: //- Return const access to the mesh inline const polyMesh& mesh() const; + //- Return maximum number of parcels to store per patch + inline label maxStoredParcels() const; //- Return const access to the list of patch names inline const wordList& patchNames() const; + //- Return const mapping from global to local patch ids + inline const labelList& globalToLocalPatchIds() const; + // Evaluation diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H index e02358aecf87ba77c9ab9794bf99b3e6706af3b6..b74cc8462af2771e109076c7b9a5c79a11806a73 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H @@ -32,11 +32,25 @@ const Foam::polyMesh& Foam::PatchPostProcessing<CloudType>::mesh() const template<class CloudType> -const Foam::wordList& -Foam::PatchPostProcessing<CloudType>::patchNames() const +Foam::label Foam::PatchPostProcessing<CloudType>::maxStoredParcels() const +{ + return maxStoredParcels_; +} + + +template<class CloudType> +const Foam::wordList& Foam::PatchPostProcessing<CloudType>::patchNames() const { return patchNames_; } +template<class CloudType> +const Foam::labelList& +Foam::PatchPostProcessing<CloudType>::globalToLocalPatchIds() const +{ + return globalToLocalPatchIds_; +} + + // ************************************************************************* //