From a020b2c6cd7a1fd6abe58f774ac215db6c1801b0 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Fri, 27 Nov 2015 16:25:54 +0000
Subject: [PATCH] BUG: hexRef8Data: scatter master value For distributed data +
 running redistributePar some of the processors might not have level0Edge. In
 this case the sync() routine should fix this but it does require at least the
 master to have valid data.

---
 .../polyTopoChange/hexRef8/hexRef8Data.C             | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C
index ac5357cafaf..08fc68edf0c 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8Data.C
@@ -61,7 +61,15 @@ Foam::hexRef8Data::hexRef8Data(const IOobject& io)
     {
         IOobject rio(io);
         rio.rename("level0Edge");
-        bool haveFile = returnReduce(rio.headerOk(), orOp<bool>());
+
+        // MEJ: temporarily (until global reading of UniformedFields)
+        //      do not read level0Edge on processors that do not have it.
+        bool haveFile = rio.headerOk();
+        if (rio.readOpt() != IOobject::READ_IF_PRESENT)
+        {
+            reduce(haveFile, orOp<bool>());
+        }
+
         if (haveFile)
         {
             Info<< "Reading hexRef8 data : " << rio.name() << endl;
@@ -264,7 +272,7 @@ void Foam::hexRef8Data::sync(const IOobject& io)
     if (hasLevel0Edge)
     {
         // Get master length
-        scalar masterLen = level0EdgePtr_().value();
+        scalar masterLen = (Pstream::master() ? level0EdgePtr_().value() : 0);
         Pstream::scatter(masterLen);
         if (!level0EdgePtr_.valid())
         {
-- 
GitLab