mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
add gsatprod to group rates
This commit is contained in:
@@ -119,6 +119,12 @@ void GlobalWellInfo<Scalar>::clear()
|
||||
this->m_efficiency_scaling_factors.assign(this->name_map.size(), 1.0);
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
bool GlobalWellInfo<Scalar>::isRank0() const
|
||||
{
|
||||
return is_rank0_;
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
Scalar GlobalWellInfo<Scalar>::
|
||||
efficiency_scaling_factor(const std::string& wname) const
|
||||
|
||||
@@ -65,6 +65,7 @@ public:
|
||||
comm.sum( this->m_in_producing_group.data(), size);
|
||||
comm.sum( this->m_is_open.data(), size);
|
||||
comm.min( this->m_efficiency_scaling_factors.data(), size);
|
||||
is_rank0_ = (comm.rank() == 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,6 +81,7 @@ public:
|
||||
void update_efficiency_scaling_factor(std::size_t well_index, const Scalar efficiency_scaling_factor);
|
||||
Scalar efficiency_scaling_factor(const std::string& wname) const;
|
||||
void clear();
|
||||
bool isRank0() const;
|
||||
|
||||
private:
|
||||
std::vector<std::size_t> local_map; // local_index -> global_index
|
||||
@@ -89,6 +91,7 @@ private:
|
||||
std::vector<int> m_in_producing_group; // global_index -> int/bool
|
||||
std::vector<int> m_is_open; // global_index -> int/bool
|
||||
std::vector<Scalar> m_efficiency_scaling_factors; // global_index --> double
|
||||
bool is_rank0_{true};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <opm/input/eclipse/Schedule/Schedule.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/GConSump.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/GConSale.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/GSatProd.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/GPMaint.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/Group.hpp>
|
||||
#include <opm/input/eclipse/Schedule/Group/GuideRateConfig.hpp>
|
||||
@@ -97,6 +98,21 @@ namespace Opm {
|
||||
const auto& groupTmp = schedule.getGroup(groupName, reportStepIdx);
|
||||
const auto& gefac = groupTmp.getGroupEfficiencyFactor();
|
||||
rate += gefac * sumWellPhaseRates(res_rates, groupTmp, schedule, wellState, reportStepIdx, phasePos, injector);
|
||||
const auto& gsatprod = schedule[reportStepIdx].gsatprod.get();
|
||||
// only sum once
|
||||
if (wellState.isRank0() && !injector && gsatprod.has(groupName)) {
|
||||
const auto& gsatprod_rates = gsatprod.get(groupName);
|
||||
const auto& pu = wellState.phaseUsage();
|
||||
if (pu.phase_used[BlackoilPhases::Aqua] && pu.phase_pos[BlackoilPhases::Aqua] == phasePos) {
|
||||
rate += gsatprod_rates.water_rate;
|
||||
}
|
||||
if (pu.phase_used[BlackoilPhases::Liquid] && pu.phase_pos[BlackoilPhases::Liquid] == phasePos) {
|
||||
rate += gsatprod_rates.oil_rate;
|
||||
}
|
||||
if (pu.phase_used[BlackoilPhases::Vapour] && pu.phase_pos[BlackoilPhases::Vapour] == phasePos) {
|
||||
rate += gsatprod_rates.gas_rate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const std::string& wellName : group.wells()) {
|
||||
|
||||
@@ -260,6 +260,10 @@ public:
|
||||
|
||||
bool wellIsOwned(const std::string& wellName) const;
|
||||
|
||||
bool isRank0() const {
|
||||
return this->global_well_info.value().isRank0();
|
||||
}
|
||||
|
||||
void updateStatus(int well_index, WellStatus status);
|
||||
|
||||
void openWell(int well_index);
|
||||
|
||||
Reference in New Issue
Block a user