mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-01-08 23:43:02 -06:00
Merge pull request #3377 from joakim-hove/perf-data-injector
PerfData maintains producre / injector status
This commit is contained in:
commit
f9618faceb
@ -24,20 +24,22 @@ namespace Opm
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
PerfData::PerfData(std::size_t num_perf, const PhaseUsage& pu_arg):
|
PerfData::PerfData(std::size_t num_perf, bool injector_, const PhaseUsage& pu_arg):
|
||||||
pu(pu_arg),
|
pu(pu_arg),
|
||||||
|
injector(injector_),
|
||||||
pressure(num_perf),
|
pressure(num_perf),
|
||||||
rates(num_perf),
|
rates(num_perf),
|
||||||
phase_rates(num_perf * pu.num_phases),
|
phase_rates(num_perf * pu.num_phases),
|
||||||
solvent_rates(num_perf),
|
solvent_rates(num_perf),
|
||||||
polymer_rates(num_perf),
|
polymer_rates(num_perf),
|
||||||
brine_rates(num_perf),
|
brine_rates(num_perf),
|
||||||
prod_index(num_perf * pu.num_phases),
|
prod_index(num_perf * pu.num_phases)
|
||||||
water_throughput(num_perf),
|
|
||||||
skin_pressure(num_perf),
|
|
||||||
water_velocity(num_perf)
|
|
||||||
{
|
{
|
||||||
|
if (injector) {
|
||||||
|
this->water_throughput.resize(num_perf);
|
||||||
|
this->skin_pressure.resize(num_perf);
|
||||||
|
this->water_velocity.resize(num_perf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t PerfData::size() const {
|
std::size_t PerfData::size() const {
|
||||||
@ -48,6 +50,9 @@ bool PerfData::try_assign(const PerfData& other) {
|
|||||||
if (this->size() != other.size())
|
if (this->size() != other.size())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (this->injector != other.injector)
|
||||||
|
return false;
|
||||||
|
|
||||||
this->pressure = other.pressure;
|
this->pressure = other.pressure;
|
||||||
this->rates = other.rates;
|
this->rates = other.rates;
|
||||||
this->phase_rates = other.phase_rates;
|
this->phase_rates = other.phase_rates;
|
||||||
@ -58,7 +63,6 @@ bool PerfData::try_assign(const PerfData& other) {
|
|||||||
this->skin_pressure = other.skin_pressure;
|
this->skin_pressure = other.skin_pressure;
|
||||||
this->water_velocity = other.water_velocity;
|
this->water_velocity = other.water_velocity;
|
||||||
this->prod_index = other.prod_index;
|
this->prod_index = other.prod_index;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,9 +32,10 @@ class PerfData
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
PhaseUsage pu;
|
PhaseUsage pu;
|
||||||
|
bool injector;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PerfData(std::size_t num_perf, const PhaseUsage& pu);
|
PerfData(std::size_t num_perf, bool injector_, const PhaseUsage& pu);
|
||||||
std::size_t size() const;
|
std::size_t size() const;
|
||||||
bool try_assign(const PerfData& other);
|
bool try_assign(const PerfData& other);
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ void WellState::initSingleWell(const std::vector<double>& cellPressures,
|
|||||||
this->well_potentials_.add(well.name(), std::vector<double>(np, 0));
|
this->well_potentials_.add(well.name(), std::vector<double>(np, 0));
|
||||||
const int num_perf_this_well = well_info->communication().sum(well_perf_data_[w].size());
|
const int num_perf_this_well = well_info->communication().sum(well_perf_data_[w].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), this->phase_usage_});
|
this->perfdata.add(well.name(), PerfData{static_cast<std::size_t>(num_perf_this_well), well.isInjector(), this->phase_usage_});
|
||||||
this->bhp_.add(well.name(), 0.0);
|
this->bhp_.add(well.name(), 0.0);
|
||||||
this->thp_.add(well.name(), 0.0);
|
this->thp_.add(well.name(), 0.0);
|
||||||
this->productivity_index_.add(well.name(), std::vector<double>(np, 0));
|
this->productivity_index_.add(well.name(), std::vector<double>(np, 0));
|
||||||
|
@ -545,9 +545,10 @@ GAS
|
|||||||
)";
|
)";
|
||||||
Opm::PhaseUsage pu = Opm::phaseUsageFromDeck(Opm::Parser{}.parseString(deck_string));
|
Opm::PhaseUsage pu = Opm::phaseUsageFromDeck(Opm::Parser{}.parseString(deck_string));
|
||||||
|
|
||||||
Opm::PerfData pd1(3,pu);
|
Opm::PerfData pd1(3, true, pu);
|
||||||
Opm::PerfData pd2(3,pu);
|
Opm::PerfData pd2(3, true, pu);
|
||||||
Opm::PerfData pd3(2,pu);
|
Opm::PerfData pd3(2, true, pu);
|
||||||
|
Opm::PerfData pd4(3, false, pu);
|
||||||
|
|
||||||
|
|
||||||
for (std::size_t i = 0; i < 3; i++) {
|
for (std::size_t i = 0; i < 3; i++) {
|
||||||
@ -565,6 +566,8 @@ GAS
|
|||||||
for (std::size_t i = 0; i < 3; i++) {
|
for (std::size_t i = 0; i < 3; i++) {
|
||||||
BOOST_CHECK(pd1.pressure[i] == 10*(i+1));
|
BOOST_CHECK(pd1.pressure[i] == 10*(i+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_CHECK(!pd1.try_assign(pd4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user