Reactor function groupProductionControllable()

This commit is contained in:
Joakim Hove 2020-11-04 11:49:17 +01:00
parent 4e5cc1c94d
commit b28ed60b02

View File

@ -116,46 +116,40 @@ int currentGroupLevel(const Opm::Schedule& sched, const Opm::Group& group, const
} }
} }
bool groupProductionControllable(const Opm::Schedule& sched, const Opm::SummaryState& sumState, const Opm::Group& group, const size_t simStep) void groupProductionControllable(const Opm::Schedule& sched, const Opm::SummaryState& sumState, const Opm::Group& group, const size_t simStep, bool& controllable)
{ {
using wellCtrlMode = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode; using wellCtrlMode = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode;
bool controllable = false; if (controllable)
if (group.defined( simStep )) { return;
if (!group.wellgroup()) {
if(!group.groups().empty()) { for (const auto& group_name : group.groups())
for (const auto& group_name : group.groups()) { groupProductionControllable(sched, sumState, sched.getGroup(group_name, simStep), simStep, controllable);
if (groupProductionControllable(sched, sumState, sched.getGroup(group_name, simStep), simStep)) {
controllable = true; for (const auto& well_name : group.wells()) {
continue; const auto& well = sched.getWell(well_name, simStep);
} if (well.isProducer()) {
} int cur_prod_ctrl = 0;
// Find control mode for well
const std::string sum_key = "WMCTL";
if (sumState.has_well_var(well_name, sum_key)) {
cur_prod_ctrl = static_cast<int>(sumState.get_well_var(well_name, sum_key));
}
if (cur_prod_ctrl == wellCtrlMode::Group) {
controllable = true;
return;
} }
} }
else {
for (const auto& well_name : group.wells()) {
const auto& well = sched.getWell(well_name, simStep);
if (well.isProducer()) {
int cur_prod_ctrl = 0;
// Find control mode for well
std::string well_key_1 = "WMCTL:" + well_name;
if (sumState.has(well_key_1)) {
cur_prod_ctrl = static_cast<int>(sumState.get(well_key_1));
}
if (cur_prod_ctrl == wellCtrlMode::Group) {
controllable = true;
continue;
}
}
}
}
return controllable;
} else {
std::stringstream str;
str << "actual group has not been defined at report time: " << simStep;
throw std::invalid_argument(str.str());
} }
} }
bool groupProductionControllable(const Opm::Schedule& sched, const Opm::SummaryState& sumState, const Opm::Group& group, const size_t simStep) {
bool controllable = false;
groupProductionControllable(sched, sumState, group, simStep, controllable);
return controllable;
}
void groupInjectionControllable(const Opm::Schedule& sched, const Opm::SummaryState& sumState, const Opm::Group& group, const Opm::Phase& iPhase, const size_t simStep, bool& controllable) void groupInjectionControllable(const Opm::Schedule& sched, const Opm::SummaryState& sumState, const Opm::Group& group, const Opm::Phase& iPhase, const size_t simStep, bool& controllable)
{ {
using wellCtrlMode = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode; using wellCtrlMode = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode;