From 5c78925981bf34d2a5bdb2d2066344ff66057c6f Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 14 Sep 2022 19:38:24 +0200 Subject: [PATCH] fixed: wrong root rank in variadic broadcast change the test to broadcast from rank 1 instead of 0 so this bug does not resurface --- ebos/eclmpiserializer.hh | 10 +++++----- tests/test_broadcast.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ebos/eclmpiserializer.hh b/ebos/eclmpiserializer.hh index b627970a3..ca838fc1d 100644 --- a/ebos/eclmpiserializer.hh +++ b/ebos/eclmpiserializer.hh @@ -436,20 +436,20 @@ public: m_op = Operation::PACK; variadic_call(args...); m_packSize = m_position; - m_comm.broadcast(&m_packSize, 1, 0); - m_comm.broadcast(m_buffer.data(), m_position, 0); + m_comm.broadcast(&m_packSize, 1, root); + m_comm.broadcast(m_buffer.data(), m_position, root); } catch (...) { m_packSize = std::numeric_limits::max(); - m_comm.broadcast(&m_packSize, 1, 0); + m_comm.broadcast(&m_packSize, 1, root); throw; } } else { - m_comm.broadcast(&m_packSize, 1, 0); + m_comm.broadcast(&m_packSize, 1, root); if (m_packSize == std::numeric_limits::max()) { throw std::runtime_error("Error detected in parallel serialization"); } m_buffer.resize(m_packSize); - m_comm.broadcast(m_buffer.data(), m_packSize, 0); + m_comm.broadcast(m_buffer.data(), m_packSize, root); m_position = 0; m_op = Operation::UNPACK; variadic_call(std::forward(args)...); diff --git a/tests/test_broadcast.cpp b/tests/test_broadcast.cpp index 9d4c56f4a..7098ab1d5 100644 --- a/tests/test_broadcast.cpp +++ b/tests/test_broadcast.cpp @@ -61,18 +61,18 @@ BOOST_AUTO_TEST_CASE(BroadCast) auto cc = Dune::MPIHelper::getCollectiveCommunication(); std::vector d(3); - if (cc.rank() == 0) + if (cc.rank() == 1) std::iota(d.begin(), d.end(), 1.0); std::vector i(3); - if (cc.rank() == 0) + if (cc.rank() == 1) std::iota(i.begin(), i.end(), 4); - double d1 = cc.rank() == 0 ? 7.0 : 0.0; - size_t i1 = cc.rank() == 0 ? 8 : 0; + double d1 = cc.rank() == 1 ? 7.0 : 0.0; + size_t i1 = cc.rank() == 1 ? 8 : 0; Opm::EclMpiSerializer ser(cc); - ser.broadcast(0, d, i, d1, i1); + ser.broadcast(1, d, i, d1, i1); for (size_t c = 0; c < 3; ++c) { BOOST_CHECK_EQUAL(d[c], 1.0+c);