From 54ac451bf502d06e3f4e0320f29958ce332382cd Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 17 Dec 2018 09:51:29 +0100
Subject: [PATCH] ENH: add -dict option for mirrorMesh

---
 .../manipulation/mirrorMesh/mirrorFvMesh.C    | 49 ++++++++++++-------
 .../manipulation/mirrorMesh/mirrorFvMesh.H    | 10 ++--
 .../mesh/manipulation/mirrorMesh/mirrorMesh.C | 18 ++++++-
 etc/config.sh/completion_cache                |  2 +-
 .../pimpleFoam/RAS/ellipsekkLOmega/Allrun.pre |  9 +---
 .../RAS/ellipsekkLOmega/system/mirrorMeshDict |  6 +--
 ...hangeDictionaryDict.X => mirrorMeshDict.X} | 15 +++---
 ...hangeDictionaryDict.Y => mirrorMeshDict.Y} | 15 +++---
 8 files changed, 74 insertions(+), 50 deletions(-)
 rename tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/{changeDictionaryDict.X => mirrorMeshDict.X} (84%)
 rename tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/{changeDictionaryDict.Y => mirrorMeshDict.Y} (84%)

diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
index 072933a381a..ed1d9e50ffc 100644
--- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
+++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -31,24 +31,37 @@ License
 
 Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
 :
-    fvMesh(io),
-    mirrorMeshDict_
+    mirrorFvMesh
     (
-        IOobject
+        io,
+        IOdictionary
         (
-            "mirrorMeshDict",
-            time().system(),
-            *this,
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
+            IOobject
+            (
+                "mirrorMeshDict",
+                io.time().system(),
+                io.time(),
+                IOobject::MUST_READ_IF_MODIFIED,
+                IOobject::NO_WRITE
+            )
         )
     )
+{}
+
+
+Foam::mirrorFvMesh::mirrorFvMesh
+(
+    const IOobject& io,
+    const IOdictionary& mirrorDict
+)
+:
+    fvMesh(io)
 {
-    plane mirrorPlane(mirrorMeshDict_);
+    plane mirrorPlane(mirrorDict);
 
     const scalar planeTolerance
     (
-        mirrorMeshDict_.get<scalar>("planeTolerance")
+        mirrorDict.get<scalar>("planeTolerance")
     );
 
     const pointField& oldPoints = points();
@@ -57,6 +70,9 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
     const label nOldInternalFaces = nInternalFaces();
     const polyPatchList& oldPatches = boundaryMesh();
 
+    Info<< "Mirroring mesh at origin:" << mirrorPlane.origin()
+        << " normal:" << mirrorPlane.normal() << nl;
+
     // Mirror the points
     Info<< "Mirroring points. Old points: " << oldPoints.size();
 
@@ -66,15 +82,15 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
     labelList mirrorPointLookup(oldPoints.size(), -1);
 
     // Grab the old points
-    forAll(oldPoints, pointi)
+    for (const point& pt : oldPoints)
     {
-        newPoints[nNewPoints] = oldPoints[pointi];
-        nNewPoints++;
+        newPoints[nNewPoints] = pt;
+        ++nNewPoints;
     }
 
     forAll(oldPoints, pointi)
     {
-        scalar alpha =
+        const scalar alpha =
             mirrorPlane.normalIntersect
             (
                 oldPoints[pointi],
@@ -121,7 +137,6 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
     }
 
 
-
     Info<< "Mirroring faces. Old faces: " << oldFaces.size();
 
     // Algorithm:
@@ -325,7 +340,7 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io)
     Info<< "Mirroring patches. Old patches: " << boundary().size()
         << " New patches: " << boundary().size() << endl;
 
-    Info<< "Mirroring cells.  Old cells: " << oldCells.size()
+    Info<< "Mirroring cells. Old cells: " << oldCells.size()
         << " New cells: " << 2*oldCells.size() << endl;
 
     cellList newCells(2*oldCells.size());
diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.H b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.H
index 12e5b6f0f85..e5102edc5b3 100644
--- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.H
+++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.H
@@ -51,9 +51,6 @@ class mirrorFvMesh
 {
     // Private data
 
-        //- Mirror dictionary
-        IOdictionary mirrorMeshDict_;
-
         //- Mirrored mesh
         autoPtr<fvMesh> mirrorMeshPtr_;
 
@@ -77,8 +74,11 @@ public:
 
     // Constructors
 
-        //- Construct from IOobject
-        mirrorFvMesh(const IOobject& io);
+        //- Construct from IOobject, using system mirrorMeshDict
+        explicit mirrorFvMesh(const IOobject& io);
+
+        //- Construct from IOobject and specified mirrorMeshDict
+        mirrorFvMesh(const IOobject& io, const IOdictionary& mirrorDict);
 
 
     //- Destructor
diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
index 6d74e39d28c..6e612cbae75 100644
--- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
+++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2018 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -49,12 +49,25 @@ int main(int argc, char *argv[])
         "Mirrors a mesh around a given plane."
     );
 
+    #include "addDictOption.H"
+    // Adjust the help text
+    argList::addUsage("dict", "Specify alternative mirrorMeshDict");
+    argList::setAdvanced("decomposeParDict");
+
     #include "addOverwriteOption.H"
     #include "setRootCase.H"
     #include "createTime.H"
 
     const bool overwrite = args.found("overwrite");
 
+    const word dictName("mirrorMeshDict");
+
+    #include "setSystemRunTimeDictionaryIO.H"
+
+    Info<< "Reading " << dictName << "\n" << endl;
+
+    const IOdictionary mirrorDict(dictIO);
+
     mirrorFvMesh mesh
     (
         IOobject
@@ -62,7 +75,8 @@ int main(int argc, char *argv[])
             mirrorFvMesh::defaultRegion,
             runTime.constant(),
             runTime
-        )
+        ),
+        mirrorDict
     );
 
     hexRef8Data refData
