From 3b0e795e0b5ca1b32488c7982ed6e676bf8920eb Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 31 Aug 2020 16:15:54 +0200 Subject: [PATCH] Add UDQState argument to output writer --- msim/include/opm/msim/msim.hpp | 7 ++++--- msim/src/msim.cpp | 16 ++++++++++------ opm/output/eclipse/EclipseIO.hpp | 2 ++ src/opm/output/eclipse/EclipseIO.cpp | 1 + tests/test_EclipseIO.cpp | 3 +++ tests/test_RFT.cpp | 5 +++++ tests/test_Restart.cpp | 13 +++++++++---- tests/test_restartwellinfo.cpp | 3 +++ 8 files changed, 37 insertions(+), 13 deletions(-) diff --git a/msim/include/opm/msim/msim.hpp b/msim/include/opm/msim/msim.hpp index 3f235648f..52c1dfd46 100644 --- a/msim/include/opm/msim/msim.hpp +++ b/msim/include/opm/msim/msim.hpp @@ -25,6 +25,7 @@ class ParseContext; class Parser; class Python; class SummaryState; +class UDQState; namespace Action { class State; @@ -46,9 +47,9 @@ public: void post_step(Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step); private: - void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const; - void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double dt, EclipseIO& io) const; - void output(Action::State& action_state, SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, const data::GroupValues& group_data, EclipseIO& io) const; + void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const; + void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double dt, EclipseIO& io) const; + void output(Action::State& action_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::GroupValues& group_data, EclipseIO& io) const; void simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double seconds_elapsed, double time_step) const; EclipseState state; diff --git a/msim/src/msim.cpp b/msim/src/msim.cpp index 1f00e78fc..eaf353450 100644 --- a/msim/src/msim.cpp +++ b/msim/src/msim.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +47,7 @@ void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) { const double week = 7 * 86400; data::Solution sol; SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime())); + UDQState udq_state(schedule.getUDQConfig(0).params().undefinedValue()); Action::State action_state; Python python; @@ -54,10 +56,10 @@ void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) { data::Wells well_data; data::GroupValues group_data; if (report_only) - run_step(schedule, action_state, st, sol, well_data, group_data, report_step, io); + run_step(schedule, action_state, st, udq_state, sol, well_data, group_data, report_step, io); else { double time_step = std::min(week, 0.5*schedule.stepLength(report_step - 1)); - run_step(schedule, action_state, st, sol, well_data, group_data, report_step, time_step, io); + run_step(schedule, action_state, st, udq_state, sol, well_data, group_data, report_step, time_step, io); } post_step(schedule, action_state, st, sol, well_data, group_data, report_step); const auto& exit_status = schedule.exitStatus(); @@ -91,12 +93,12 @@ void msim::post_step(Schedule& schedule, Action::State& action_state, SummarySta -void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const { - this->run_step(schedule, action_state, st, sol, well_data, group_data, report_step, schedule.stepLength(report_step - 1), io); +void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const { + this->run_step(schedule, action_state, st, udq_state, sol, well_data, group_data, report_step, schedule.stepLength(report_step - 1), io); } -void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double dt, EclipseIO& io) const { +void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, UDQState& udq_state, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_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); double seconds_elapsed = start_time; @@ -123,6 +125,7 @@ void msim::run_step(const Schedule& schedule, Action::State& action_state, Summa this->output(action_state, st, + udq_state, report_step, (seconds_elapsed < end_time), seconds_elapsed, @@ -135,10 +138,11 @@ void msim::run_step(const Schedule& schedule, Action::State& action_state, Summa -void msim::output(Action::State& action_state, SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, const data::GroupValues& group_data, EclipseIO& io) const { +void msim::output(Action::State& action_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::GroupValues& group_data, EclipseIO& io) const { RestartValue value(sol, well_data, group_data); io.writeTimeStep(action_state, st, + udq_state, report_step, substep, seconds_elapsed, diff --git a/opm/output/eclipse/EclipseIO.hpp b/opm/output/eclipse/EclipseIO.hpp index 0c4d4aaea..43c616fb1 100644 --- a/opm/output/eclipse/EclipseIO.hpp +++ b/opm/output/eclipse/EclipseIO.hpp @@ -45,6 +45,7 @@ class EclipseState; class Schedule; class SummaryConfig; class SummaryState; +class UDQState; namespace Action { class State; } /*! * \brief A class to write the reservoir state and the well state of a @@ -176,6 +177,7 @@ public: void writeTimeStep( const Action::State& action_state, const SummaryState& st, + const UDQState& udq_state, int report_step, bool isSubstep, double seconds_elapsed, diff --git a/src/opm/output/eclipse/EclipseIO.cpp b/src/opm/output/eclipse/EclipseIO.cpp index 93f7ed1f0..48bd66ef3 100644 --- a/src/opm/output/eclipse/EclipseIO.cpp +++ b/src/opm/output/eclipse/EclipseIO.cpp @@ -189,6 +189,7 @@ void EclipseIO::writeInitial( data::Solution simProps, std::map #include #include +#include #include #include @@ -323,10 +324,12 @@ BOOST_AUTO_TEST_CASE(EclipseIOIntegration) { sol.insert("KRG", measure::identity , std::vector(3*3*3 , i*10), TargetType::RESTART_AUXILIARY); Action::State action_state; + UDQState udq_state(1); RestartValue restart_value(sol, wells, groups); auto first_step = ecl_util_make_date( 10 + i, 11, 2008 ); eclWriter.writeTimeStep( action_state, st, + udq_state, i, false, first_step - start_time, diff --git a/tests/test_RFT.cpp b/tests/test_RFT.cpp index f8f270c6d..51c726585 100644 --- a/tests/test_RFT.cpp +++ b/tests/test_RFT.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -277,6 +278,7 @@ BOOST_AUTO_TEST_CASE(test_RFT) SummaryState st(std::chrono::system_clock::now()); Action::State action_state; + UDQState udq_state(1234); data::Rates r1, r2; r1.set( data::Rates::opt::wat, 4.11 ); @@ -312,6 +314,7 @@ BOOST_AUTO_TEST_CASE(test_RFT) eclipseWriter.writeTimeStep( action_state, st, + udq_state, 2, false, step_time - start_time, @@ -396,6 +399,7 @@ BOOST_AUTO_TEST_CASE(test_RFT2) SummaryConfig summary_config( deck, schedule, eclipseState.getTableManager( )); SummaryState st(std::chrono::system_clock::now()); Action::State action_state; + UDQState udq_state(10); const auto start_time = schedule.posixStartTime(); const auto& time_map = schedule.getTimeMap( ); @@ -438,6 +442,7 @@ BOOST_AUTO_TEST_CASE(test_RFT2) eclipseWriter.writeTimeStep( action_state, st, + udq_state, step, false, step_time - start_time, diff --git a/tests/test_Restart.cpp b/tests/test_Restart.cpp index f4fa14b1c..f3bbf7360 100644 --- a/tests/test_Restart.cpp +++ b/tests/test_Restart.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -384,7 +385,7 @@ void init_st(SummaryState& st) { st.update("FLPR", 100); } -RestartValue first_sim(const Setup& setup, Action::State& action_state, SummaryState& st, bool write_double) { +RestartValue first_sim(const Setup& setup, Action::State& action_state, SummaryState& st, UDQState& udq_state, bool write_double) { EclipseIO eclWriter( setup.es, setup.grid, setup.schedule, setup.summary_config); auto num_cells = setup.grid.getNumActive( ); int report_step = 1; @@ -401,6 +402,7 @@ RestartValue first_sim(const Setup& setup, Action::State& action_state, SummaryS udq.eval(st); eclWriter.writeTimeStep( action_state, st, + udq_state, report_step, false, std::difftime(first_step, start_time), @@ -451,7 +453,8 @@ BOOST_AUTO_TEST_CASE(EclipseReadWriteWellStateData) { Setup base_setup("BASE_SIM.DATA"); SummaryState st(std::chrono::system_clock::now()); Action::State action_state; - auto state1 = first_sim( base_setup , action_state, st, false ); + UDQState udq_state(19); + auto state1 = first_sim( base_setup , action_state, st, udq_state, false ); Setup restart_setup("RESTART_SIM.DATA"); auto state2 = second_sim( restart_setup , action_state, st , keys ); @@ -586,8 +589,9 @@ BOOST_AUTO_TEST_CASE(EclipseReadWriteWellStateData_double) { Setup base_setup("BASE_SIM.DATA"); SummaryState st(std::chrono::system_clock::now()); Action::State action_state; + UDQState udq_state(1); - auto state1 = first_sim( base_setup , action_state, st, true); + auto state1 = first_sim( base_setup , action_state, st, udq_state, true); Setup restart_setup("RESTART_SIM.DATA"); auto state2 = second_sim( restart_setup, action_state, st, solution_keys ); @@ -1001,7 +1005,8 @@ BOOST_AUTO_TEST_CASE(UDQ_RESTART) { SummaryState st1(std::chrono::system_clock::now()); SummaryState st2(std::chrono::system_clock::now()); Action::State action_state; - auto state1 = first_sim( base_setup , action_state, st1, false ); + UDQState udq_state(1); + auto state1 = first_sim( base_setup , action_state, st1, udq_state, false ); Setup restart_setup("UDQ_RESTART.DATA"); auto state2 = second_sim( restart_setup , action_state, st2 , keys ); diff --git a/tests/test_restartwellinfo.cpp b/tests/test_restartwellinfo.cpp index 3ca26f598..8fd225318 100644 --- a/tests/test_restartwellinfo.cpp +++ b/tests/test_restartwellinfo.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -208,6 +209,7 @@ BOOST_AUTO_TEST_CASE(EclipseWriteRestartWellInfo) { int countTimeStep = schedule.getTimeMap().numTimesteps(); Opm::SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime())); Opm::Action::State action_state; + Opm::UDQState udq_state(123); Opm::data::Solution solution; solution.insert( "PRESSURE", Opm::UnitSystem::measure::pressure , std::vector< double >( num_cells, 1 ) , Opm::data::TargetType::RESTART_SOLUTION); @@ -220,6 +222,7 @@ BOOST_AUTO_TEST_CASE(EclipseWriteRestartWellInfo) { eclipseWriter.writeTimeStep( action_state, st, + udq_state, timestep, false, schedule.seconds(timestep),