Support Using Different Types for Surface and Reservoir Rates

Simplifies using pointers here.
This commit is contained in:
Bård Skaflestad 2022-10-18 18:17:01 +02:00
parent 3c31b7bafe
commit 7d9beb3506

View File

@ -422,18 +422,16 @@ namespace Opm {
* \param[out] voidage_rates Reservoir volume flow rates for all * \param[out] voidage_rates Reservoir volume flow rates for all
* active phases. * active phases.
*/ */
template <class Rates> template <typename SurfaceRates, typename VoidageRates>
void calcReservoirVoidageRates(const int pvtRegionIdx, void calcReservoirVoidageRates(const int pvtRegionIdx,
const double p, const double p,
const double rs, const double rs,
const double rv, const double rv,
const double T, const double T,
const double saltConcentration, const double saltConcentration,
const Rates& surface_rates, const SurfaceRates& surface_rates,
Rates& voidage_rates) const VoidageRates& voidage_rates) const
{ {
std::fill(voidage_rates.begin(), voidage_rates.end(), 0.0);
const auto& pu = this->phaseUsage_; const auto& pu = this->phaseUsage_;
const auto iw = RegionAttributeHelpers::PhasePos::water(pu); const auto iw = RegionAttributeHelpers::PhasePos::water(pu);
const auto io = RegionAttributeHelpers::PhasePos::oil (pu); const auto io = RegionAttributeHelpers::PhasePos::oil (pu);
@ -442,6 +440,8 @@ namespace Opm {
const auto [Rs, Rv] = this-> const auto [Rs, Rv] = this->
dissolvedVaporisedRatio(io, ig, rs, rv, surface_rates); dissolvedVaporisedRatio(io, ig, rs, rv, surface_rates);
std::fill_n(&voidage_rates[0], pu.num_phases, 0.0);
if (RegionAttributeHelpers::PhaseUsed::water(pu)) { if (RegionAttributeHelpers::PhaseUsed::water(pu)) {
// q[w]_r = q[w]_s / bw // q[w]_r = q[w]_s / bw
const auto bw = FluidSystem::waterPvt() const auto bw = FluidSystem::waterPvt()