From 304d3fe44265cd6457bc9788c64fc80c501a1bfc Mon Sep 17 00:00:00 2001
From: andy <a.heather@opencfd.co.uk>
Date: Tue, 9 Jun 2009 14:00:09 +0100
Subject: [PATCH] adding limit to number of stored parcels

---
 .../PatchPostProcessing/PatchPostProcessing.C | 22 +++++++++++--------
 .../PatchPostProcessing/PatchPostProcessing.H | 11 ++++++++++
 .../PatchPostProcessingI.H                    | 18 +++++++++++++--
 3 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C
index 5c01e9b4881..452b6f8240f 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 9f5dc850964..86e04f7a1c1 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 e02358aecf8..b74cc8462af 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_;
+}
+
+
 // ************************************************************************* //
-- 
GitLab