From f1cf4c9c3548eccdf707f56771e015dc078f4594 Mon Sep 17 00:00:00 2001
From: graham <g.macpherson@opencfd.co.uk>
Date: Fri, 17 Jun 2011 11:43:14 +0100
Subject: [PATCH] ENH:  Support for askign for backgroundMeshDecomposition proc
 bb.

UniformGrid parallelised.
---
 .../backgroundMeshDecomposition.H             |  3 ++
 .../backgroundMeshDecompositionI.H            |  6 +++
 .../conformalVoronoiMesh.H                    |  3 ++
 .../conformalVoronoiMeshI.H                   |  7 ++++
 .../initialPointsMethod/initialPointsMethod.H |  1 +
 .../uniformGrid/uniformGrid.C                 | 37 +++++++++++++++++--
 6 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
index 51aef7ae3d1..c3f9361f4e5 100644
--- a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
+++ b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
@@ -268,6 +268,9 @@ public:
 
             //- Return access to the underlying mesh
             inline const fvMesh& mesh() const;
+
+            //- Return the boundBox of this processor
+            inline const treeBoundBox& procBounds() const;
 };
 
 
diff --git a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
index a857ede2852..e1da2fe389d 100644
--- a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
+++ b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
@@ -30,4 +30,10 @@ const Foam::fvMesh& Foam::backgroundMeshDecomposition::mesh() const
     return mesh_;
 }
 
+
+const Foam::treeBoundBox& Foam::backgroundMeshDecomposition::procBounds() const
+{
+    return allBackgroundMeshBounds_[Pstream::myProcNo()];
+}
+
 // ************************************************************************* //
diff --git a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
index 8a83f44a416..eda9ebab173 100644
--- a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
+++ b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
@@ -945,6 +945,9 @@ public:
             //- Return the conformationSurfaces object
             inline const conformationSurfaces& geometryToConformTo() const;
 
+            //- Return the backgroundMeshDecomposition
+            inline const backgroundMeshDecomposition& decomposition() const;
+
             //- Return the cellSizeControlSurfaces object
             inline const cellSizeControlSurfaces& cellSizeControl() const;
 
diff --git a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
index 140c1d7070d..73603ff184a 100644
--- a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
+++ b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
@@ -469,6 +469,13 @@ Foam::conformalVoronoiMesh::geometryToConformTo() const
 }
 
 
+inline const Foam::backgroundMeshDecomposition&
+Foam::conformalVoronoiMesh::decomposition() const
+{
+    return decomposition_();
+}
+
+
 inline const Foam::cellSizeControlSurfaces&
 Foam::conformalVoronoiMesh::cellSizeControl() const
 {
diff --git a/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H b/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
index 2eae6636996..36c129fba15 100644
--- a/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
+++ b/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
@@ -37,6 +37,7 @@ SourceFiles
 
 #include "point.H"
 #include "conformalVoronoiMesh.H"
+#include "backgroundMeshDecomposition.H"
 #include "dictionary.H"
 #include "Random.H"
 #include "Switch.H"
diff --git a/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C b/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
index d5892bd554e..92c369743ae 100644
--- a/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
+++ b/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
@@ -58,7 +58,18 @@ uniformGrid::uniformGrid
 
 std::list<Vb::Point> uniformGrid::initialPoints() const
 {
-    const boundBox& bb = cvMesh_.geometryToConformTo().globalBounds();
+    boundBox bb;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        bb = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        bb = cvMesh_.geometryToConformTo().globalBounds();
+    }
 
     scalar x0 = bb.min().x();
     scalar xR = bb.max().x() - x0;
@@ -82,8 +93,6 @@ std::list<Vb::Point> uniformGrid::initialPoints() const
 
     std::list<Vb::Point> initialPoints;
 
-    List<bool> isSurfacePoint(nk, false);
-
     for (label i = 0; i < ni; i++)
     {
         for (label j = 0; j < nj; j++)
@@ -112,14 +121,34 @@ std::list<Vb::Point> uniformGrid::initialPoints() const
                     p.z() += pert*(rndGen.scalar01() - 0.5);
                 }
 
+                if
+                (
+                    Pstream::parRun()
+                 && !cvMesh_.decomposition().positionOnThisProcessor(p)
+                )
+                {
+                    // Skip this point if, in parallel, this position is not on
+                    // this processor.
+                    continue;
+                }
+
                 points[pI++] = p;
             }
 
+            points.setSize(pI);
+
             Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
             (
                 points,
                 minimumSurfaceDistanceCoeffSqr_
-               *sqr(cvMesh_.cellSizeControl().cellSize(points, isSurfacePoint))
+               *sqr
+                (
+                    cvMesh_.cellSizeControl().cellSize
+                    (
+                        points,
+                        List<bool>(pI, false)
+                    )
+                )
             );
 
             forAll(insidePoints, i)
-- 
GitLab