From 8594fb43c87988670343ac44826f351c2f9aa8c2 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Mon, 13 Jul 2020 09:44:29 +0100
Subject: [PATCH] ENH: snappyHexMesh: Cleanup of parallel cyclics. See #1731.

---
 .../meshRefinement/weightedPosition.C         | 52 +++++++++++++++++++
 .../meshRefinement/weightedPosition.H         | 17 ++++++
 .../snappyHexMeshDriver/snappySnapDriver.C    | 44 +++-------------
 3 files changed, 77 insertions(+), 36 deletions(-)

diff --git a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
index d8652b66856..5db17e07f96 100644
--- a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
+++ b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
@@ -28,6 +28,8 @@ License
 #include "weightedPosition.H"
 #include "vectorTensorTransform.H"
 #include "coupledPolyPatch.H"
+#include "polyMesh.H"
+#include "syncTools.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -150,4 +152,54 @@ void Foam::weightedPosition::operator()
 }
 
 
+void Foam::weightedPosition::syncPoints
+(
+    const polyMesh& mesh,
+    List<weightedPosition>& fld
+)
+{
+    if (fld.size() != mesh.nPoints())
+    {
+        FatalErrorInFunction << "Size of field " << fld.size()
+            << " does not correspond to the number of points in the mesh "
+            << mesh.nPoints() << exit(FatalError);
+    }
+
+    syncTools::syncPointList
+    (
+        mesh,
+        fld,
+        weightedPosition::plusEqOp,     // combine op
+        pTraits<weightedPosition>::zero,// null value (not used)
+        pTraits<weightedPosition>::zero // transform class
+    );
+}
+
+
+void Foam::weightedPosition::syncPoints
+(
+    const polyMesh& mesh,
+    const labelUList& meshPoints,
+    List<weightedPosition>& fld
+)
+{
+    if (fld.size() != meshPoints.size())
+    {
+        FatalErrorInFunction << "Size of field " << fld.size()
+            << " does not correspond to the number of points supplied "
+            << meshPoints.size() << exit(FatalError);
+    }
+
+    syncTools::syncPointList
+    (
+        mesh,
+        meshPoints,
+        fld,
+        weightedPosition::plusEqOp,     // combine op
+        pTraits<weightedPosition>::zero,// null value (not used)
+        pTraits<weightedPosition>::zero // transform class
+    );
+}
+
+
 // ************************************************************************* //
diff --git a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
index 8b05ca7ef75..0594b1f9a3d 100644
--- a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
+++ b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
@@ -79,6 +79,7 @@ namespace Foam
 class weightedPosition;
 class vectorTensorTransform;
 class coupledPolyPatch;
+class polyMesh;
 
 //- pTraits
 template<>
@@ -160,6 +161,22 @@ public:
                 const coupledPolyPatch& cpp,
                 Container<weightedPosition>& map
             ) const;
+
+
+        //- Synchronisation for mesh point positions
+        static void syncPoints
+        (
+            const polyMesh& mesh,
+            List<weightedPosition>&
+        );
+
+        //- Synchronisation for patch point positions
+        static void syncPoints
+        (
+            const polyMesh& mesh,
+            const labelUList& meshPoints,
+            List<weightedPosition>&
+        );
 };
 
 
diff --git a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
index e8cbe2c1e74..05d9025fd49 100644
--- a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
+++ b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
@@ -255,15 +255,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothInternalDisplacement
         }
     }
 
-    // Sum
-    syncTools::syncPointList
-    (
-        mesh,
-        sumLocation,
-        weightedPosition::plusEqOp,     // combine op
-        pTraits<weightedPosition>::zero,// null value (not used)
-        pTraits<weightedPosition>::zero // transform class
-    );
+    // Add coupled contributions
+    weightedPosition::syncPoints(mesh, sumLocation);
 
     tmp<pointField> tdisplacement(new pointField(mesh.nPoints(), Zero));
     pointField& displacement = tdisplacement.ref();
@@ -384,15 +377,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothPatchDisplacement
             }
         }
 
-        syncTools::syncPointList
-        (
-            mesh,
-            pp.meshPoints(),
-            avgBoundary,
-            weightedPosition::plusEqOp,     // combine op
-            pTraits<weightedPosition>::zero,// null value (not used)
-            pTraits<weightedPosition>::zero // transform class
-        );
+        // Add coupled contributions
+        weightedPosition::syncPoints(mesh, pp.meshPoints(), avgBoundary);
 
         // Normalise
         forAll(avgBoundary, i)
@@ -464,15 +450,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothPatchDisplacement
             }
         }
 
-        syncTools::syncPointList
-        (
-            mesh,
-            globalSum,
-            weightedPosition::plusEqOp,     // combine op
-            pTraits<weightedPosition>::zero,// null value (not used)
-            pTraits<weightedPosition>::zero // transform class
-        );
-
+        // Add coupled contributions
+        weightedPosition::syncPoints(mesh, globalSum);
 
         avgInternal.setSize(meshPoints.size());
 
@@ -1010,15 +989,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::avgCellCentres
         }
     }
 
-    syncTools::syncPointList
-    (
-        mesh,
-        pp.meshPoints(),
-        avgBoundary,
-        weightedPosition::plusEqOp,     // combine op
-        pTraits<weightedPosition>::zero,// null value (not used)
-        pTraits<weightedPosition>::zero // transform class
-    );
+    // Add coupled contributions
+    weightedPosition::syncPoints(mesh, pp.meshPoints(), avgBoundary);
 
     tmp<pointField> tavgBoundary(new pointField(avgBoundary.size()));
     weightedPosition::getPoints(avgBoundary, tavgBoundary.ref());
-- 
GitLab