From ddba87cf993dae955f8561fdc0388cbe960a5a2c Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Tue, 12 Jan 2021 18:29:27 +0100 Subject: [PATCH] Manage GConSale and GConSump with ScheduleState object --- .../EclipseState/Schedule/Schedule.hpp | 8 ------- .../EclipseState/Schedule/ScheduleState.hpp | 12 ++++++++++ .../EclipseState/Schedule/KeywordHandlers.cpp | 16 +++++++------- .../EclipseState/Schedule/Schedule.cpp | 21 ++++-------------- .../EclipseState/Schedule/ScheduleState.cpp | 22 +++++++++++++++++++ tests/parser/GroupTests.cpp | 6 +++-- 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp b/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp index 1afffd53d..3b49cfb90 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp @@ -32,8 +32,6 @@ #include #include #include -#include -#include #include #include #include @@ -236,8 +234,6 @@ namespace Opm Well::ProducerCMode getGlobalWhistctlMmode(std::size_t timestep) const; const UDQActive& udqActive(std::size_t timeStep) const; - const GConSale& gConSale(std::size_t timestep) const; - const GConSump& gConSump(std::size_t timestep) const; const WListManager& getWListManager(std::size_t timeStep) const; const UDQConfig& getUDQConfig(std::size_t timeStep) const; std::vector udqConfigList() const; @@ -321,8 +317,6 @@ namespace Opm udq_config.serializeOp(serializer); udq_active.serializeOp(serializer); guide_rate_config.serializeOp(serializer); - gconsale.serializeOp(serializer); - gconsump.serializeOp(serializer); m_actions.serializeOp(serializer); m_network.serializeOp(serializer); m_glo.serializeOp(serializer); @@ -355,8 +349,6 @@ namespace Opm DynamicState> udq_config; DynamicState> udq_active; DynamicState> guide_rate_config; - DynamicState> gconsale; - DynamicState> gconsump; DynamicState> m_actions; DynamicState> m_network; DynamicState> m_glo; diff --git a/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp b/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp index 29b0164ce..2092d71c8 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.hpp @@ -32,6 +32,8 @@ #include #include #include +#include +#include namespace Opm { @@ -96,6 +98,12 @@ namespace Opm { const WellTestConfig& wtest_config() const; void wtest_config(WellTestConfig wtest_config); + const GConSale& gconsale() const; + void gconsale(GConSale gconsale); + + const GConSump& gconsump() const; + void gconsump(GConSump gconsump); + template void serializeOp(Serializer& serializer) { serializer(m_start_time); @@ -110,6 +118,8 @@ namespace Opm { m_message_limits.serializeOp(serializer); serializer(m_whistctl_mode); serializer(m_wtest_config); + serializer(m_gconsale); + serializer(m_gconsump); } private: @@ -126,6 +136,8 @@ namespace Opm { MessageLimits m_message_limits; Well::ProducerCMode m_whistctl_mode = Well::ProducerCMode::CMODE_UNDEFINED; std::shared_ptr m_wtest_config; + std::shared_ptr m_gconsale; + std::shared_ptr m_gconsump; }; } diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/KeywordHandlers.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/KeywordHandlers.cpp index e5ed939be..a269f8161 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/KeywordHandlers.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/KeywordHandlers.cpp @@ -62,6 +62,8 @@ #include #include #include +#include +#include #include #include @@ -472,8 +474,7 @@ namespace { } void Schedule::handleGCONSALE(const HandlerContext& handlerContext, const ParseContext&, ErrorGuard&) { - const auto& current = *this->gconsale.get(handlerContext.currentStep); - std::shared_ptr new_gconsale(new GConSale(current)); + auto new_gconsale = this->snapshots.back().gconsale(); for (const auto& record : handlerContext.keyword) { const std::string& groupName = record.getItem("GROUP").getTrimmedString(0); auto sales_target = record.getItem("SALES_TARGET").get(0); @@ -482,7 +483,7 @@ namespace { std::string procedure = record.getItem("MAX_PROC").getTrimmedString(0); auto udqconfig = this->getUDQConfig(handlerContext.currentStep).params().undefinedValue(); - new_gconsale->add(groupName, sales_target, max_rate, min_rate, procedure, udqconfig, this->unit_system); + new_gconsale.add(groupName, sales_target, max_rate, min_rate, procedure, udqconfig, this->unit_system); auto group_ptr = std::make_shared(this->getGroup(groupName, handlerContext.currentStep)); Group::GroupInjectionProperties injection; @@ -491,12 +492,11 @@ namespace { this->updateGroup(std::move(group_ptr), handlerContext.currentStep); } } - this->gconsale.update(handlerContext.currentStep, new_gconsale); + this->snapshots.back().gconsale( std::move(new_gconsale) ); } void Schedule::handleGCONSUMP(const HandlerContext& handlerContext, const ParseContext&, ErrorGuard&) { - const auto& current = *this->gconsump.get(handlerContext.currentStep); - std::shared_ptr new_gconsump(new GConSump(current)); + auto new_gconsump = this->snapshots.back().gconsump(); for (const auto& record : handlerContext.keyword) { const std::string& groupName = record.getItem("GROUP").getTrimmedString(0); auto consumption_rate = record.getItem("GAS_CONSUMP_RATE").get(0); @@ -509,9 +509,9 @@ namespace { auto udqconfig = this->getUDQConfig(handlerContext.currentStep).params().undefinedValue(); - new_gconsump->add(groupName, consumption_rate, import_rate, network_node_name, udqconfig, this->unit_system); + new_gconsump.add(groupName, consumption_rate, import_rate, network_node_name, udqconfig, this->unit_system); } - this->gconsump.update(handlerContext.currentStep, new_gconsump); + this->snapshots.back().gconsump( std::move(new_gconsump) ); } void Schedule::handleGEFAC(const HandlerContext& handlerContext, const ParseContext& parseContext, ErrorGuard& errors) { diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp index 87464bb38..a8c3d0bf7 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp @@ -56,6 +56,8 @@ #include #include #include +#include +#include #include #include @@ -118,8 +120,6 @@ namespace { udq_config(this->m_timeMap, std::make_shared(deck)), udq_active(this->m_timeMap, std::make_shared()), guide_rate_config(this->m_timeMap, std::make_shared()), - gconsale(this->m_timeMap, std::make_shared() ), - gconsump(this->m_timeMap, std::make_shared() ), m_actions(this->m_timeMap, std::make_shared()), m_network(this->m_timeMap, std::make_shared()), m_glo(this->m_timeMap, std::make_shared()), @@ -270,8 +270,6 @@ namespace { result.m_glo = {{std::make_shared(GasLiftOpt::serializeObject())}, 1}; result.udq_active = {{std::make_shared(UDQActive::serializeObject())}, 1}; result.guide_rate_config = {{std::make_shared(GuideRateConfig::serializeObject())}, 1}; - result.gconsale = {{std::make_shared(GConSale::serializeObject())}, 1}; - result.gconsump = {{std::make_shared(GConSump::serializeObject())}, 1}; result.m_actions = {{std::make_shared(Action::Actions::serializeObject())}, 1}; result.rft_config = RFTConfig::serializeObject(); result.restart_config = RestartConfig::serializeObject(); @@ -455,7 +453,6 @@ void Schedule::iterateScheduleSection(std::optional load_offset, "WSKPTAB", "WSOLVENT", "WTEMP", - "WTEST", "WTRACER" }; @@ -1459,16 +1456,6 @@ void Schedule::iterateScheduleSection(std::optional load_offset, this->udq_active.update(timeStep, udq); } - const GConSale& Schedule::gConSale(std::size_t timeStep) const { - const auto& ptr = this->gconsale.get(timeStep); - return *ptr; - } - - const GConSump& Schedule::gConSump(std::size_t timeStep) const { - const auto& ptr = this->gconsump.get(timeStep); - return *ptr; - } - const WListManager& Schedule::getWListManager(std::size_t timeStep) const { const auto& ptr = this->wlist_manager.get(timeStep); return *ptr; @@ -1665,8 +1652,6 @@ void Schedule::iterateScheduleSection(std::optional load_offset, compareDynState(this->udq_config, data.udq_config) && compareDynState(this->udq_active, data.udq_active) && compareDynState(this->guide_rate_config, data.guide_rate_config) && - compareDynState(this->gconsale, data.gconsale) && - compareDynState(this->gconsump, data.gconsump) && compareDynState(this->m_actions, data.m_actions) && compareDynState(this->rpt_config, data.rpt_config) && rft_config == data.rft_config && @@ -2085,6 +2070,8 @@ void Schedule::create_first(const std::chrono::system_clock::time_point& start_t sched_state.oilvap( OilVaporizationProperties( this->m_runspec.tabdims().getNumPVTTables() )); sched_state.message_limits( this->m_deck_message_limits ); sched_state.wtest_config( WellTestConfig() ); + sched_state.gconsale( GConSale() ); + sched_state.gconsump( GConSump() ); this->addGroup("FIELD", 0); } diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp index d91071721..3f2345b82 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleState.cpp @@ -19,6 +19,8 @@ #include #include +#include +#include namespace Opm { @@ -149,6 +151,8 @@ bool ScheduleState::operator==(const ScheduleState& other) const { this->m_message_limits == other.m_message_limits && this->m_whistctl_mode == other.m_whistctl_mode && *this->m_wtest_config == *other.m_wtest_config && + *this->m_gconsale == *other.m_gconsale && + *this->m_gconsump == *other.m_gconsump && this->m_nupcol == other.m_nupcol; } @@ -162,6 +166,8 @@ ScheduleState ScheduleState::serializeObject() { ts.m_message_limits = MessageLimits::serializeObject(); ts.m_whistctl_mode = Well::ProducerCMode::THP; ts.m_wtest_config = std::make_shared( WellTestConfig::serializeObject() ); + ts.m_gconsump = std::make_shared( GConSump::serializeObject() ); + ts.m_gconsale = std::make_shared( GConSale::serializeObject() ); return ts; } @@ -209,4 +215,20 @@ void ScheduleState::wtest_config(WellTestConfig wtest_config) { this->m_wtest_config = std::make_shared( std::move(wtest_config) ); } +const GConSale& ScheduleState::gconsale() const { + return *this->m_gconsale; +} + +void ScheduleState::gconsale(GConSale gconsale) { + this->m_gconsale = std::make_shared( std::move(gconsale) ); +} + +const GConSump& ScheduleState::gconsump() const { + return *this->m_gconsump; +} + +void ScheduleState::gconsump(GConSump gconsump) { + this->m_gconsump = std::make_shared( std::move(gconsump) ); +} + } diff --git a/tests/parser/GroupTests.cpp b/tests/parser/GroupTests.cpp index a2b7ff20e..ea828bc47 100644 --- a/tests/parser/GroupTests.cpp +++ b/tests/parser/GroupTests.cpp @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #include @@ -363,7 +365,7 @@ BOOST_AUTO_TEST_CASE(TESTGCONSALE) { auto schedule = create_schedule(input); double metric_to_si = 1.0 / (24.0 * 3600.0); //cubic meters / day - const auto& gconsale = schedule.gConSale(0); + const auto& gconsale = schedule[0].gconsale(); BOOST_CHECK_EQUAL(gconsale.size(), 1U); BOOST_CHECK(gconsale.has("G1")); BOOST_CHECK(!gconsale.has("G2")); @@ -376,7 +378,7 @@ BOOST_AUTO_TEST_CASE(TESTGCONSALE) { BOOST_CHECK_EQUAL(group.min_sales_rate.getSI(), 45000 * metric_to_si); BOOST_CHECK(group.max_proc == GConSale::MaxProcedure::WELL); - const auto& gconsump = schedule.gConSump(0); + const auto& gconsump = schedule[0].gconsump(); BOOST_CHECK_EQUAL(gconsump.size(), 2U); BOOST_CHECK(gconsump.has("G1")); BOOST_CHECK(gconsump.has("G2"));