diff --git a/opm/simulators/wells/SingleWellState.cpp b/opm/simulators/wells/SingleWellState.cpp index 0607f2387..d2f30c467 100644 --- a/opm/simulators/wells/SingleWellState.cpp +++ b/opm/simulators/wells/SingleWellState.cpp @@ -27,6 +27,7 @@ SingleWellState::SingleWellState(bool is_producer, std::size_t num_phases, doubl , well_potentials(num_phases) , productivity_index(num_phases) , surface_rates(num_phases) + , reservoir_rates(num_phases) {} @@ -51,6 +52,7 @@ void SingleWellState::shut() { this->thp = 0; this->status = Well::Status::SHUT; std::fill(this->surface_rates.begin(), this->surface_rates.end(), 0); + std::fill(this->reservoir_rates.begin(), this->reservoir_rates.end(), 0); std::fill(this->productivity_index.begin(), this->productivity_index.end(), 0); } diff --git a/opm/simulators/wells/SingleWellState.hpp b/opm/simulators/wells/SingleWellState.hpp index da32b9040..f5efe9328 100644 --- a/opm/simulators/wells/SingleWellState.hpp +++ b/opm/simulators/wells/SingleWellState.hpp @@ -42,6 +42,7 @@ public: std::vector well_potentials; std::vector productivity_index; std::vector surface_rates; + std::vector reservoir_rates; SegmentState segments; Events events; Well::InjectorCMode injection_cmode{Well::InjectorCMode::CMODE_UNDEFINED}; diff --git a/opm/simulators/wells/WellGroupHelpers.cpp b/opm/simulators/wells/WellGroupHelpers.cpp index f73fd6b59..c73754929 100644 --- a/opm/simulators/wells/WellGroupHelpers.cpp +++ b/opm/simulators/wells/WellGroupHelpers.cpp @@ -99,7 +99,7 @@ namespace { double factor = wellEcl.getEfficiencyFactor(); const auto& ws = wellState.well(well_index); if (res_rates) { - const auto& well_rates = wellState.wellReservoirRates(well_index); + const auto& well_rates = ws.reservoir_rates; if (injector) rate += factor * well_rates[phasePos]; else diff --git a/opm/simulators/wells/WellInterfaceFluidSystem.cpp b/opm/simulators/wells/WellInterfaceFluidSystem.cpp index 28a3f56c8..9dfeb38c5 100644 --- a/opm/simulators/wells/WellInterfaceFluidSystem.cpp +++ b/opm/simulators/wells/WellInterfaceFluidSystem.cpp @@ -75,10 +75,7 @@ calculateReservoirRates(WellState& well_state) const std::vector voidage_rates(np, 0.0); rateConverter_.calcReservoirVoidageRates(fipreg, pvtRegionIdx_, surface_rates, voidage_rates); - - for (int p = 0; p < np; ++p) { - well_state.wellReservoirRates(index_of_well_)[p] = voidage_rates[p]; - } + ws.reservoir_rates = voidage_rates; } @@ -129,13 +126,13 @@ activeProductionConstraint(const WellState& well_state, if (controls.hasControl(Well::ProducerCMode::RESV) && currentControl != Well::ProducerCMode::RESV) { double current_rate = 0.0; if (pu.phase_used[BlackoilPhases::Aqua]) - current_rate -= well_state.wellReservoirRates(well_index)[pu.phase_pos[BlackoilPhases::Aqua]]; + current_rate -= ws.reservoir_rates[pu.phase_pos[BlackoilPhases::Aqua]]; if (pu.phase_used[BlackoilPhases::Liquid]) - current_rate -= well_state.wellReservoirRates(well_index)[pu.phase_pos[BlackoilPhases::Liquid]]; + current_rate -= ws.reservoir_rates[pu.phase_pos[BlackoilPhases::Liquid]]; if (pu.phase_used[BlackoilPhases::Vapour]) - current_rate -= well_state.wellReservoirRates(well_index)[pu.phase_pos[BlackoilPhases::Vapour]]; + current_rate -= ws.reservoir_rates[pu.phase_pos[BlackoilPhases::Vapour]]; if (controls.prediction_mode && controls.resv_rate < current_rate) return Well::ProducerCMode::RESV; @@ -229,13 +226,13 @@ activeInjectionConstraint(const WellState& well_state, { double current_rate = 0.0; if( pu.phase_used[BlackoilPhases::Aqua] ) - current_rate += well_state.wellReservoirRates(well_index)[ pu.phase_pos[BlackoilPhases::Aqua] ]; + current_rate += ws.reservoir_rates[ pu.phase_pos[BlackoilPhases::Aqua] ]; if( pu.phase_used[BlackoilPhases::Liquid] ) - current_rate += well_state.wellReservoirRates(well_index)[ pu.phase_pos[BlackoilPhases::Liquid] ]; + current_rate += ws.reservoir_rates[ pu.phase_pos[BlackoilPhases::Liquid] ]; if( pu.phase_used[BlackoilPhases::Vapour] ) - current_rate += well_state.wellReservoirRates(well_index)[ pu.phase_pos[BlackoilPhases::Vapour] ]; + current_rate += ws.reservoir_rates[ pu.phase_pos[BlackoilPhases::Vapour] ]; if (controls.reservoir_rate < current_rate) return Well::InjectorCMode::RESV; diff --git a/opm/simulators/wells/WellState.cpp b/opm/simulators/wells/WellState.cpp index b0cefbf51..5f2c2fed3 100644 --- a/opm/simulators/wells/WellState.cpp +++ b/opm/simulators/wells/WellState.cpp @@ -244,7 +244,6 @@ void WellState::init(const std::vector& cellPressures, nperf += wpd.size(); } - well_reservoir_rates_.clear(); { const auto& wg_events = schedule[report_step].wellgroup_events(); for (const auto& ecl_well : wells_ecl) { @@ -279,8 +278,6 @@ void WellState::init(const std::vector& cellPressures, } perf_data.pressure[perf] = cellPressures[well_perf_data[w][perf].cell_index]; } - - this->well_reservoir_rates_.add(wname, std::vector(np, 0)); } for (int w = 0; w < nw; ++w) { @@ -347,7 +344,7 @@ void WellState::init(const std::vector& cellPressures, } new_well.surface_rates = prev_well.surface_rates; - wellReservoirRates(w) = prevState->wellReservoirRates(oldIndex); + new_well.reservoir_rates = prev_well.reservoir_rates; new_well.well_potentials = prev_well.well_potentials; // perfPhaseRates @@ -472,7 +469,7 @@ WellState::report(const int* globalCellIdxMap, continue; } - const auto& reservoir_rates = this->well_reservoir_rates_[well_index]; + const auto& reservoir_rates = ws.reservoir_rates; const auto& well_potentials = ws.well_potentials; const auto& wpi = ws.productivity_index; const auto& wv = ws.surface_rates; @@ -811,12 +808,6 @@ void WellState::shutWell(int well_index) { auto& ws = this->well(well_index); ws.shut(); - const int np = numPhases(); - - auto& resv = this->well_reservoir_rates_[well_index]; - for (int p = 0; p < np; ++p) { - resv[p] = 0.0; - } auto& perf_data = this->perfData(well_index); auto& connpi = perf_data.prod_index; diff --git a/opm/simulators/wells/WellState.hpp b/opm/simulators/wells/WellState.hpp index 6271d6be9..f300f3cfa 100644 --- a/opm/simulators/wells/WellState.hpp +++ b/opm/simulators/wells/WellState.hpp @@ -149,18 +149,6 @@ public: /// One rate pr well double brineWellRate(const int w) const; - const WellContainer>& wellReservoirRates() const { return well_reservoir_rates_; } - - std::vector& wellReservoirRates(std::size_t well_index) - { - return well_reservoir_rates_[well_index]; - } - - const std::vector& wellReservoirRates(std::size_t well_index) const - { - return well_reservoir_rates_[well_index]; - } - template void communicateGroupRates(const Comm& comm); @@ -319,10 +307,6 @@ private: // not. std::map>> well_rates; - // phase rates under reservoir condition for wells - // or voidage phase rates - WellContainer> well_reservoir_rates_; - data::Segment reportSegmentResults(const PhaseUsage& pu, const int well_id,