Use well index for solvent perf rates

This commit is contained in:
Joakim Hove
2021-06-02 12:08:44 +02:00
parent a2195f367d
commit 739f6ad28a
3 changed files with 16 additions and 10 deletions

View File

@@ -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];
}

View File

@@ -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));
}

View File

@@ -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;