Default UDQ Assignments to All Wells in Model

An assignment of the form

    ASSIGN WUPPERTAL 354.572 /

should create a UDQ set of size equal to the number of wells in
the model, not just the wells already flowing-especially if the
assignment happens on the very first report step before any wells
are flowing.
This commit is contained in:
Bård Skaflestad
2023-06-13 09:58:14 +02:00
parent 90497b745b
commit c33b94ca3a
5 changed files with 36 additions and 24 deletions

View File

@@ -1949,7 +1949,7 @@ UDQ
SummaryState st(TimeService::now());
auto undefined_value = udq.params().undefinedValue();
UDQState udq_state(undefined_value);
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
BOOST_CHECK_EQUAL( st.get("FU_UADD"), 12); // 10 + 2
@@ -1975,7 +1975,7 @@ DEFINE FU_PAR2 FU_PAR3 /
auto undefined_value = udq.params().undefinedValue();
UDQState udq_state(undefined_value);
st.update("FMWPR", 100);
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
BOOST_CHECK_EQUAL(st.get("FU_PAR2"), 100);
}
@@ -1993,7 +1993,7 @@ DEFINE FU_PAR3 FU_PAR2 + 1/
SummaryState st(TimeService::now());
auto undefined_value = udq.params().undefinedValue();
UDQState udq_state(undefined_value);
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
BOOST_CHECK_EQUAL(st.get("FU_PAR2"), undefined_value);
BOOST_CHECK_EQUAL(st.get("FU_PAR3"), undefined_value);
@@ -2103,7 +2103,7 @@ DEFINE WUGASRA 750000 - WGLIR '*' /
NameOrder wo({"W1", "W2", "W3"});
WellMatcher wm(wo);
udq.eval(0, wm, st, udq_state);
udq.eval(0, schedule, wm, st, udq_state);
{
std::unordered_set<std::string> required_keys;
udq.required_summary(required_keys);
@@ -2307,7 +2307,7 @@ DEFINE FU_VAR91 GOPR TEST /
st.update_well_var("W3", "WGLIR", 3);
st.update_group_var("TEST", "GOPR", 1);
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
}
BOOST_AUTO_TEST_CASE(UDQ_KEY_ERROR) {
@@ -2326,7 +2326,7 @@ UDQ
UDQState udq_state(undefined_value);
SummaryState st(TimeService::now());
BOOST_CHECK_THROW(udq.eval(0, {}, st, udq_state), std::exception);
BOOST_CHECK_THROW(udq.eval(0, schedule, {}, st, udq_state), std::exception);
}
BOOST_AUTO_TEST_CASE(UDQ_ASSIGN) {
@@ -2351,7 +2351,7 @@ UDQ
BOOST_CHECK(required_keys.empty());
}
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
BOOST_CHECK_EQUAL(st.get("FU_VAR1"), 10);
}
@@ -2392,7 +2392,7 @@ TSTEP
// Counting: 1,2,3,4,5
for (std::size_t report_step = 0; report_step < 5; report_step++) {
const auto& udq = schedule.getUDQConfig(report_step);
udq.eval(report_step, schedule.wellMatcher(report_step), st, udq_state);
udq.eval(report_step, schedule, schedule.wellMatcher(report_step), st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
BOOST_CHECK_EQUAL(fu_var1, report_step + 1);
}
@@ -2400,7 +2400,7 @@ TSTEP
// Reset to zero and count: 1,2,3,4,5
for (std::size_t report_step = 5; report_step < 10; report_step++) {
const auto& udq = schedule.getUDQConfig(report_step);
udq.eval(report_step, schedule.wellMatcher(report_step), st, udq_state);
udq.eval(report_step, schedule, schedule.wellMatcher(report_step), st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
BOOST_CHECK_EQUAL(fu_var1, report_step - 4);
}
@@ -2408,7 +2408,7 @@ TSTEP
// Reset to zero and stay there.
for (std::size_t report_step = 10; report_step < 15; report_step++) {
const auto& udq = schedule.getUDQConfig(report_step);
udq.eval(report_step, schedule.wellMatcher(report_step),st, udq_state);
udq.eval(report_step, schedule, schedule.wellMatcher(report_step),st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
BOOST_CHECK_EQUAL(fu_var1, 0);
}
@@ -2459,7 +2459,7 @@ UDQ
SummaryState st(TimeService::now());
const auto& udq = schedule.getUDQConfig(0);
udq.eval(0, {}, st, udq_state);
udq.eval(0, schedule, {}, st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
auto fu_var2 = st.get("FU_VAR2");
auto fu_var3 = st.get("FU_VAR3");
@@ -2504,7 +2504,7 @@ UDQ
st.update_well_var("P3", "WOPR", 3);
st.update_well_var("P4", "WOPR", 4);
udq.eval(0, schedule.wellMatcher(0), st, udq_state);
udq.eval(0, schedule, schedule.wellMatcher(0), st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
auto fu_var2 = st.get("FU_VAR2");
auto fu_var3 = st.get("FU_VAR3");
@@ -2530,7 +2530,7 @@ UDQ
UDQState udq_state(0);
SummaryState st(TimeService::now());
const auto& udq = schedule.getUDQConfig(0);
udq.eval(0, schedule.wellMatcher(0), st, udq_state);
udq.eval(0, schedule, schedule.wellMatcher(0), st, udq_state);
auto fu_var1 = st.get("FU_VAR1");
auto fu_var2 = st.get("FU_VAR2");

View File

@@ -419,7 +419,11 @@ RestartValue first_sim(const Setup& setup, Action::State& action_state, SummaryS
const auto& udq = setup.schedule.getUDQConfig(report_step);
RestartValue restart_value(sol, wells, groups, {});
udq.eval(report_step, setup.schedule.wellMatcher(report_step), st, udq_state);
udq.eval(report_step,
setup.schedule,
setup.schedule.wellMatcher(report_step),
st, udq_state);
eclWriter.writeTimeStep( action_state,
wtest_state,
st,