From 60f3fea67a2c41baa79e44ba647f679e38bbf88a Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 22 Jan 2020 11:22:06 +0100 Subject: [PATCH] avoid deck usage on non-root processes setting up MaterialLawManager --- ebos/eclmpiserializer.hh | 25 ++++++++++++++++++++++++ ebos/eclproblem.hh | 8 +++++++- opm/simulators/utils/ParallelRestart.cpp | 5 +++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ebos/eclmpiserializer.hh b/ebos/eclmpiserializer.hh index 0c3800bf3..f2cdbe075 100644 --- a/ebos/eclmpiserializer.hh +++ b/ebos/eclmpiserializer.hh @@ -71,6 +71,31 @@ public: #endif } + template + void broadcast(T& data) + { + if (m_comm.size() == 1) + return; + +#if HAVE_MPI + if (m_comm.rank() == 0) { + size_t size = data.packSize(*this); + std::vector buffer(size); + int position = 0; + data.pack(buffer, position, *this); + m_comm.broadcast(&position, 1, 0); + m_comm.broadcast(buffer.data(), position, 0); + } else { + int size; + m_comm.broadcast(&size, 1, 0); + std::vector buffer(size); + m_comm.broadcast(buffer.data(), size, 0); + int position = 0; + data.unpack(buffer, position, *this); + } +#endif + } + protected: Dune::CollectiveCommunication m_comm; }; diff --git a/ebos/eclproblem.hh b/ebos/eclproblem.hh index f0b80d442..a0ca7e3d2 100644 --- a/ebos/eclproblem.hh +++ b/ebos/eclproblem.hh @@ -2346,6 +2346,7 @@ private: const auto& vanguard = simulator.vanguard(); const auto& deck = vanguard.deck(); const auto& eclState = vanguard.eclState(); + const auto& comm = vanguard.gridView().comm(); // the PVT and saturation region numbers updatePvtnum_(); @@ -2370,7 +2371,12 @@ private: compressedToCartesianElemIdx[elemIdx] = vanguard.cartesianIndex(elemIdx); materialLawManager_ = std::make_shared(); - materialLawManager_->initFromDeck(deck, eclState); + if (comm.rank() == 0) + materialLawManager_->initFromDeck(deck, eclState); + + EclMpiSerializer ser(comm); + ser.broadcast(*materialLawManager_); + materialLawManager_->initParamsForElements(eclState, compressedToCartesianElemIdx); //////////////////////////////// } diff --git a/opm/simulators/utils/ParallelRestart.cpp b/opm/simulators/utils/ParallelRestart.cpp index 82858d633..bda56a688 100644 --- a/opm/simulators/utils/ParallelRestart.cpp +++ b/opm/simulators/utils/ParallelRestart.cpp @@ -24,6 +24,8 @@ #include "ParallelRestart.hpp" #include #include +#include +#include #include #include #include @@ -6778,6 +6780,7 @@ INSTANTIATE_PACK_VECTOR(double) INSTANTIATE_PACK_VECTOR(std::vector) INSTANTIATE_PACK_VECTOR(bool) INSTANTIATE_PACK_VECTOR(char) +INSTANTIATE_PACK_VECTOR(int) INSTANTIATE_PACK_VECTOR(Opm::Tabulated1DFunction) INSTANTIATE_PACK_VECTOR(std::array) INSTANTIATE_PACK_VECTOR(EclEpsScalingPointsInfo) @@ -6817,6 +6820,8 @@ INSTANTIATE_PACK(std::array) INSTANTIATE_PACK(std::array) INSTANTIATE_PACK(unsigned char) INSTANTIATE_PACK(EclEpsScalingPointsInfo) +INSTANTIATE_PACK(EclTwoPhaseApproach) +INSTANTIATE_PACK(EclMultiplexerApproach) #undef INSTANTIATE_PACK } // end namespace Mpi