From 3b637a0d54db3ee13cabc4d0c985ed965794ff01 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Thu, 17 Jan 2013 14:55:13 +0000
Subject: [PATCH] BUG: PointEdgeWave: incorrect indexing in
 handleCollocatedPoints

---
 .../algorithms/PointEdgeWave/PointEdgeWave.C  | 43 +++++++++++--------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/src/meshTools/algorithms/PointEdgeWave/PointEdgeWave.C b/src/meshTools/algorithms/PointEdgeWave/PointEdgeWave.C
index ad57079dbcc..e6dd1846acf 100644
--- a/src/meshTools/algorithms/PointEdgeWave/PointEdgeWave.C
+++ b/src/meshTools/algorithms/PointEdgeWave/PointEdgeWave.C
@@ -566,7 +566,8 @@ Foam::label Foam::PointEdgeWave<Type, TrackingData>::handleCollocatedPoints()
         elems[pointI] = allPointInfo_[meshPoints[pointI]];
     }
 
-    // Pull slave data onto master. No need to update transformed slots.
+    // Pull slave data onto master (which might or might not have any
+    // initialised points). No need to update transformed slots.
     slavesMap.distribute(elems, false);
 
     // Combine master data with slave data
@@ -597,26 +598,34 @@ Foam::label Foam::PointEdgeWave<Type, TrackingData>::handleCollocatedPoints()
     // Extract back onto mesh
     forAll(meshPoints, pointI)
     {
-        Type& elem = allPointInfo_[meshPoints[pointI]];
-
-        // Like updatePoint but bypass Type::updatePoint with its tolerance
-        // checking
-        if (!elem.valid(td_) || !elem.equal(elems[pointI], td_))
+        if (elems[pointI].valid(td_))
         {
-            nEvals_++;
-            elem = elems[pointI];
+            label meshPointI = meshPoints[pointI];
 
-            // See if element now valid
-            if (elem.valid(td_))
-            {
-                --nUnvisitedPoints_;
-            }
+            Type& elem = allPointInfo_[meshPointI];
 
-            // Update database of changed points
-            if (!changedPoint_[pointI])
+            bool wasValid = elem.valid(td_);
+
+            // Like updatePoint but bypass Type::updatePoint with its tolerance
+            // checking
+            //if (!elem.valid(td_) || !elem.equal(elems[pointI], td_))
+            if (!elem.equal(elems[pointI], td_))
             {
-                changedPoint_[pointI] = true;
-                changedPoints_[nChangedPoints_++] = pointI;
+                nEvals_++;
+                elem = elems[pointI];
+
+                // See if element now valid
+                if (!wasValid && elem.valid(td_))
+                {
+                    --nUnvisitedPoints_;
+                }
+
+                // Update database of changed points
+                if (!changedPoint_[meshPointI])
+                {
+                    changedPoint_[meshPointI] = true;
+                    changedPoints_[nChangedPoints_++] = meshPointI;
+                }
             }
         }
     }
-- 
GitLab