From e822ea57cc9719723e7b3543b9972023e143fc0c Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Tue, 27 Mar 2018 17:23:23 +0200
Subject: [PATCH] added additional assert to check if TimingTrees are "equal"
 before reduction

---
 src/core/timing/TimingNode.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/core/timing/TimingNode.h b/src/core/timing/TimingNode.h
index 8ec0b3338..2f0597f7a 100644
--- a/src/core/timing/TimingNode.h
+++ b/src/core/timing/TimingNode.h
@@ -26,6 +26,7 @@
 
 #include "core/debug/Debug.h"
 #include "core/logging/Logging.h"
+#include "core/mpi/Gatherv.h"
 #include "core/mpi/MPIManager.h"
 #include "core/mpi/Reduce.h"
 #include "core/mpi/SetReduction.h"
@@ -253,6 +254,20 @@ void reduceInplace( TimingNode<TP>& tn, ReduceType rt = REDUCE_TOTAL, int target
          break;
    }
 
+   WALBERLA_ASSERT_EQUAL(vals.size(), valsSq.size());
+   WALBERLA_ASSERT_EQUAL(vals.size(), min.size());
+   WALBERLA_ASSERT_EQUAL(vals.size(), max.size());
+   WALBERLA_ASSERT_EQUAL(vals.size(), count.size());
+
+   WALBERLA_DEBUG_SECTION()
+   {
+      //checking if all timing trees contain the same number of elements
+      std::vector<uint32_t> lens;
+      lens.push_back(uint32_c(vals.size()));
+      lens = mpi::allGatherv(lens);
+      std::for_each(lens.begin(), lens.end(), [&](const uint32_t& v){WALBERLA_UNUSED(v); WALBERLA_ASSERT_EQUAL( v, vals.size(), "Different number of TimingTree nodes detected! All TimingTrees need to have the same timers for reduction!");});
+   }
+
    // Target vectors where reduced values are stored
    std::vector<double> minRed;
    std::vector<double> maxRed;
-- 
GitLab