From 0efa54821a3fc41eca27f392ff7ba039a40d727d Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 25 Nov 2010 13:03:11 +0100
Subject: [PATCH] ENH: support regions for PV3blockMeshReader

---
 .../vtkPV3blockMesh/vtkPV3blockMesh.C         | 28 +++++++++++++++++--
 .../vtkPV3blockMesh/vtkPV3blockMesh.H         |  6 ++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C
index f64f43b5420..da1573bf77c 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C
@@ -148,6 +148,8 @@ Foam::vtkPV3blockMesh::vtkPV3blockMesh
     reader_(reader),
     dbPtr_(NULL),
     meshPtr_(NULL),
+    meshRegion_(polyMesh::defaultRegion),
+    meshDir_(polyMesh::meshSubDir),
     arrayRangeBlocks_("block"),
     arrayRangeEdges_("edges"),
     arrayRangeCorners_("corners")
@@ -188,6 +190,28 @@ Foam::vtkPV3blockMesh::vtkPV3blockMesh
     // could be stringent and insist the prefix match the directory name...
     // Note: cannot use fileName::name() due to the embedded '{}'
     string caseName(fileName(FileName).lessExt());
+    string::size_type beg = caseName.find_last_of("/{");
+    string::size_type end = caseName.find('}', beg);
+
+    if
+    (
+        beg != string::npos && caseName[beg] == '{'
+     && end != string::npos && end == caseName.size()-1
+    )
+    {
+        meshRegion_ = caseName.substr(beg+1, end-beg-1);
+
+        // some safety
+        if (meshRegion_.empty())
+        {
+            meshRegion_ = polyMesh::defaultRegion;
+        }
+
+        if (meshRegion_ != polyMesh::defaultRegion)
+        {
+            meshDir_ = meshRegion_/polyMesh::meshSubDir;
+        }
+    }
 
     if (debug)
     {
@@ -313,7 +337,7 @@ void Foam::vtkPV3blockMesh::updateFoamMesh()
             (
                 "blockMeshDict",
                 dbPtr_().constant(),
-                polyMesh::meshSubDir,
+                meshDir_,
                 dbPtr_(),
                 IOobject::MUST_READ_IF_MODIFIED,
                 IOobject::NO_WRITE,
@@ -321,7 +345,7 @@ void Foam::vtkPV3blockMesh::updateFoamMesh()
             )
         );
 
-        meshPtr_ = new blockMesh(meshDict, polyMesh::defaultRegion);
+        meshPtr_ = new blockMesh(meshDict, meshRegion_);
     }
 
 
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H
index 33ed976bb81..cdbf4ad434a 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H
@@ -173,6 +173,12 @@ class vtkPV3blockMesh
         //- OpenFOAM mesh
         blockMesh* meshPtr_;
 
+        //- The mesh region
+        word meshRegion_;
+
+        //- The mesh directory for the region
+        fileName meshDir_;
+
         //- Selected geometrical parts
         boolList blockStatus_;
 
-- 
GitLab