22#ifndef OPM_RATECONVERTER_HPP_HEADER_INCLUDED
23#define OPM_RATECONVERTER_HPP_HEADER_INCLUDED
25#include <opm/core/props/BlackoilPhases.hpp>
26#include <opm/grid/utility/RegionMapping.hpp>
27#include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp>
28#include <opm/simulators/wells/RegionAttributeHelpers.hpp>
30#include <opm/simulators/utils/ParallelCommunication.hpp>
32#include <dune/grid/common/gridenums.hh>
33#include <dune/grid/common/rangegenerators.hh>
37#include <unordered_map>
52 namespace RateConverter {
69 template <
class Flu
idSystem,
class Region>
82 , attr_ (rmap_, Attributes())
93 template <
typename ElementContext,
class EbosSimulator>
98 for (
const auto&
reg : rmap_.activeRegions()) {
99 auto&
ra = attr_.attributes(
reg);
101 ra.temperature = 0.0;
105 ra.saltConcentration = 0.0;
116 for (
const auto&
reg : rmap_.activeRegions()) {
125 OPM_BEGIN_PARALLEL_TRY_CATCH();
128 elemCtx.updatePrimaryIntensiveQuantities(0);
139 const auto& pu = phaseUsage_;
141 hydrocarbon -=
fs.saturation(FluidSystem::waterPhaseIdx).value();
165 if (FluidSystem::enableDissolvedGasInWater()) {
168 if (FluidSystem::enableVaporizedWater()) {
181 attr.pressure +=
fs.pressure(FluidSystem::oilPhaseIdx).value() *
pv_cell;
182 attr.temperature +=
fs.temperature(FluidSystem::oilPhaseIdx).value() *
pv_cell;
184 attr.pressure +=
fs.pressure(FluidSystem::gasPhaseIdx).value() *
pv_cell;
185 attr.temperature +=
fs.temperature(FluidSystem::gasPhaseIdx).value() *
pv_cell;
188 attr.pressure +=
fs.pressure(FluidSystem::waterPhaseIdx).value() *
pv_cell;
189 attr.temperature +=
fs.temperature(FluidSystem::waterPhaseIdx).value() *
pv_cell;
191 attr.saltConcentration +=
fs.saltConcentration().value() *
pv_cell;
192 if (FluidSystem::enableDissolvedGasInWater()) {
195 if (FluidSystem::enableVaporizedWater()) {
201 OPM_END_PARALLEL_TRY_CATCH(
"SurfaceToReservoirVoidage::defineState() failed: ",
simulator.vanguard().grid().comm());
242 template <
class Coeff>
246 template <
class Coeff ,
class Rates>
250 template <
class Coeff>
259 const double saltConcentration,
262 template <
class Coeff>
288 template <
class Rates>
290 const int pvtRegionIdx,
291 const Rates& surface_rates,
328 template <
typename SurfaceRates,
typename Vo
idageRates>
336 const double saltConcentration,
340 template <
class Rates>
341 std::pair<double, double>
342 inferDissolvedVaporisedRatio(
const double rsMax,
344 const Rates& surface_rates)
const;
358 template <
class SolventModule>
362 const auto&
ra = attr_.attributes(
r);
363 const double p =
ra.pressure;
364 const double T =
ra.temperature;
365 const auto&
solventPvt = SolventModule::solventPvt();
366 const double bs =
solventPvt.inverseFormationVolumeFactor(pvtRegionIdx, T,
p);
388 , temperature(data[1])
394 , saltConcentration(data[7])
397 Attributes(
const Attributes& rhs)
400 this->data = rhs.data;
403 Attributes& operator=(
const Attributes& rhs)
405 this->data = rhs.data;
409 std::array<double,8> data;
417 double& saltConcentration;
420 void sumRates(std::unordered_map<RegionId,Attributes>& attributes_hpv,
421 std::unordered_map<RegionId,Attributes>& attributes_pv,
422 Parallel::Communication comm);
424 RegionAttributeHelpers::RegionAttributes<RegionId, Attributes> attr_;
Definition AquiferInterface.hpp:35
Convert component rates at surface conditions to phase (voidage) rates at reservoir conditions.
Definition RateConverter.hpp:70
SurfaceToReservoirVoidage(const PhaseUsage &phaseUsage, const Region ®ion)
Constructor.
Definition RateConverter.hpp:78
void calcCoeffSolvent(const RegionId r, const int pvtRegionIdx, double &coeff) const
Compute coefficients for surface-to-reservoir voidage conversion for solvent.
Definition RateConverter.hpp:360
void calcReservoirVoidageRates(const RegionId r, const int pvtRegionIdx, const Rates &surface_rates, Rates &voidage_rates) const
Convert surface volume flow rates to reservoir voidage flow rates.
Definition RateConverter.cpp:332
void calcCoeff(const RegionId r, const int pvtRegionIdx, Coeff &coeff) const
Compute coefficients for surface-to-reservoir voidage conversion.
Definition RateConverter.cpp:129
typename RegionMapping< Region >::RegionId RegionId
Region identifier.
Definition RateConverter.hpp:213
void defineState(const EbosSimulator &simulator)
Compute pore volume averaged hydrocarbon state pressure, rs and rv.
Definition RateConverter.hpp:94
bool water(const PhaseUsage &pu)
Active water predicate.
Definition RegionAttributeHelpers.hpp:308
bool oil(const PhaseUsage &pu)
Active oil predicate.
Definition RegionAttributeHelpers.hpp:321
bool gas(const PhaseUsage &pu)
Active gas predicate.
Definition RegionAttributeHelpers.hpp:334
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition BlackoilPhases.hpp:27
PhaseUsage phaseUsage(const Phases &phases)
Determine the active phases.
Definition phaseUsageFromDeck.cpp:37
Definition BlackoilPhases.hpp:46