From 4928782cf4eebf24341f7ee8d08c5afdbe4497bc Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Thu, 27 Jan 2022 15:31:39 +0100 Subject: [PATCH] Add Schedule member to the msim class --- examples/msim.cpp | 4 +- msim/include/opm/msim/msim.hpp | 17 +++-- msim/src/msim.cpp | 49 +++++++------- tests/msim/test_msim.cpp | 12 ++-- tests/msim/test_msim_ACTIONX.cpp | 108 +++++++++++++++---------------- tests/msim/test_msim_EXIT.cpp | 11 ++-- 6 files changed, 104 insertions(+), 97 deletions(-) diff --git a/examples/msim.cpp b/examples/msim.cpp index 65e7aa2d8..733c4a510 100644 --- a/examples/msim.cpp +++ b/examples/msim.cpp @@ -51,8 +51,8 @@ int main(int /* argc */, char** argv) { error_guard.terminate(); } - Opm::msim msim(state); + Opm::msim msim(state, schedule); Opm::EclipseIO io(state, state.getInputGrid(), schedule, summary_config); - msim.run(schedule, io, false); + msim.run(io, false); } diff --git a/msim/include/opm/msim/msim.hpp b/msim/include/opm/msim/msim.hpp index a04e25368..ed4074356 100644 --- a/msim/include/opm/msim/msim.hpp +++ b/msim/include/opm/msim/msim.hpp @@ -36,27 +36,32 @@ public: using well_rate_function = double(const EclipseState&, const Schedule&, const SummaryState& st, const data::Solution&, size_t report_step, double seconds_elapsed); using solution_function = void(const EclipseState&, const Schedule&, data::Solution&, size_t report_step, double seconds_elapsed); - msim(const EclipseState& state); + msim(const EclipseState& state, const Schedule& schedule_arg); Opm::UDAValue uda_val(); void well_rate(const std::string& well, data::Rates::opt rate, std::function func); void solution(const std::string& field, std::function func); - void run(Schedule& schedule, EclipseIO& io, bool report_only); - void post_step(Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, const time_point& sim_time); + void run(EclipseIO& io, bool report_only); + void post_step(SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, const time_point& sim_time); Action::State action_state; private: - void run_step(const Schedule& schedule, WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, EclipseIO& io) const; - void run_step(const Schedule& schedule, WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double dt, EclipseIO& io) const; + void run_step(WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, EclipseIO& io) const; + void run_step(WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double dt, EclipseIO& io) const; void output(WellTestState& wtest_state, SummaryState& st, const UDQState& udq_state, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, const data::GroupAndNetworkValues& group_data, EclipseIO& io) const; - void simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double seconds_elapsed, double time_step) const; + void simulate(const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double seconds_elapsed, double time_step) const; EclipseState state; std::map>> well_rates; std::map> solutions; + +public: + Schedule schedule; + Action::State action_state; + SummaryState st; }; } diff --git a/msim/src/msim.cpp b/msim/src/msim.cpp index 8737f1947..651daa177 100644 --- a/msim/src/msim.cpp +++ b/msim/src/msim.cpp @@ -41,15 +41,16 @@ namespace Opm { -msim::msim(const EclipseState& state_arg) : - state(state_arg) +msim::msim(const EclipseState& state_arg, const Schedule& schedule_arg) + : state(state_arg) + , schedule(schedule_arg) {} -void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) { +void msim::run(EclipseIO& io, bool report_only) { const double week = 7 * 86400; data::Solution sol; - SummaryState st(TimeService::from_time_t(schedule.getStartTime())); - UDQState udq_state(schedule.getUDQConfig(0).params().undefinedValue()); + SummaryState st(TimeService::from_time_t(this->schedule.getStartTime())); + UDQState udq_state(this->schedule.getUDQConfig(0).params().undefinedValue()); WellTestState wtest_state; Python python; @@ -58,13 +59,13 @@ void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) { data::Wells well_data; data::GroupAndNetworkValues group_nwrk_data; if (report_only) - run_step(schedule, wtest_state, st, udq_state, sol, well_data, group_nwrk_data, report_step, io); + run_step(wtest_state, st, udq_state, sol, well_data, group_nwrk_data, report_step, io); else { double time_step = std::min(week, 0.5*schedule.stepLength(report_step - 1)); - run_step(schedule, wtest_state, st, udq_state, sol, well_data, group_nwrk_data, report_step, time_step, io); + run_step(wtest_state, st, udq_state, sol, well_data, group_nwrk_data, report_step, time_step, io); } auto sim_time = TimeService::from_time_t( schedule.simTime(report_step) ); - post_step(schedule, st, sol, well_data, group_nwrk_data, report_step, sim_time); + post_step(st, sol, well_data, group_nwrk_data, report_step, sim_time); const auto& exit_status = schedule.exitStatus(); if (exit_status.has_value()) return; @@ -76,33 +77,33 @@ UDAValue msim::uda_val() { } -void msim::post_step(Schedule& schedule, SummaryState& st, data::Solution& /* sol */, data::Wells& /* well_data */, data::GroupAndNetworkValues& /* grp_nwrk_data */, size_t report_step, const time_point& sim_time) { - const auto& actions = schedule[report_step].actions.get(); +void msim::post_step(SummaryState& st, data::Solution& /* sol */, data::Wells& /* well_data */, data::GroupAndNetworkValues& /* grp_nwrk_data */, size_t report_step, const time_point& sim_time) { + const auto& actions = this->schedule[report_step].actions.get(); if (actions.empty()) return; - Action::Context context( st , schedule[report_step].wlist_manager.get()); + Action::Context context( st , this->schedule[report_step].wlist_manager.get()); for (const auto& action : actions.pending(this->action_state, std::chrono::system_clock::to_time_t(sim_time))) { auto result = action->eval(context); if (result) - schedule.applyAction(report_step, *action, result.wells(), {}); + this->schedule.applyAction(report_step, *action, result.wells(), {}); } for (const auto& pyaction : actions.pending_python()) - schedule.runPyAction(report_step, *pyaction, this->state, st); + this->schedule.runPyAction(report_step, *pyaction, this->state, st); } -void msim::run_step(const Schedule& schedule, WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& grp_nwrk_data, size_t report_step, EclipseIO& io) const { - this->run_step(schedule, wtest_state, st, udq_state, sol, well_data, grp_nwrk_data, report_step, schedule.stepLength(report_step - 1), io); +void msim::run_step(WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& grp_nwrk_data, size_t report_step, EclipseIO& io) const { + this->run_step(wtest_state, st, udq_state, sol, well_data, grp_nwrk_data, report_step, schedule.stepLength(report_step - 1), io); } -void msim::run_step(const Schedule& schedule, WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double dt, EclipseIO& io) const { - double start_time = schedule.seconds(report_step - 1); - double end_time = schedule.seconds(report_step); +void msim::run_step(WellTestState& wtest_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& group_nwrk_data, size_t report_step, double dt, EclipseIO& io) const { + double start_time = this->schedule.seconds(report_step - 1); + double end_time = this->schedule.seconds(report_step); double seconds_elapsed = start_time; while (seconds_elapsed < end_time) { @@ -110,7 +111,7 @@ void msim::run_step(const Schedule& schedule, WellTestState& wtest_state, Summar if ((seconds_elapsed + time_step) > end_time) time_step = end_time - seconds_elapsed; - this->simulate(schedule, st, sol, well_data, group_nwrk_data, report_step, seconds_elapsed, time_step); + this->simulate(st, sol, well_data, group_nwrk_data, report_step, seconds_elapsed, time_step); seconds_elapsed += time_step; @@ -124,7 +125,7 @@ void msim::run_step(const Schedule& schedule, WellTestState& wtest_state, Summar {}, {}); - schedule.getUDQConfig( report_step ).eval(report_step, schedule.wellMatcher(report_step), st, udq_state); + this->schedule.getUDQConfig( report_step ).eval(report_step, schedule.wellMatcher(report_step), st, udq_state); this->output(wtest_state, st, @@ -154,15 +155,15 @@ void msim::output(WellTestState& wtest_state, SummaryState& st, const UDQState& } -void msim::simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& /* group_nwrk_data */, size_t report_step, double seconds_elapsed, double time_step) const { +void msim::simulate(const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupAndNetworkValues& /* group_nwrk_data */, size_t report_step, double seconds_elapsed, double time_step) const { for (const auto& sol_pair : this->solutions) { auto func = sol_pair.second; - func(this->state, schedule, sol, report_step, seconds_elapsed + time_step); + func(this->state, this->schedule, sol, report_step, seconds_elapsed + time_step); } for (const auto& well_pair : this->well_rates) { const std::string& well_name = well_pair.first; - const auto& sched_well = schedule.getWell(well_name, report_step); + const auto& sched_well = this->schedule.getWell(well_name, report_step); bool well_open = (sched_well.getStatus() == Well::Status::OPEN); data::Well& well = well_data[well_name]; @@ -171,7 +172,7 @@ void msim::simulate(const Schedule& schedule, const SummaryState& st, data::Solu auto func = rate_pair.second; if (well_open) - well.rates.set(rate, func(this->state, schedule, st, sol, report_step, seconds_elapsed + time_step)); + well.rates.set(rate, func(this->state, this->schedule, st, sol, report_step, seconds_elapsed + time_step)); else well.rates.set(rate, 0.0); } diff --git a/tests/msim/test_msim.cpp b/tests/msim/test_msim.cpp index bd23657b2..8bce04351 100644 --- a/tests/msim/test_msim.cpp +++ b/tests/msim/test_msim.cpp @@ -95,7 +95,7 @@ BOOST_AUTO_TEST_CASE(RUN) { EclipseState state(deck); Schedule schedule(deck, state, python); SummaryConfig summary_config(deck, schedule, state.fieldProps(), state.aquifer()); - msim msim(state); + msim msim(state, schedule); msim.well_rate("PROD", data::Rates::opt::oil, prod_opr); msim.well_rate("RFTP", data::Rates::opt::oil, prod_rft); @@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE(RUN) { const WorkArea work_area("test_msim"); EclipseIO io(state, state.getInputGrid(), schedule, summary_config); - msim.run(schedule, io, false); + msim.run(io, false); for (const auto& fname : {"SPE1CASE1.INIT", "SPE1CASE1.UNRST", "SPE1CASE1.EGRID", "SPE1CASE1.SMSPEC", "SPE1CASE1.UNSMRY", "SPE1CASE1.RSM"}) BOOST_CHECK( is_file( fname )); @@ -177,7 +177,7 @@ BOOST_AUTO_TEST_CASE(RUN_SUMTHIN) { EclipseState state(deck); Schedule schedule(deck, state, python); SummaryConfig summary_config(deck, schedule, state.fieldProps(), state.aquifer()); - msim msim(state); + msim msim(state, schedule); msim.well_rate("PROD", data::Rates::opt::oil, prod_opr); msim.well_rate("RFTP", data::Rates::opt::oil, prod_rft); @@ -189,7 +189,7 @@ BOOST_AUTO_TEST_CASE(RUN_SUMTHIN) { EclipseIO io(state, state.getInputGrid(), schedule, summary_config); // TSTEP = N*7 - msim.run(schedule, io, false); + msim.run(io, false); // clang-format off const auto expect_smry_time = std::vector { @@ -245,7 +245,7 @@ BOOST_AUTO_TEST_CASE(RUN_RPTONLY) { Schedule schedule(deck, state, std::make_shared()); const SummaryConfig summary_config(deck, schedule, state.fieldProps(), state.aquifer()); - msim msim(state); + msim msim(state, schedule); msim.well_rate("PROD", data::Rates::opt::oil, prod_opr); msim.well_rate("RFTP", data::Rates::opt::oil, prod_rft); @@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE(RUN_RPTONLY) { EclipseIO io(state, state.getInputGrid(), schedule, summary_config); // TSTEP = N*7 - msim.run(schedule, io, false); + msim.run(io, false); // clang-format off const auto expect_smry_time = std::vector { diff --git a/tests/msim/test_msim_ACTIONX.cpp b/tests/msim/test_msim_ACTIONX.cpp index b6e575344..96cc10e1c 100644 --- a/tests/msim/test_msim_ACTIONX.cpp +++ b/tests/msim/test_msim_ACTIONX.cpp @@ -174,7 +174,7 @@ BOOST_AUTO_TEST_CASE(UDQ_SORTA_EXAMPLE) { #include "actionx2.include" test_data td( actionx ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -184,16 +184,16 @@ BOOST_AUTO_TEST_CASE(UDQ_SORTA_EXAMPLE) { sim.well_rate("P3", data::Rates::opt::oil, prod_opr); sim.well_rate("P4", data::Rates::opt::oil, prod_opr_low); - sim.run(td.schedule, io, false); + sim.run(io, false); { - const auto& w1 = td.schedule.getWell("P1", 1); - const auto& w4 = td.schedule.getWell("P4", 1); + const auto& w1 = sim.schedule.getWell("P1", 1); + const auto& w4 = sim.schedule.getWell("P4", 1); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w4.getStatus() == Well::Status::OPEN ); } { - const auto& w1 = td.schedule.getWellatEnd("P1"); - const auto& w4 = td.schedule.getWellatEnd("P4"); + const auto& w1 = sim.schedule.getWellatEnd("P1"); + const auto& w4 = sim.schedule.getWellatEnd("P4"); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w4.getStatus() == Well::Status::SHUT ); } @@ -205,7 +205,7 @@ BOOST_AUTO_TEST_CASE(WELL_CLOSE_EXAMPLE) { #include "actionx1.include" test_data td( actionx1 ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -221,10 +221,10 @@ BOOST_AUTO_TEST_CASE(WELL_CLOSE_EXAMPLE) { sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w2 = td.schedule.getWell("P2", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - const auto& w4 = td.schedule.getWell("P4", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); + const auto& w2 = sim.schedule.getWell("P2", 15); + const auto& w3 = sim.schedule.getWell("P3", 15); + const auto& w4 = sim.schedule.getWell("P4", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w2.getStatus() == Well::Status::OPEN ); @@ -233,19 +233,19 @@ BOOST_AUTO_TEST_CASE(WELL_CLOSE_EXAMPLE) { } - sim.run(td.schedule, io, false); + sim.run(io, false); { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w3 = td.schedule.getWell("P3", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); + const auto& w3 = sim.schedule.getWell("P3", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); } { - const auto& w2_6 = td.schedule.getWell("P2", 6); + const auto& w2_6 = sim.schedule.getWell("P2", 6); BOOST_CHECK(w2_6.getStatus() == Well::Status::SHUT ); } { - const auto& w4_11 = td.schedule.getWell("P4", 11); + const auto& w4_11 = sim.schedule.getWell("P4", 11); BOOST_CHECK(w4_11.getStatus() == Well::Status::SHUT ); } } @@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE(UDQ_ASSIGN) { #include "actionx1.include" test_data td( actionx1 ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -272,7 +272,7 @@ BOOST_AUTO_TEST_CASE(UDQ_ASSIGN) { sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - sim.run(td.schedule, io, false); + sim.run(io, false); const auto& base_name = td.state.getIOConfig().getBaseName(); @@ -303,7 +303,7 @@ BOOST_AUTO_TEST_CASE(UDQ_WUWCT) { #include "actionx1.include" test_data td( actionx1 ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -318,7 +318,7 @@ BOOST_AUTO_TEST_CASE(UDQ_WUWCT) { sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - sim.run(td.schedule, io, false); + sim.run(io, false); const auto& base_name = td.state.getIOConfig().getBaseName(); const EclIO::ESmry ecl_sum(base_name + ".SMSPEC"); @@ -363,7 +363,7 @@ BOOST_AUTO_TEST_CASE(UDQ_WUWCT) { BOOST_AUTO_TEST_CASE(UDQ_IN_ACTIONX) { #include "udq_in_actionx.include" test_data td( actionx1 ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -384,26 +384,26 @@ BOOST_AUTO_TEST_CASE(UDQ_IN_ACTIONX) { sim.well_rate("P4", data::Rates::opt::gas, prod_gpr); { - const auto& w1 = td.schedule.getWell("P1", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - const auto& udq1 = td.schedule.getUDQConfig(15); + const auto& udq1 = sim.schedule.getUDQConfig(15); BOOST_CHECK(!udq1.has_keyword("FUNEW")); - const auto& udq2 = td.schedule.getUDQConfig(25); + const auto& udq2 = sim.schedule.getUDQConfig(25); BOOST_CHECK(udq2.has_keyword("FUPROD")); } - sim.run(td.schedule, io, false); + sim.run(io, false); { - const auto& w1 = td.schedule.getWell("P1", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - const auto& udq1 = td.schedule.getUDQConfig(15); + const auto& udq1 = sim.schedule.getUDQConfig(15); BOOST_CHECK(udq1.has_keyword("FUNEW")); - const auto& udq2 = td.schedule.getUDQConfig(25); + const auto& udq2 = sim.schedule.getUDQConfig(25); BOOST_CHECK(udq2.has_keyword("FUPROD")); BOOST_CHECK(udq2.has_keyword("FUNEW")); } @@ -421,7 +421,7 @@ BOOST_AUTO_TEST_CASE(UDQ_IN_ACTIONX) { BOOST_AUTO_TEST_CASE(UDA) { #include "uda.include" test_data td( uda_deck ); - msim sim(td.state); + msim sim(td.state, td.schedule); auto eps_lim = sim.uda_val().epsilonLimit(); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); @@ -434,7 +434,7 @@ BOOST_AUTO_TEST_CASE(UDA) { { WorkArea work_area("uda_sim"); - sim.run(td.schedule, io, true); + sim.run(io, true); const auto& base_name = td.state.getIOConfig().getBaseName(); const EclIO::ESmry ecl_sum(base_name + ".SMSPEC"); @@ -460,7 +460,7 @@ BOOST_AUTO_TEST_CASE(UDA) { BOOST_AUTO_TEST_CASE(COMPDAT) { #include "compdat.include" test_data td( compdat_deck ); - msim sim(td.state); + msim sim(td.state, td.schedule); EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); @@ -471,7 +471,7 @@ BOOST_AUTO_TEST_CASE(COMPDAT) { { WorkArea work_area("compdat_sim"); - BOOST_CHECK_NO_THROW(sim.run(td.schedule, io, true)); + BOOST_CHECK_NO_THROW(sim.run(io, true)); } } @@ -480,10 +480,10 @@ BOOST_AUTO_TEST_CASE(COMPDAT) { BOOST_AUTO_TEST_CASE(PYTHON_WELL_CLOSE_EXAMPLE) { const auto& deck = Parser().parseFile("msim/MSIM_PYACTION.DATA"); test_data td( deck ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); + EclipseIO io(td.state, td.state.getInputGrid(), sim.schedule, td.summary_config); sim.well_rate("P1", data::Rates::opt::oil, prod_opr); sim.well_rate("P2", data::Rates::opt::oil, prod_opr); @@ -496,10 +496,10 @@ BOOST_AUTO_TEST_CASE(PYTHON_WELL_CLOSE_EXAMPLE) { sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w2 = td.schedule.getWell("P2", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - const auto& w4 = td.schedule.getWell("P4", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); + const auto& w2 = sim.schedule.getWell("P2", 15); + const auto& w3 = sim.schedule.getWell("P3", 15); + const auto& w4 = sim.schedule.getWell("P4", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w2.getStatus() == Well::Status::OPEN ); @@ -508,19 +508,19 @@ BOOST_AUTO_TEST_CASE(PYTHON_WELL_CLOSE_EXAMPLE) { } - sim.run(td.schedule, io, false); + sim.run(io, false); { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w3 = td.schedule.getWell("P3", 15); + const auto& w1 = sim.schedule.getWell("P1", 15); + const auto& w3 = sim.schedule.getWell("P3", 15); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); } { - const auto& w2_6 = td.schedule.getWell("P2", 6); + const auto& w2_6 = sim.schedule.getWell("P2", 6); BOOST_CHECK(w2_6.getStatus() == Well::Status::SHUT ); } { - const auto& w4_11 = td.schedule.getWell("P4", 11); + const auto& w4_11 = sim.schedule.getWell("P4", 11); BOOST_CHECK(w4_11.getStatus() == Well::Status::SHUT ); } } @@ -529,10 +529,10 @@ BOOST_AUTO_TEST_CASE(PYTHON_WELL_CLOSE_EXAMPLE) { BOOST_AUTO_TEST_CASE(PYTHON_ACTIONX) { const auto& deck = Parser().parseFile("msim/MSIM_PYACTION_ACTIONX.DATA"); test_data td( deck ); - msim sim(td.state); + msim sim(td.state, td.schedule); { WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); + EclipseIO io(td.state, td.state.getInputGrid(), sim.schedule, td.summary_config); sim.well_rate("P1", data::Rates::opt::oil, prod_opr); sim.well_rate("P2", data::Rates::opt::oil, prod_opr); @@ -545,10 +545,10 @@ BOOST_AUTO_TEST_CASE(PYTHON_ACTIONX) { sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); { - const auto& w1 = td.schedule.getWell("P1", 0); - const auto& w2 = td.schedule.getWell("P2", 0); - const auto& w3 = td.schedule.getWell("P3", 0); - const auto& w4 = td.schedule.getWell("P4", 0); + const auto& w1 = sim.schedule.getWell("P1", 0); + const auto& w2 = sim.schedule.getWell("P2", 0); + const auto& w3 = sim.schedule.getWell("P3", 0); + const auto& w4 = sim.schedule.getWell("P4", 0); BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); BOOST_CHECK(w2.getStatus() == Well::Status::OPEN ); @@ -557,13 +557,13 @@ BOOST_AUTO_TEST_CASE(PYTHON_ACTIONX) { } - sim.run(td.schedule, io, false); + sim.run(io, false); { - const auto& w1 = td.schedule.getWell("P1", 1); - const auto& w2 = td.schedule.getWell("P2", 2); - const auto& w3 = td.schedule.getWell("P3", 3); - const auto& w4 = td.schedule.getWell("P4", 4); + const auto& w1 = sim.schedule.getWell("P1", 1); + const auto& w2 = sim.schedule.getWell("P2", 2); + const auto& w3 = sim.schedule.getWell("P3", 3); + const auto& w4 = sim.schedule.getWell("P4", 4); BOOST_CHECK(w1.getStatus() == Well::Status::SHUT ); BOOST_CHECK(w2.getStatus() == Well::Status::SHUT ); BOOST_CHECK(w3.getStatus() == Well::Status::SHUT ); diff --git a/tests/msim/test_msim_EXIT.cpp b/tests/msim/test_msim_EXIT.cpp index b8b9ec988..8cb8a0e89 100644 --- a/tests/msim/test_msim_EXIT.cpp +++ b/tests/msim/test_msim_EXIT.cpp @@ -88,7 +88,7 @@ BOOST_AUTO_TEST_CASE(MSIM_EXIT_TEST) { { WorkArea work_area("test_msim"); - Opm::msim msim(state); + Opm::msim msim(state, schedule); Opm::EclipseIO io(state, state.getInputGrid(), schedule, summary_config); msim.well_rate("P1", Opm::data::Rates::opt::oil, Opm::prod_opr); msim.well_rate("P2", Opm::data::Rates::opt::oil, Opm::prod_opr); @@ -99,9 +99,10 @@ BOOST_AUTO_TEST_CASE(MSIM_EXIT_TEST) { msim.well_rate("P2", Opm::data::Rates::opt::wat, Opm::prod_wpr_P2); msim.well_rate("P3", Opm::data::Rates::opt::wat, Opm::prod_wpr_P3); msim.well_rate("P4", Opm::data::Rates::opt::wat, Opm::prod_wpr_P4); - msim.run(schedule, io, false); + msim.run(io, false); + + auto exit_status = msim.schedule.exitStatus(); + BOOST_CHECK( exit_status.has_value() ); + BOOST_CHECK_EQUAL(exit_status.value(), 99); } - auto exit_status = schedule.exitStatus(); - BOOST_CHECK( exit_status.has_value() ); - BOOST_CHECK_EQUAL(exit_status.value(), 99); }