Merge pull request #5244 from bska/defer-smrycfg-init

Defer SummaryConfig Initialisation
This commit is contained in:
Markus Blatt 2024-03-22 18:55:36 +01:00 committed by GitHub
commit 1484b4f96f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 73 additions and 27 deletions

View File

@ -44,6 +44,7 @@
#include <opm/simulators/utils/DamarisVar.hpp> #include <opm/simulators/utils/DamarisVar.hpp>
#include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp> #include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp>
#include <opm/simulators/utils/GridDataOutput.hpp> #include <opm/simulators/utils/GridDataOutput.hpp>
#include <opm/simulators/utils/ParallelSerialization.hpp>
#include <fmt/format.h> #include <fmt/format.h>
@ -149,25 +150,52 @@ public:
simulator.vanguard().eclState(), simulator.vanguard().eclState(),
simulator.vanguard().summaryConfig(), simulator.vanguard().summaryConfig(),
simulator.vanguard().grid(), simulator.vanguard().grid(),
simulator.vanguard().grid().comm().rank() == 0 ? &simulator.vanguard().equilGrid() : nullptr, ((simulator.vanguard().grid().comm().rank() == 0)
? &simulator.vanguard().equilGrid()
: nullptr),
simulator.vanguard().gridView(), simulator.vanguard().gridView(),
simulator.vanguard().cartesianIndexMapper(), simulator.vanguard().cartesianIndexMapper(),
simulator.vanguard().grid().comm().rank() == 0 ? &simulator.vanguard().equilCartesianIndexMapper() : nullptr, ((simulator.vanguard().grid().comm().rank() == 0)
? &simulator.vanguard().equilCartesianIndexMapper()
: nullptr),
false, false) false, false)
, simulator_(simulator) , simulator_(simulator)
{ {
this->damarisUpdate_ = true ; this->damarisUpdate_ = true ;
rank_ = simulator_.vanguard().grid().comm().rank() ; this->rank_ = this->simulator_.vanguard().grid().comm().rank() ;
nranks_ = simulator_.vanguard().grid().comm().size(); this->nranks_ = this->simulator_.vanguard().grid().comm().size();
const auto& gridView = simulator_.gridView();
const auto& interior_elements = elements(gridView, Dune::Partitions::interior);
// Get the size of the unique vector elements (excludes the shared 'ghost' elements)
numElements_ = std::distance(interior_elements.begin(), interior_elements.end());
this->elements_rank_offsets_.resize(nranks_) ; this->elements_rank_offsets_.resize(this->nranks_);
this->damarisOutputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>>(simulator, this->collectOnIORank_);
// Get the size of the unique vector elements (excludes the shared 'ghost' elements)
//
// Might possibly use
//
// detail::countLocalInteriorCellsGridView(this->simulator_.gridView())
//
// from countGlobalCells.hpp instead of calling std::distance() directly.
{
const auto& gridView = this->simulator_.gridView();
const auto& interior_elements = elements(gridView, Dune::Partitions::interior);
this->numElements_ = std::distance(interior_elements.begin(), interior_elements.end());
}
if (this->nranks_ > 1) {
auto smryCfg = (this->rank_ == 0)
? this->eclIO_->finalSummaryConfig()
: SummaryConfig{};
eclBroadcast(this->simulator_.vanguard().grid().comm(), smryCfg);
this->damarisOutputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>>
(simulator, smryCfg, this->collectOnIORank_);
}
else {
this->damarisOutputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>>
(simulator, this->eclIO_->finalSummaryConfig(), this->collectOnIORank_);
}
} }
/*! /*!

View File

@ -154,7 +154,6 @@ protected:
const GridView& gridView_; const GridView& gridView_;
const Schedule& schedule_; const Schedule& schedule_;
const EclipseState& eclState_; const EclipseState& eclState_;
const SummaryConfig& summaryConfig_;
std::unique_ptr<EclipseIO> eclIO_; std::unique_ptr<EclipseIO> eclIO_;
std::unique_ptr<TaskletRunner> taskletRunner_; std::unique_ptr<TaskletRunner> taskletRunner_;
Scalar restartTimeStepSize_; Scalar restartTimeStepSize_;

View File

@ -30,12 +30,14 @@
#include <opm/input/eclipse/EclipseState/EclipseState.hpp> #include <opm/input/eclipse/EclipseState/EclipseState.hpp>
#include <opm/input/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp> #include <opm/input/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
#include <opm/input/eclipse/Schedule/Action/State.hpp> #include <opm/input/eclipse/Schedule/Action/State.hpp>
#include <opm/input/eclipse/Schedule/Schedule.hpp> #include <opm/input/eclipse/Schedule/Schedule.hpp>
#include <opm/input/eclipse/Schedule/SummaryState.hpp> #include <opm/input/eclipse/Schedule/SummaryState.hpp>
#include <opm/input/eclipse/Schedule/UDQ/UDQConfig.hpp> #include <opm/input/eclipse/Schedule/UDQ/UDQConfig.hpp>
#include <opm/input/eclipse/Schedule/UDQ/UDQState.hpp> #include <opm/input/eclipse/Schedule/UDQ/UDQState.hpp>
#include <opm/input/eclipse/Schedule/Well/WellMatcher.hpp> #include <opm/input/eclipse/Schedule/Well/WellMatcher.hpp>
#include <opm/input/eclipse/Units/UnitSystem.hpp> #include <opm/input/eclipse/Units/UnitSystem.hpp>
#include <opm/output/eclipse/EclipseIO.hpp> #include <opm/output/eclipse/EclipseIO.hpp>
@ -207,7 +209,6 @@ EclGenericWriter(const Schedule& schedule,
, gridView_ (gridView) , gridView_ (gridView)
, schedule_ (schedule) , schedule_ (schedule)
, eclState_ (eclState) , eclState_ (eclState)
, summaryConfig_ (summaryConfig)
, cartMapper_ (cartMapper) , cartMapper_ (cartMapper)
, equilCartMapper_(equilCartMapper) , equilCartMapper_(equilCartMapper)
, equilGrid_ (equilGrid) , equilGrid_ (equilGrid)
@ -216,7 +217,7 @@ EclGenericWriter(const Schedule& schedule,
this->eclIO_ = std::make_unique<EclipseIO> this->eclIO_ = std::make_unique<EclipseIO>
(this->eclState_, (this->eclState_,
UgGridHelpers::createEclipseGrid(*equilGrid, eclState_.getInputGrid()), UgGridHelpers::createEclipseGrid(*equilGrid, eclState_.getInputGrid()),
this->schedule_, this->summaryConfig_, "", enableEsmry); this->schedule_, summaryConfig, "", enableEsmry);
} }
// create output thread if enabled and rank is I/O rank // create output thread if enabled and rank is I/O rank

View File

@ -44,6 +44,7 @@
#include <opm/simulators/timestepping/SimulatorTimer.hpp> #include <opm/simulators/timestepping/SimulatorTimer.hpp>
#include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp> #include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp>
#include <opm/simulators/utils/ParallelRestart.hpp> #include <opm/simulators/utils/ParallelRestart.hpp>
#include <opm/simulators/utils/ParallelSerialization.hpp>
#include <limits> #include <limits>
#include <stdexcept> #include <stdexcept>
@ -151,10 +152,25 @@ public:
EWOMS_GET_PARAM(TypeTag, bool, EnableEsmry)) EWOMS_GET_PARAM(TypeTag, bool, EnableEsmry))
, simulator_(simulator) , simulator_(simulator)
{ {
this->outputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>> #if HAVE_MPI
(simulator, this->collectOnIORank_); if (this->simulator_.vanguard().grid().comm().size() > 1) {
auto smryCfg = (this->simulator_.vanguard().grid().comm().rank() == 0)
rank_ = simulator_.vanguard().grid().comm().rank() ; ? this->eclIO_->finalSummaryConfig()
: SummaryConfig{};
eclBroadcast(this->simulator_.vanguard().grid().comm(), smryCfg);
this->outputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>>
(simulator, smryCfg, this->collectOnIORank_);
}
else
#endif
{
this->outputModule_ = std::make_unique<OutputBlackOilModule<TypeTag>>
(simulator, this->eclIO_->finalSummaryConfig(), this->collectOnIORank_);
}
this->rank_ = this->simulator_.vanguard().grid().comm().rank();
} }
~EclWriter() ~EclWriter()

View File

@ -184,8 +184,8 @@ GenericOutputBlackoilModule(const EclipseState& eclState,
bool enableMICP) bool enableMICP)
: eclState_(eclState) : eclState_(eclState)
, schedule_(schedule) , schedule_(schedule)
, summaryConfig_(summaryConfig)
, summaryState_(summaryState) , summaryState_(summaryState)
, summaryConfig_(summaryConfig)
, interRegionFlows_(numCells(eclState), , interRegionFlows_(numCells(eclState),
defineInterRegionFlowArrays(eclState, summaryConfig), defineInterRegionFlowArrays(eclState, summaryConfig),
declaredMaxRegionID(eclState.runspec())) declaredMaxRegionID(eclState.runspec()))

View File

@ -24,6 +24,7 @@
#define OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP #define OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP
#include <opm/input/eclipse/EclipseState/Grid/FaceDir.hpp> #include <opm/input/eclipse/EclipseState/Grid/FaceDir.hpp>
#include <opm/input/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
#include <opm/output/data/Wells.hpp> #include <opm/output/data/Wells.hpp>
#include <opm/output/eclipse/Inplace.hpp> #include <opm/output/eclipse/Inplace.hpp>
@ -376,9 +377,10 @@ protected:
const EclipseState& eclState_; const EclipseState& eclState_;
const Schedule& schedule_; const Schedule& schedule_;
const SummaryConfig& summaryConfig_;
const SummaryState& summaryState_; const SummaryState& summaryState_;
SummaryConfig summaryConfig_;
InterRegFlowMap interRegionFlows_; InterRegFlowMap interRegionFlows_;
LogOutputHelper<Scalar> logOutput_; LogOutputHelper<Scalar> logOutput_;

View File

@ -143,10 +143,11 @@ class OutputBlackOilModule : public GenericOutputBlackoilModule<GetPropType<Type
public: public:
template <class CollectDataToIORankType> template <class CollectDataToIORankType>
OutputBlackOilModule(const Simulator& simulator, OutputBlackOilModule(const Simulator& simulator,
const SummaryConfig& smryCfg,
const CollectDataToIORankType& collectToIORank) const CollectDataToIORankType& collectToIORank)
: BaseType(simulator.vanguard().eclState(), : BaseType(simulator.vanguard().eclState(),
simulator.vanguard().schedule(), simulator.vanguard().schedule(),
simulator.vanguard().summaryConfig(), smryCfg,
simulator.vanguard().summaryState(), simulator.vanguard().summaryState(),
moduleVersionName(), moduleVersionName(),
getPropValue<TypeTag, Properties::EnableEnergy>(), getPropValue<TypeTag, Properties::EnableEnergy>(),
@ -185,9 +186,7 @@ public:
OPM_THROW_NOLOG(std::runtime_error, msg); OPM_THROW_NOLOG(std::runtime_error, msg);
} }
if (const auto& smryCfg = simulator.vanguard().summaryConfig(); if (smryCfg.match("[FB]PP[OGW]") || smryCfg.match("RPP[OGW]*")) {
smryCfg.match("[FB]PP[OGW]") || smryCfg.match("RPP[OGW]*"))
{
auto rset = this->eclState_.fieldProps().fip_regions(); auto rset = this->eclState_.fieldProps().fip_regions();
rset.push_back("PVTNUM"); rset.push_back("PVTNUM");

View File

@ -82,11 +82,12 @@ void eclStateBroadcast(Parallel::Communication comm, EclipseState& eclState, Sch
template <class T> template <class T>
void eclBroadcast(Parallel::Communication comm, T& data) void eclBroadcast(Parallel::Communication comm, T& data)
{ {
Opm::Parallel::MpiSerializer ser(comm); ::Opm::Parallel::MpiSerializer ser(comm);
ser.broadcast(data); ser.broadcast(data);
} }
template void eclBroadcast<TransMult>(Parallel::Communication, TransMult&); template void eclBroadcast(Parallel::Communication, TransMult&);
template void eclBroadcast<Schedule>(Parallel::Communication, Schedule&); template void eclBroadcast(Parallel::Communication, Schedule&);
template void eclBroadcast(Parallel::Communication, SummaryConfig&);
} }