mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Use well index for solvent perf rates
This commit is contained in:
@@ -629,7 +629,7 @@ namespace Opm
|
||||
|
||||
// Store the perforation phase flux for later usage.
|
||||
if (has_solvent && componentIdx == contiSolventEqIdx) {
|
||||
auto * perf_rate_solvent = &well_state.perfRateSolvent()[first_perf_];
|
||||
auto * perf_rate_solvent = well_state.perfRateSolvent(this->index_of_well_);
|
||||
perf_rate_solvent[perf] = cq_s[componentIdx].value();
|
||||
} else {
|
||||
perf_rates[perf*np + ebosCompIdxToFlowCompIdx(componentIdx)] = cq_s[componentIdx].value();
|
||||
@@ -828,7 +828,7 @@ namespace Opm
|
||||
const double dis_gas_frac = perf_dis_gas_rate / cq_s_zfrac_effective.value();
|
||||
cq_s_zfrac_effective *= extendEval(dis_gas_frac*intQuants.xVolume() + (1.0-dis_gas_frac)*intQuants.yVolume());
|
||||
}
|
||||
auto * perf_rate_solvent = &well_state.perfRateSolvent()[first_perf_];
|
||||
auto * perf_rate_solvent = well_state.perfRateSolvent(this->index_of_well_);
|
||||
perf_rate_solvent[perf] = cq_s_zfrac_effective.value();
|
||||
|
||||
cq_s_zfrac_effective *= well_efficiency_factor_;
|
||||
@@ -2114,7 +2114,7 @@ namespace Opm
|
||||
}
|
||||
|
||||
if constexpr (has_solvent) {
|
||||
const auto * solvent_perf_rates_state = &well_state.perfRateSolvent()[this->first_perf_];
|
||||
const auto * solvent_perf_rates_state = well_state.perfRateSolvent(this->index_of_well_);
|
||||
for (int perf = 0; perf < nperf; ++perf) {
|
||||
perfRates[perf * num_components_ + contiSolventEqIdx] = solvent_perf_rates_state[perf];
|
||||
}
|
||||
|
||||
@@ -464,10 +464,11 @@ void WellState::init(const std::vector<double>& cellPressures,
|
||||
if (pu.has_solvent) {
|
||||
if (global_num_perf_same)
|
||||
{
|
||||
int oldPerf_idx = oldPerf_idx_beg;
|
||||
for (int perf = connpos; perf < connpos + num_perf_this_well; ++perf, ++oldPerf_idx )
|
||||
auto * solvent_target = this->perfRateSolvent(newIndex);
|
||||
const auto * solvent_src = prevState->perfRateSolvent(oldIndex);
|
||||
for (int perf = 0; perf < num_perf_this_well; ++perf)
|
||||
{
|
||||
perfRateSolvent()[ perf ] = prevState->perfRateSolvent()[ oldPerf_idx ];
|
||||
solvent_target[perf] = solvent_src[perf];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -786,7 +787,7 @@ void WellState::reportConnections(data::Well& well,
|
||||
comp.rates.set( rt::brine, perf_brine_rate[local_comp_index]);
|
||||
}
|
||||
if ( pu.has_solvent ) {
|
||||
const auto * perf_solvent_rate = &this->perfRateSolvent()[wt.second[1]];
|
||||
const auto * perf_solvent_rate = this->perfRateSolvent(well_index);
|
||||
comp.rates.set( rt::solvent, perf_solvent_rate[local_comp_index] );
|
||||
}
|
||||
|
||||
@@ -955,7 +956,7 @@ WellState::calculateSegmentRates(const std::vector<std::vector<int>>& segment_in
|
||||
|
||||
double WellState::solventWellRate(const int w) const
|
||||
{
|
||||
const auto * perf_rates_solvent = &perfRateSolvent_[first_perf_index_[w]];
|
||||
const auto * perf_rates_solvent = this->perfRateSolvent(w);
|
||||
return parallel_well_info_[w]->sumPerfValues(perf_rates_solvent, perf_rates_solvent + this->numPerf(w));
|
||||
}
|
||||
|
||||
|
||||
@@ -153,8 +153,13 @@ public:
|
||||
}
|
||||
|
||||
/// One rate pr well connection.
|
||||
std::vector<double>& perfRateSolvent() { return perfRateSolvent_; }
|
||||
const std::vector<double>& perfRateSolvent() const { return perfRateSolvent_; }
|
||||
double * perfRateSolvent(std::size_t well_index) {
|
||||
return &perfRateSolvent_[this->first_perf_index_[well_index]];
|
||||
}
|
||||
|
||||
const double * perfRateSolvent(std::size_t well_index) const {
|
||||
return &perfRateSolvent_[this->first_perf_index_[well_index]];
|
||||
}
|
||||
|
||||
/// One rate pr well
|
||||
double solventWellRate(const int w) const;
|
||||
|
||||
Reference in New Issue
Block a user