Add UDQState argument to output writer

This commit is contained in:
Joakim Hove 2020-08-31 16:15:54 +02:00
parent 432f666768
commit 3b0e795e0b
8 changed files with 37 additions and 13 deletions

View File

@ -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;

View File

@ -30,6 +30,7 @@
#include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp>
#include <opm/parser/eclipse/Parser/Parser.hpp>
#include <opm/parser/eclipse/Parser/ParseContext.hpp>
@ -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,

View File

@ -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,

View File

@ -189,6 +189,7 @@ void EclipseIO::writeInitial( data::Solution simProps, std::map<std::string, std
// implementation of the writeTimeStep method
void EclipseIO::writeTimeStep(const Action::State& action_state,
const SummaryState& st,
const UDQState& /* udq_state */,
int report_step,
bool isSubstep,
double secs_elapsed,

View File

@ -36,6 +36,7 @@
#include <opm/parser/eclipse/Units/Units.hpp>
#include <opm/parser/eclipse/Units/UnitSystem.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
#include <opm/io/eclipse/EclFile.hpp>
#include <opm/io/eclipse/EGrid.hpp>
@ -323,10 +324,12 @@ BOOST_AUTO_TEST_CASE(EclipseIOIntegration) {
sol.insert("KRG", measure::identity , std::vector<double>(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,

View File

@ -39,6 +39,7 @@
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
#include <opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
#include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/Parser/Parser.hpp>
@ -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,

View File

@ -42,6 +42,7 @@
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
#include <opm/io/eclipse/OutputStream.hpp>
#include <opm/io/eclipse/EclIOdata.hpp>
@ -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 );

View File

@ -37,6 +37,7 @@
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQState.hpp>
#include <opm/io/eclipse/EclFile.hpp>
@ -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),