From 03b8275a83787270f93db8fe04c5d29f58f53aa9 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Fri, 8 Dec 2017 14:05:25 +0000
Subject: [PATCH] ENH: add foamListRegions utility

- list all regions from constant/regionProperties:
     * foamListRegions

- list specific region type from constant/regionProperties:
     * foamListRegions fluid
     * foamListRegions solid
---
 .../miscellaneous/foamListRegions/Make/files  |   3 +
 .../foamListRegions/Make/options              |   5 +
 .../foamListRegions/foamListRegions.C         | 113 ++++++++++++++++++
 .../multiRegionHeater/Allmesh                 |   4 +-
 .../snappyMultiRegionHeater/Allrun            |   6 +-
 5 files changed, 126 insertions(+), 5 deletions(-)
 create mode 100644 applications/utilities/miscellaneous/foamListRegions/Make/files
 create mode 100644 applications/utilities/miscellaneous/foamListRegions/Make/options
 create mode 100644 applications/utilities/miscellaneous/foamListRegions/foamListRegions.C

diff --git a/applications/utilities/miscellaneous/foamListRegions/Make/files b/applications/utilities/miscellaneous/foamListRegions/Make/files
new file mode 100644
index 00000000000..218b5933c46
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListRegions/Make/files
@@ -0,0 +1,3 @@
+foamListRegions.C
+
+EXE = $(FOAM_APPBIN)/foamListRegions
diff --git a/applications/utilities/miscellaneous/foamListRegions/Make/options b/applications/utilities/miscellaneous/foamListRegions/Make/options
new file mode 100644
index 00000000000..4cf2f664c98
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListRegions/Make/options
@@ -0,0 +1,5 @@
+EXE_INC = \
+    -I$(LIB_SRC)/regionModels/regionModel/lnInclude
+
+EXE_LIBS = \
+    -lregionModels
diff --git a/applications/utilities/miscellaneous/foamListRegions/foamListRegions.C b/applications/utilities/miscellaneous/foamListRegions/foamListRegions.C
new file mode 100644
index 00000000000..4e56cd3376f
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamListRegions/foamListRegions.C
@@ -0,0 +1,113 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    foamListRegions
+
+Group
+    grpPostProcessingUtilities
+
+Description
+    List regions from constant/regionProperties.
+
+    To simplify parsing of the output, the normal banner information
+    is suppressed.
+
+Usage
+    \b foamListRegions [OPTION]
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "Time.H"
+#include "regionProperties.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+    argList::addNote("List regions from constant/regionProperties");
+
+    argList::noBanner();
+    argList::noParallel();
+    argList::noJobInfo();
+    argList::noFunctionObjects();
+    // No profiling since there is no time loop
+
+    // Non-mandatory arguments
+    argList::addArgument("regionType ... regionType");
+
+    #include "setRootCaseNonMandatoryArgs.H"
+
+    // As per "createTime.H", but quieter.
+    Time runTime(Time::controlDictName, args);
+
+    regionProperties rp(runTime);
+
+    // We now handle checking args and general sanity etc.
+    wordList regionTypes;
+
+    if (args.size() > 1)
+    {
+        regionTypes.setSize(args.size()-1);
+
+        label nTypes = 0;
+        for (label argi = 1; argi < args.size(); ++argi)
+        {
+            regionTypes[nTypes] = args[argi];
+
+            if (rp.found(regionTypes[nTypes]))
+            {
+                ++nTypes;
+            }
+            else
+            {
+                std::cerr<< "No region-type: " << regionTypes[nTypes] << nl;
+            }
+        }
+
+        regionTypes.setSize(nTypes);
+    }
+    else
+    {
+        regionTypes = rp.sortedToc();
+    }
+
+
+    for (const word& regionType : regionTypes)
+    {
+        const wordList& regionNames = rp[regionType];
+
+        for (const word& regionName : regionNames)
+        {
+            Info<< regionName << nl;
+        }
+    }
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allmesh b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allmesh
index 7f27e81ea3b..a579c1f4b60 100755
--- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allmesh
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allmesh
@@ -7,12 +7,12 @@ runApplication topoSet
 runApplication splitMeshRegions -cellZones -overwrite
 
 # Remove fluid fields from solid regions (important for post-processing)
-for i in heater leftSolid rightSolid
+for i in $(foamListRegions solid)
 do
    rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh}
 done
 
-for i in bottomWater topAir heater leftSolid rightSolid
+for i in $(foamListRegions)
 do
    runApplication -s $i changeDictionary -region $i
 done
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun
index b3614e73078..6f11ca80be8 100755
--- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun
@@ -11,15 +11,15 @@ runApplication snappyHexMesh -overwrite
 runApplication splitMeshRegions -cellZones -overwrite
 
 # remove fluid fields from solid regions (important for post-processing)
-for i in heater leftSolid rightSolid
+for i in $(foamListRegions solid)
 do
    rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh}
 done
 
 
-for i in bottomAir topAir heater leftSolid rightSolid
+for i in $(foamListRegions)
 do
-   runApplication -s $i  changeDictionary -region $i
+   runApplication -s $i changeDictionary -region $i
 done
 
 
-- 
GitLab