diff --git a/etc/config.sh/completion_cache b/etc/config.sh/completion_cache
index 40a4e35706d..c1d5a12450c 100644
--- a/etc/config.sh/completion_cache
+++ b/etc/config.sh/completion_cache
@@ -138,7 +138,7 @@ _of_complete_cache_[mergeOrSplitBaffles]="-case -decomposeParDict -dict -fileHan
 _of_complete_cache_[mergeSurfacePatches]="-case -fileHandler -output -patchIdRange -patchIds -patchNames | -keep -noFunctionObjects -doc -doc-source -help"
 _of_complete_cache_[meshToFPMA]="-case -decomposeParDict -fileHandler | -noFunctionObjects -parallel -doc -doc-source -help"
 _of_complete_cache_[mhdFoam]="-case -decomposeParDict -fileHandler | -dry-run -dry-run-write -listFunctionObjects -listRegisteredSwitches -listScalarBCs -listSwitches -listUnsetSwitches -listVectorBCs -noFunctionObjects -parallel -postProcess -doc -doc-source -help"
-_of_complete_cache_[mirrorMesh]="-case -decomposeParDict -fileHandler | -noFunctionObjects -overwrite -parallel -doc -doc-source -help"
+_of_complete_cache_[mirrorMesh]="-case -dict -decomposeParDict -fileHandler | -noFunctionObjects -overwrite -parallel -doc -doc-source -help"
 _of_complete_cache_[mixtureAdiabaticFlameT]="-case -fileHandler | -doc -doc-source -help"
 _of_complete_cache_[modifyMesh]="-case -decomposeParDict -dict -fileHandler | -overwrite -parallel -doc -doc-source -help"
 _of_complete_cache_[moveDynamicMesh]="-case -decomposeParDict -fileHandler -region | -checkAMI -noFunctionObjects -parallel -doc -doc-source -help"
diff --git a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/Allrun.pre b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/Allrun.pre
index f740041ae2f..df81f8b6587 100755
--- a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/Allrun.pre
+++ b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/Allrun.pre
@@ -5,13 +5,8 @@ cd ${0%/*} || exit 1                        # Run from this directory
 runApplication blockMesh
 runApplication transformPoints -scale '(1.6666 1 1)'
 
-runApplication changeDictionary -instance system -dict system/changeDictionaryDict.X
-runApplication mirrorMesh -overwrite
-rm -f log.mirrorMesh
-rm -f log.changeDictionary
-
-runApplication changeDictionary -instance system -dict system/changeDictionaryDict.Y
-runApplication mirrorMesh -overwrite
+runApplication -s xplane mirrorMesh -dict system/mirrorMeshDict.X -overwrite
+runApplication -s yplane mirrorMesh -dict system/mirrorMeshDict.Y -overwrite
 
 restore0Dir
 
diff --git a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict
index 03c59124dca..bd6cd7e9af4 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict
+++ b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict
@@ -10,7 +10,6 @@ FoamFile
     version     2.0;
     format      ascii;
     class       dictionary;
-    location    "system";
     object      mirrorMeshDict;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -20,10 +19,9 @@ planeType       pointAndNormal;
 pointAndNormalDict
 {
     point   (0 0 0);
-    normal  (0 -1 0);
+    normal  (0 0 -1);
 }
 
-planeTolerance  1e-06;
-
+planeTolerance  1e-6;
 
 // ************************************************************************* //
diff --git a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.X b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.X
similarity index 84%
rename from tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.X
rename to tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.X
index ab71308303c..912f0a21cae 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.X
+++ b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.X
@@ -10,17 +10,18 @@ FoamFile
     version     2.0;
     format      ascii;
     class       dictionary;
-    object      changeDictionaryDict;
+    object      mirrorMeshDict;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-mirrorMeshDict
+planeType       pointAndNormal;
+
+pointAndNormalDict
 {
-    pointAndNormalDict
-    {
-        point   (0 0 0);
-        normal  (-1 0 0);
-    }
+    point   (0 0 0);
+    normal  (-1 0 0);
 }
 
+planeTolerance  1e-6;
+
 // ************************************************************************* //
diff --git a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.Y b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.Y
similarity index 84%
rename from tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.Y
rename to tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.Y
index 2f49f82e326..38d389814c3 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/changeDictionaryDict.Y
+++ b/tutorials/incompressible/pimpleFoam/RAS/ellipsekkLOmega/system/mirrorMeshDict.Y
@@ -10,17 +10,18 @@ FoamFile
     version     2.0;
     format      ascii;
     class       dictionary;
-    object      changeDictionaryDict;
+    object      mirrorMeshDict;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-mirrorMeshDict
+planeType       pointAndNormal;
+
+pointAndNormalDict
 {
-    pointAndNormalDict
-    {
-        point   (0 0 0);
-        normal  (0 -1 0);
-    }
+    point   (0 0 0);
+    normal  (0 -1 0);
 }
 
+planeTolerance  1e-6;
+
 // ************************************************************************* //
-- 
GitLab