Update SummaryState in UDQContext

This commit is contained in:
Joakim Hove 2020-10-20 20:46:43 +02:00
parent 313f576e37
commit 2289ba165b
5 changed files with 11 additions and 18 deletions

View File

@ -68,7 +68,7 @@ public:
static UDQDefine serializeObject();
UDQSet eval(UDQContext& context) const;
UDQSet eval(const UDQContext& context) const;
const std::string& keyword() const;
const std::string& input_string() const;
UDQVarType var_type() const;

View File

@ -298,49 +298,42 @@ namespace Opm {
void UDQConfig::eval(std::size_t report_step, SummaryState& st, UDQState& udq_state) const {
const auto& func_table = this->function_table();
auto undefined_value = this->params().undefinedValue();
UDQContext context(func_table, st, udq_state);
for (const auto& assign : this->assignments(UDQVarType::WELL_VAR)) {
if (udq_state.assign(report_step, assign.keyword())) {
auto ws = assign.eval(st.wells());
context.update_assign(report_step, assign.keyword(), ws);
st.update_udq(ws, undefined_value);
}
}
for (const auto& def : this->definitions(UDQVarType::WELL_VAR)) {
auto ws = def.eval(context);
context.update_define(def.keyword(), ws);
st.update_udq(ws, undefined_value);
}
for (const auto& assign : this->assignments(UDQVarType::GROUP_VAR)) {
if (udq_state.assign(report_step, assign.keyword())) {
auto ws = assign.eval(st.groups());
context.update_assign(report_step, assign.keyword(), ws);
st.update_udq(ws, undefined_value);
}
}
for (const auto& def : this->definitions(UDQVarType::GROUP_VAR)) {
auto ws = def.eval(context);
context.update_define(def.keyword(), ws);
st.update_udq(ws, undefined_value);
}
for (const auto& assign : this->assignments(UDQVarType::FIELD_VAR)) {
if (udq_state.assign(assign.report_step(), assign.keyword())) {
auto ws = assign.eval();
context.update_assign(report_step, assign.keyword(), ws);
st.update_udq(ws, undefined_value);
}
}
for (const auto& def : this->definitions(UDQVarType::FIELD_VAR)) {
auto field_udq = def.eval(context);
context.update_define(def.keyword(), field_udq);
st.update_udq(field_udq, undefined_value);
}
}
}

View File

@ -130,9 +130,11 @@ bool is_udq(const std::string& key) {
void UDQContext::update_assign(std::size_t report_step, const std::string& keyword, const UDQSet& udq_result) {
this->udq_state.add_assign(report_step, keyword, udq_result);
this->summary_state.update_udq(udq_result, this->udq_state.undefined_value());
}
void UDQContext::update_define(const std::string& keyword, const UDQSet& udq_result) {
this->udq_state.add_define(keyword, udq_result);
this->summary_state.update_udq(udq_result, this->udq_state.undefined_value());
}
}

View File

@ -251,7 +251,7 @@ bool dynamic_type_check(UDQVarType lhs, UDQVarType rhs) {
}
UDQSet UDQDefine::eval(UDQContext& context) const {
UDQSet UDQDefine::eval(const UDQContext& context) const {
UDQSet res = this->ast->eval(this->m_var_type, context);
res.name( this->m_keyword );
@ -259,7 +259,6 @@ UDQSet UDQDefine::eval(UDQContext& context) const {
std::string msg = "Invalid runtime type conversion detected when evaluating UDQ";
throw std::invalid_argument(msg);
}
context.update_define(this->keyword(), res);
if (res.var_type() == UDQVarType::SCALAR) {
/*

View File

@ -1118,10 +1118,10 @@ BOOST_AUTO_TEST_CASE(UDQ_SORTD_NAN) {
st.update_well_var("OP4", "WWIR", 4.0);
auto res1 = def.eval(context);
st.update_udq( res1, 0 );
context.update_define(def.keyword(), res1);
auto res_sort1 = def_sort.eval(context);
st.update_udq( res_sort1 , 0);
context.update_define(def_sort.keyword(), res_sort1);
BOOST_CHECK_EQUAL(res_sort1["OP1"].get(), 1.0);
BOOST_CHECK_EQUAL(res_sort1["OP2"].get(), 2.0);
BOOST_CHECK_EQUAL(res_sort1["OP3"].get(), 3.0);
@ -1132,11 +1132,13 @@ BOOST_AUTO_TEST_CASE(UDQ_SORTD_NAN) {
st.update_well_var("OP1", "WWIR", 0);
auto res2 = def.eval(context);
BOOST_CHECK_EQUAL(res2.defined_size(), 3U);
st.update_udq( res2, 0 );
context.update_define(def.keyword(), res2);
BOOST_CHECK( st.has_well_var("OP4", "WUPR1"));
auto res_sort2 = def_sort.eval(context);
st.update_udq( res_sort2, 0 );
context.update_define(def.keyword(), res2);
BOOST_CHECK_EQUAL(res_sort2.defined_size(), 3U);
BOOST_CHECK_EQUAL(res_sort2["OP2"].get(), 1.0);
BOOST_CHECK_EQUAL(res_sort2["OP3"].get(), 2.0);
@ -1162,10 +1164,7 @@ BOOST_AUTO_TEST_CASE(UDQ_SORTA) {
st.update_well_var("OPU02", "WWCT", 0.0);
auto res1 = def1.eval(context);
st.update_well_var("OPL01", "WUPR1", res1["OPL01"].get());
st.update_well_var("OPL02", "WUPR1", res1["OPL02"].get());
st.update_well_var("OPU01", "WUPR1", res1["OPU01"].get());
st.update_well_var("OPU02", "WUPR1", res1["OPU02"].get());
context.update_define(def1.keyword(), res1);
auto res_sort = def_sort.eval(context);
BOOST_CHECK_EQUAL(res_sort["OPL02"].get(), 1.0);