From 1cb29667227b1f0245aa802d458a632704ec8821 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Wed, 25 Jan 2017 13:16:49 +0100
Subject: [PATCH] ENH: add blockMesh -sets option to write cellZones as
 cellSets (closes #348)

---
 .../mesh/generation/blockMesh/blockMesh.C     | 41 ++++++++++++-------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/applications/utilities/mesh/generation/blockMesh/blockMesh.C b/applications/utilities/mesh/generation/blockMesh/blockMesh.C
index d48980cb8c0..c1c5016b35f 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMesh.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMesh.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -49,6 +49,9 @@ Usage
       - \par -dict \<filename\>
         Specify alternative dictionary for the block mesh description.
 
+      - \par -sets
+        Write cellZones as cellSets too (for processing purposes)
+
 \*---------------------------------------------------------------------------*/
 
 #include "Time.H"
@@ -85,7 +88,11 @@ int main(int argc, char *argv[])
         "file",
         "specify alternative dictionary for the blockMesh description"
     );
-
+    argList::addBoolOption
+    (
+        "sets",
+        "write cellZones as cellSets too (for processing purposes)"
+    );
     argList::addNote
     (
         "Block description\n"
@@ -187,7 +194,6 @@ int main(int argc, char *argv[])
     IOdictionary meshDict(meshDictIO);
     blockMesh blocks(meshDict, regionName);
 
-
     if (args.optionFound("blockTopology"))
     {
         // Write mesh as edges.
@@ -251,7 +257,6 @@ int main(int argc, char *argv[])
         defaultFacesType
     );
 
-
     // Read in a list of dictionaries for the merge patch pairs
     if (meshDict.found("mergePatchPairs"))
     {
@@ -271,8 +276,7 @@ int main(int argc, char *argv[])
     // Set any cellZones (note: cell labelling unaffected by above
     // mergePatchPairs)
 
-    label nZones = blocks.numZonedBlocks();
-
+    const label nZones = blocks.numZonedBlocks();
     if (nZones > 0)
     {
         Info<< nl << "Adding cell zones" << endl;
@@ -325,11 +329,7 @@ int main(int argc, char *argv[])
             }
         }
 
-
         List<cellZone*> cz(zoneMap.size());
-
-        Info<< nl << "Writing cell zones as cellSets" << endl;
-
         forAllConstIter(HashTable<label>, zoneMap, iter)
         {
             label zoneI = iter();
@@ -341,10 +341,6 @@ int main(int argc, char *argv[])
                 zoneI,
                 mesh.cellZones()
             );
-
-            // Write as cellSet for ease of processing
-            cellSet cset(mesh, iter.key(), zoneCells[zoneI].shrink());
-            cset.write();
         }
 
         mesh.pointZones().setSize(0);
@@ -356,7 +352,14 @@ int main(int argc, char *argv[])
     // Set the precision of the points data to 10
     IOstream::defaultPrecision(max(10u, IOstream::defaultPrecision()));
 
-    Info<< nl << "Writing polyMesh" << endl;
+    Info<< nl << "Writing polyMesh with "
+        << mesh.cellZones().size() << " cellZones";
+    if (args.optionFound("sets") && !mesh.cellZones().empty())
+    {
+        Info<< " (written as cellSets too)";
+    }
+    Info<< endl;
+
     mesh.removeFiles();
     if (!mesh.write())
     {
@@ -365,6 +368,14 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
+    if (args.optionFound("sets"))
+    {
+        forAll(mesh.cellZones(), zonei)
+        {
+            const cellZone& cz = mesh.cellZones()[zonei];
+            cellSet(mesh, cz.name(), cz).write();
+        }
+    }
 
     //
     // write some information
-- 
GitLab