48 using Scalar =
typename FluidSystem::Scalar;
58 void init(std::size_t numDof,
int episodeIdx,
const unsigned ntpvt);
60 bool drsdtActive(
int episodeIdx)
const;
61 bool drvdtActive(
int episodeIdx)
const;
62 bool drsdtConvective(
int episodeIdx)
const;
67 Scalar
drsdtcon(
const unsigned elemIdx,
69 const int pvtRegionIdx)
const;
76 unsigned globalDofIdx,
78 const int pvtRegionIdx)
const;
85 const unsigned globalDofIdx,
87 const int pvtRegionIdx)
const;
89 void updateExplicitQuantities(
const int episodeIdx,
90 const Scalar timeStepSize);
92 void updateLastValues(
const unsigned elemIdx,
96 void updateMaxValues(
const int episodeIdx,
97 const Scalar timeStepSize);
99 template<
class Serializer>
100 void serializeOp(Serializer& serializer)
104 serializer(convectiveDrs_);
107 serializer(dRsDtOnlyFreeGas_);
110 template<
class IntensiveQuantities>
111 void update(
unsigned compressedDofIdx,
112 const IntensiveQuantities& iq,
113 const int episodeIdx,
114 const Scalar gravity,
117 const int pvtRegionIdx,
118 const std::array<bool,3>& active)
124 const auto& fs = iq.fluidState();
125 this->updateConvectiveDRsDt_(compressedDofIdx,
126 getValue(fs.temperature(FluidSystem::oilPhaseIdx)),
127 getValue(fs.pressure(FluidSystem::oilPhaseIdx)),
129 getValue(fs.saturation(FluidSystem::oilPhaseIdx)),
130 getValue(iq.porosity()),
134 fs.pvtRegionIndex());
138 const auto& fs = iq.fluidState();
140 using FluidState =
typename std::decay<
decltype(fs)>::type;
142 const auto& oilVaporizationControl = schedule_[episodeIdx].oilvap();
143 constexpr Scalar freeGasMinSaturation_ = 1e-7;
144 if (oilVaporizationControl.getOption(pvtRegionIdx) ||
145 fs.saturation(FluidSystem::gasPhaseIdx) > freeGasMinSaturation_) {
146 lastRs_[compressedDofIdx]
147 = BlackOil::template getRs_<FluidSystem, FluidState, Scalar>(fs, iq.pvtRegionIndex());
150 lastRs_[compressedDofIdx] = std::numeric_limits<Scalar>::infinity();
154 const auto& fs = iq.fluidState();
155 using FluidState =
typename std::decay<
decltype(fs)>::type;
156 lastRv_[compressedDofIdx]
157 = BlackOil::template getRv_<FluidSystem, FluidState, Scalar>(fs, iq.pvtRegionIndex());
162 void updateConvectiveDRsDt_(
const unsigned compressedDofIdx,
170 const Scalar gravity,
171 const int pvtRegionIndex);
173 std::vector<Scalar> lastRv_;
174 std::vector<Scalar> maxDRv_;
176 std::vector<Scalar> convectiveDrs_;
177 std::vector<Scalar> lastRs_;
178 std::vector<Scalar> maxDRs_;
179 std::vector<bool> dRsDtOnlyFreeGas_;
181 const Schedule& schedule_;
Scalar maxOilVaporizationFactor(const unsigned timeIdx, const unsigned globalDofIdx, const int episodeIdx, const int pvtRegionIdx) const
Returns the maximum value of the oil vaporization factor at the current time for a given degree of fr...
Definition MixingRateControls.cpp:251
Scalar maxGasDissolutionFactor(unsigned timeIdx, unsigned globalDofIdx, const int episodeIdx, const int pvtRegionIdx) const
Returns the maximum value of the gas dissolution factor at the current time for a given degree of fre...
Definition MixingRateControls.cpp:225
Scalar drsdtcon(const unsigned elemIdx, int episodeIdx, const int pvtRegionIdx) const
Returns the dynamic drsdt convective mixing value.
Definition MixingRateControls.cpp:207