From ba45a48caf4d01526721f0a8b5206ee127cdf37c Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Fri, 14 Jun 2013 12:46:32 +0100
Subject: [PATCH] ENH: decomposePar: decomposing cellSets, faceSets, pointSets

---
 .../decomposePar/decomposePar.C               | 11 ++-
 .../decomposePar/domainDecomposition.C        | 83 ++++++++++++++++++-
 .../decomposePar/domainDecomposition.H        |  4 +-
 3 files changed, 94 insertions(+), 4 deletions(-)

diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index 6fb8e69b969..21ba1cdfa1c 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -55,6 +55,9 @@ Usage
     \param -fields \n
     Use existing geometry decomposition and convert fields only.
 
+    \param -sets \n
+    Decompose cellSets, faceSets, pointSets.
+
     \param -force \n
     Remove any existing \a processor subdirectories before decomposing the
     geometry.
@@ -127,6 +130,11 @@ int main(int argc, char *argv[])
         "use existing geometry decomposition and convert fields only"
     );
     argList::addBoolOption
+    (
+        "sets",
+        "decompose cellSets, faceSets, pointSets"
+    );
+    argList::addBoolOption
     (
         "force",
         "remove existing processor*/ subdirs before decomposing the geometry"
@@ -146,6 +154,7 @@ int main(int argc, char *argv[])
     bool writeCellDist           = args.optionFound("cellDist");
     bool copyUniform             = args.optionFound("copyUniform");
     bool decomposeFieldsOnly     = args.optionFound("fields");
+    bool decomposeSets           = args.optionFound("sets");
     bool forceOverwrite          = args.optionFound("force");
     bool ifRequiredDecomposition = args.optionFound("ifRequired");
 
@@ -312,7 +321,7 @@ int main(int argc, char *argv[])
         {
             mesh.decomposeMesh();
 
-            mesh.writeDecomposition();
+            mesh.writeDecomposition(decomposeSets);
 
             if (writeCellDist)
             {
diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
index 15cbd85d11e..4eda4114820 100644
--- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
+++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
@@ -34,6 +34,10 @@ License
 #include "globalMeshData.H"
 #include "DynamicList.H"
 #include "fvFieldDecomposer.H"
+#include "IOobjectList.H"
+#include "cellSet.H"
+#include "faceSet.H"
+#include "pointSet.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
@@ -123,7 +127,7 @@ Foam::domainDecomposition::~domainDecomposition()
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-bool Foam::domainDecomposition::writeDecomposition()
+bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets)
 {
     Info<< "\nConstructing processor meshes" << endl;
 
@@ -160,6 +164,37 @@ bool Foam::domainDecomposition::writeDecomposition()
     }
 
 
+    PtrList<const cellSet> cellSets;
+    PtrList<const faceSet> faceSets;
+    PtrList<const pointSet> pointSets;
+    if (decomposeSets)
+    {
+        // Read sets
+        IOobjectList objects(*this, facesInstance(), "polyMesh/sets");
+        {
+            IOobjectList cSets(objects.lookupClass(cellSet::typeName));
+            forAllConstIter(IOobjectList, cSets, iter)
+            {
+                cellSets.append(new cellSet(*iter()));
+            }
+        }
+        {
+            IOobjectList fSets(objects.lookupClass(faceSet::typeName));
+            forAllConstIter(IOobjectList, fSets, iter)
+            {
+                faceSets.append(new faceSet(*iter()));
+            }
+        }
+        {
+            IOobjectList pSets(objects.lookupClass(pointSet::typeName));
+            forAllConstIter(IOobjectList, pSets, iter)
+            {
+                pointSets.append(new pointSet(*iter()));
+            }
+        }
+    }
+
+
     label maxProcCells = 0;
     label totProcFaces = 0;
     label maxProcPatches = 0;
@@ -732,6 +767,52 @@ bool Foam::domainDecomposition::writeDecomposition()
 
         procMesh.write();
 
+
+
+        if (decomposeSets)
+        {
+            forAll(cellSets, i)
+            {
+                const cellSet& cs = cellSets[i];
+                cellSet set(procMesh, cs.name(), cs.size()/nProcs_);
+                forAll(curCellLabels, i)
+                {
+                    if (cs.found(curCellLabels[i]))
+                    {
+                        set.insert(i);
+                    }
+                }
+                set.write();
+            }
+            forAll(faceSets, i)
+            {
+                const faceSet& cs = faceSets[i];
+                faceSet set(procMesh, cs.name(), cs.size()/nProcs_);
+                forAll(curFaceLabels, i)
+                {
+                    if (cs.found(mag(curFaceLabels[i])-1))
+                    {
+                        set.insert(i);
+                    }
+                }
+                set.write();
+            }
+            forAll(pointSets, i)
+            {
+                const pointSet& cs = pointSets[i];
+                pointSet set(procMesh, cs.name(), cs.size()/nProcs_);
+                forAll(curPointLabels, i)
+                {
+                    if (cs.found(curPointLabels[i]))
+                    {
+                        set.insert(i);
+                    }
+                }
+                set.write();
+            }
+        }
+
+
         // Write points if pointsInstance differing from facesInstance
         if (facesInstancePointsPtr_.valid())
         {
diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H
index e5fb5380860..9487aefef03 100644
--- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H
+++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -172,7 +172,7 @@ public:
         void decomposeMesh();
 
         //- Write decomposition
-        bool writeDecomposition();
+        bool writeDecomposition(const bool decomposeSets);
 
         //- Cell-processor decomposition labels
         const labelList& cellToProc() const
-- 
GitLab