mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Add productivity_index to SingleWellState
This commit is contained in:
@@ -1060,7 +1060,7 @@ BlackoilWellModelGeneric::
|
|||||||
wellPI(const int well_index) const
|
wellPI(const int well_index) const
|
||||||
{
|
{
|
||||||
const auto& pu = this->phase_usage_;
|
const auto& pu = this->phase_usage_;
|
||||||
const auto& pi = this->wellState().productivityIndex(well_index);
|
const auto& pi = this->wellState().well(well_index).productivity_index;
|
||||||
|
|
||||||
const auto preferred = this->wells_ecl_[well_index].getPreferredPhase();
|
const auto preferred = this->wells_ecl_[well_index].getPreferredPhase();
|
||||||
switch (preferred) { // Should really have LIQUID = OIL + WATER here too...
|
switch (preferred) { // Should really have LIQUID = OIL + WATER here too...
|
||||||
|
|||||||
@@ -597,9 +597,10 @@ namespace Opm
|
|||||||
std::transform(src, src + np, dest, dest, std::plus<>{});
|
std::transform(src, src + np, dest, dest, std::plus<>{});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto& ws = well_state.well(this->index_of_well_);
|
||||||
auto& perf_data = well_state.perfData(this->index_of_well_);
|
auto& perf_data = well_state.perfData(this->index_of_well_);
|
||||||
auto* wellPI = well_state.productivityIndex(this->index_of_well_).data();
|
|
||||||
auto* connPI = perf_data.prod_index.data();
|
auto* connPI = perf_data.prod_index.data();
|
||||||
|
auto* wellPI = ws.productivity_index.data();
|
||||||
|
|
||||||
setToZero(wellPI);
|
setToZero(wellPI);
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ SingleWellState::SingleWellState(bool is_producer, std::size_t num_phases, doubl
|
|||||||
: producer(is_producer)
|
: producer(is_producer)
|
||||||
, temperature(temp)
|
, temperature(temp)
|
||||||
, well_potentials(num_phases)
|
, well_potentials(num_phases)
|
||||||
|
, productivity_index(num_phases)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ public:
|
|||||||
double dissolved_gas_rate{0};
|
double dissolved_gas_rate{0};
|
||||||
double vaporized_oil_rate{0};
|
double vaporized_oil_rate{0};
|
||||||
std::vector<double> well_potentials;
|
std::vector<double> well_potentials;
|
||||||
|
std::vector<double> productivity_index;
|
||||||
Events events;
|
Events events;
|
||||||
Well::InjectorCMode injection_cmode{Well::InjectorCMode::CMODE_UNDEFINED};
|
Well::InjectorCMode injection_cmode{Well::InjectorCMode::CMODE_UNDEFINED};
|
||||||
Well::ProducerCMode production_cmode{Well::ProducerCMode::CMODE_UNDEFINED};
|
Well::ProducerCMode production_cmode{Well::ProducerCMode::CMODE_UNDEFINED};
|
||||||
|
|||||||
@@ -1374,8 +1374,9 @@ namespace Opm
|
|||||||
std::transform(src, src + np, dest, dest, std::plus<>{});
|
std::transform(src, src + np, dest, dest, std::plus<>{});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto& ws = well_state.well(this->index_of_well_);
|
||||||
auto& perf_data = well_state.perfData(this->index_of_well_);
|
auto& perf_data = well_state.perfData(this->index_of_well_);
|
||||||
auto* wellPI = well_state.productivityIndex(this->index_of_well_).data();
|
auto* wellPI = ws.productivity_index.data();
|
||||||
auto* connPI = perf_data.prod_index.data();
|
auto* connPI = perf_data.prod_index.data();
|
||||||
|
|
||||||
setToZero(wellPI);
|
setToZero(wellPI);
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ void WellState::base_init(const std::vector<double>& cellPressures,
|
|||||||
this->parallel_well_info_.clear();
|
this->parallel_well_info_.clear();
|
||||||
this->wellrates_.clear();
|
this->wellrates_.clear();
|
||||||
this->segment_state.clear();
|
this->segment_state.clear();
|
||||||
this->productivity_index_.clear();
|
|
||||||
this->wells_.clear();
|
this->wells_.clear();
|
||||||
{
|
{
|
||||||
// const int nw = wells->number_of_wells;
|
// const int nw = wells->number_of_wells;
|
||||||
@@ -95,7 +94,6 @@ void WellState::initSingleWell(const std::vector<double>& cellPressures,
|
|||||||
const int num_perf_this_well = well_info->communication().sum(well_perf_data.size());
|
const int num_perf_this_well = well_info->communication().sum(well_perf_data.size());
|
||||||
this->segment_state.add(well.name(), SegmentState{});
|
this->segment_state.add(well.name(), SegmentState{});
|
||||||
this->perfdata.add(well.name(), PerfData{static_cast<std::size_t>(num_perf_this_well), well.isInjector(), this->phase_usage_});
|
this->perfdata.add(well.name(), PerfData{static_cast<std::size_t>(num_perf_this_well), well.isInjector(), this->phase_usage_});
|
||||||
this->productivity_index_.add(well.name(), std::vector<double>(np, 0));
|
|
||||||
|
|
||||||
if ( num_perf_this_well == 0 )
|
if ( num_perf_this_well == 0 )
|
||||||
return;
|
return;
|
||||||
@@ -391,7 +389,7 @@ void WellState::init(const std::vector<double>& cellPressures,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Productivity index.
|
// Productivity index.
|
||||||
this->productivity_index_.copy_welldata( prevState->productivity_index_, wname );
|
new_well.productivity_index = prev_well.productivity_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If in the new step, there is no THP related
|
// If in the new step, there is no THP related
|
||||||
@@ -481,7 +479,7 @@ WellState::report(const int* globalCellIdxMap,
|
|||||||
|
|
||||||
const auto& reservoir_rates = this->well_reservoir_rates_[well_index];
|
const auto& reservoir_rates = this->well_reservoir_rates_[well_index];
|
||||||
const auto& well_potentials = ws.well_potentials;
|
const auto& well_potentials = ws.well_potentials;
|
||||||
const auto& wpi = this->productivity_index_[well_index];
|
const auto& wpi = ws.productivity_index;
|
||||||
const auto& wv = this->wellRates(well_index);
|
const auto& wv = this->wellRates(well_index);
|
||||||
|
|
||||||
data::Well well;
|
data::Well well;
|
||||||
@@ -822,7 +820,7 @@ void WellState::shutWell(int well_index)
|
|||||||
this->wellrates_[well_index].assign(np, 0);
|
this->wellrates_[well_index].assign(np, 0);
|
||||||
|
|
||||||
auto& resv = this->well_reservoir_rates_[well_index];
|
auto& resv = this->well_reservoir_rates_[well_index];
|
||||||
auto& wpi = this->productivity_index_[well_index];
|
auto& wpi = ws.productivity_index;
|
||||||
|
|
||||||
for (int p = 0; p < np; ++p) {
|
for (int p = 0; p < np; ++p) {
|
||||||
resv[p] = 0.0;
|
resv[p] = 0.0;
|
||||||
|
|||||||
@@ -178,14 +178,6 @@ public:
|
|||||||
return this->segment_state[wname];
|
return this->segment_state[wname];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<double>& productivityIndex(std::size_t well_index) {
|
|
||||||
return this->productivity_index_[well_index];
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<double>& productivityIndex(std::size_t well_index) const {
|
|
||||||
return this->productivity_index_[well_index];
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Comm>
|
template<class Comm>
|
||||||
void communicateGroupRates(const Comm& comm);
|
void communicateGroupRates(const Comm& comm);
|
||||||
|
|
||||||
@@ -349,9 +341,6 @@ private:
|
|||||||
|
|
||||||
WellContainer<SegmentState> segment_state;
|
WellContainer<SegmentState> segment_state;
|
||||||
|
|
||||||
// Productivity Index
|
|
||||||
WellContainer<std::vector<double>> productivity_index_;
|
|
||||||
|
|
||||||
data::Segment
|
data::Segment
|
||||||
reportSegmentResults(const PhaseUsage& pu,
|
reportSegmentResults(const PhaseUsage& pu,
|
||||||
const int well_id,
|
const int well_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user