diff --git a/opm/simulators/flow/EclWriter.hpp b/opm/simulators/flow/EclWriter.hpp index ecd03c16f..6ebb21097 100644 --- a/opm/simulators/flow/EclWriter.hpp +++ b/opm/simulators/flow/EclWriter.hpp @@ -170,6 +170,8 @@ public: } this->rank_ = this->simulator_.vanguard().grid().comm().rank(); + + this->simulator_.vanguard().eclState().computeFipRegionStatistics(); } ~EclWriter() diff --git a/opm/simulators/utils/ParallelEclipseState.cpp b/opm/simulators/utils/ParallelEclipseState.cpp index b916cf3a6..042eb9263 100644 --- a/opm/simulators/utils/ParallelEclipseState.cpp +++ b/opm/simulators/utils/ParallelEclipseState.cpp @@ -20,13 +20,18 @@ #include #include +#include #include +#include #include #include +#include #include +#include #include +#include namespace { bool is_FIP(const std::string& keyword) @@ -280,6 +285,20 @@ const FieldPropsManager& ParallelEclipseState::globalFieldProps() const } +void ParallelEclipseState::computeFipRegionStatistics() +{ + if (! this->fipRegionStatistics_.has_value()) { + this->fipRegionStatistics_ + .emplace(declaredMaxRegionID(this->runspec()), + this->fieldProps(), + [this](std::vector& maxRegionID) + { + this->m_comm.max(maxRegionID.data(), maxRegionID.size()); + }); + } +} + + const EclipseGrid& ParallelEclipseState::getInputGrid() const { if (m_comm.rank() != 0) diff --git a/opm/simulators/utils/ParallelEclipseState.hpp b/opm/simulators/utils/ParallelEclipseState.hpp index 8f6b84cbf..ab82251d6 100644 --- a/opm/simulators/utils/ParallelEclipseState.hpp +++ b/opm/simulators/utils/ParallelEclipseState.hpp @@ -179,6 +179,12 @@ public: //! \details Can only be called on root process. const FieldPropsManager& globalFieldProps() const override; + //! \brief Compute basic descriptive statistics about all FIP region sets + //! + //! MPI-aware version which knows how to compute statistics across all + //! ranks. + void computeFipRegionStatistics() override; + //! \brief Returns a const ref to the eclipse grid. //! \details Can only be called on root process. const EclipseGrid& getInputGrid() const override;