mirror of
https://github.com/OPM/opm-simulators.git
synced 2026-11-03 12:47:42 -06:00
adding the group name to the SingleWellState:;group_target
so we might be able to use it to identifiy the NONE control group
This commit is contained in:
1 parent
976315e223
commit
5e5a57dfd3
5 files changed
+17
-17
No files matched your search
@@ -1338,7 +1338,7 @@ updateAndCommunicateGroupData(const int reportStepIdx,
|
||||
const Scalar efficiencyFactor = well->wellEcl().getEfficiencyFactor() *
|
||||
ws.efficiency_scaling_factor;
|
||||
// Translate injector type from control to Phase.
|
||||
std::optional<Scalar> group_target;
|
||||
std::optional<std::pair<std::string, Scalar>> group_target;
|
||||
if (well->isProducer()) {
|
||||
group_target = group_state_helper.getWellGroupTargetProducer(
|
||||
well->name(),
|
||||
|
||||
@@ -177,7 +177,7 @@ GroupStateHelper<Scalar, IndexTraits>::checkGroupConstraintsInj(const std::strin
|
||||
if (this->schedule_.hasWell(name)
|
||||
&& this->wellState().well(name).group_target) { // for wells we already have computed the target
|
||||
Scalar scale = 1.0;
|
||||
const Scalar group_target_rate_available = *this->wellState().well(name).group_target;
|
||||
const Scalar group_target_rate_available = (*this->wellState().well(name).group_target).second;
|
||||
const Scalar current_well_rate_available
|
||||
= tcalc.calcModeRateFromRates(rates); // Switch sign since 'rates' are negative for producers.
|
||||
if (current_well_rate_available > 1e-12) {
|
||||
@@ -319,7 +319,7 @@ GroupStateHelper<Scalar, IndexTraits>::checkGroupConstraintsProd(const std::stri
|
||||
|
||||
// Switch sign since 'rates' are negative for producers.
|
||||
const Scalar current_well_rate_available = -tcalc.calcModeRateFromRates(rates);
|
||||
const Scalar group_target_rate_available = *this->wellState().well(name).group_target;
|
||||
const Scalar group_target_rate_available = (*this->wellState().well(name).group_target).second;
|
||||
Scalar scale = 1.0;
|
||||
if (current_well_rate_available > 1e-12) {
|
||||
scale = group_target_rate_available / current_well_rate_available;
|
||||
@@ -648,7 +648,7 @@ GroupStateHelper<Scalar, IndexTraits>::getWellGroupTargetInjector(const std::str
|
||||
}
|
||||
|
||||
template <typename Scalar, typename IndexTraits>
|
||||
std::optional<Scalar>
|
||||
std::optional<std::pair<std::string, Scalar>>
|
||||
GroupStateHelper<Scalar, IndexTraits>::getWellGroupTargetProducer(const std::string& name,
|
||||
const std::string& parent,
|
||||
const Group& group,
|
||||
@@ -740,7 +740,7 @@ GroupStateHelper<Scalar, IndexTraits>::getWellGroupTargetProducer(const std::str
|
||||
do_addback);
|
||||
|
||||
// Avoid negative target rates coming from too large local reductions.
|
||||
return std::max(Scalar(0.0), target / efficiency_factor);
|
||||
return {group.name(), std::max(Scalar(0.0), target / efficiency_factor)};
|
||||
}
|
||||
|
||||
template <typename Scalar, typename IndexTraits>
|
||||
|
||||
@@ -251,12 +251,12 @@ public:
|
||||
const Scalar efficiency_factor,
|
||||
const std::vector<Scalar>& resv_coeff) const;
|
||||
|
||||
std::optional<Scalar> getWellGroupTargetProducer(const std::string& name,
|
||||
const std::string& parent,
|
||||
const Group& group,
|
||||
const Scalar* rates,
|
||||
const Scalar efficiency_factor,
|
||||
const std::vector<Scalar>& resv_coeff) const;
|
||||
std::optional<std::pair<std::string, Scalar>> getWellGroupTargetProducer(const std::string& name,
|
||||
const std::string& parent,
|
||||
const Group& group,
|
||||
const Scalar* rates,
|
||||
const Scalar efficiency_factor,
|
||||
const std::vector<Scalar>& resv_coeff) const;
|
||||
|
||||
GuideRate::RateVector getWellRateVector(const std::string& name) const;
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ public:
|
||||
std::vector<Scalar> prev_surface_rates;
|
||||
PerfData<Scalar> perf_data;
|
||||
bool trivial_group_target;
|
||||
std::optional<Scalar> group_target;
|
||||
std::optional<std::pair<std::string, Scalar>> group_target;
|
||||
SegmentState<Scalar> segments;
|
||||
Events events;
|
||||
WellInjectorCMode injection_cmode{WellInjectorCMode::CMODE_UNDEFINED};
|
||||
|
||||
@@ -124,7 +124,7 @@ getGroupInjectionControl(const Group& group,
|
||||
|
||||
const auto target_rate = well_state.well(well_.indexOfWell()).group_target;
|
||||
if (target_rate) {
|
||||
control_eq = injection_rate - *target_rate;
|
||||
control_eq = injection_rate - target_rate->second;
|
||||
} else {
|
||||
const auto& controls = well.injectionControls(summaryState);
|
||||
control_eq = bhp - controls.bhp_limit;
|
||||
@@ -190,7 +190,7 @@ getGroupInjectionTargetRate(const Group& group,
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return groupStateHelper.wellState().well(well_.indexOfWell()).group_target;
|
||||
return groupStateHelper.wellState().well(well_.indexOfWell()).group_target->second;
|
||||
}
|
||||
|
||||
template<typename Scalar, typename IndexTraits>
|
||||
@@ -258,7 +258,7 @@ getGroupProductionControl(const Group& group,
|
||||
const auto target_rate = well_state.well(well_.indexOfWell()).group_target;
|
||||
if (target_rate) {
|
||||
const auto current_rate = -tcalc.calcModeRateFromRates(rates); // Switch sign since 'rates' are negative for producers.
|
||||
control_eq = current_rate - *target_rate;
|
||||
control_eq = current_rate - target_rate->second;
|
||||
} else {
|
||||
const auto& controls = well.productionControls(summaryState);
|
||||
control_eq = bhp - controls.bhp_limit;
|
||||
@@ -310,7 +310,7 @@ getGroupProductionTargetRate(const Group& group,
|
||||
if (!target_rate) {
|
||||
return 1.0;
|
||||
}
|
||||
if (*target_rate == 0.0) {
|
||||
if (target_rate->second == 0.0) {
|
||||
return 0.0;
|
||||
}
|
||||
const auto& ws = well_state.well(well_.indexOfWell());
|
||||
@@ -318,7 +318,7 @@ getGroupProductionTargetRate(const Group& group,
|
||||
const auto current_rate = -tcalc.calcModeRateFromRates(rates); // Switch sign since 'rates' are negative for producers.
|
||||
Scalar scale = 1.0;
|
||||
if (current_rate > 1e-14)
|
||||
scale = *target_rate / current_rate;
|
||||
scale = target_rate->second / current_rate;
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user