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;
64 bool drsdtActive(
int episodeIdx, std::size_t pvtRegionIdx)
const;
65 bool drvdtActive(
int episodeIdx, std::size_t pvtRegionIdx)
const;
66 bool drsdtConvective(
int episodeIdx, std::size_t pvtRegionIdx)
const;
70 Scalar
drsdtcon(
const unsigned elemIdx,
72 const int pvtRegionIdx)
const;
79 unsigned globalDofIdx,
81 const int pvtRegionIdx)
const;
88 const unsigned globalDofIdx,
90 const int pvtRegionIdx)
const;
92 void updateExplicitQuantities(
const int episodeIdx,
93 const Scalar timeStepSize);
95 void updateLastValues(
const unsigned elemIdx,
99 void updateMaxValues(
const int episodeIdx,
100 const Scalar timeStepSize);
102 template<
class Serializer>
103 void serializeOp(Serializer& serializer)
107 serializer(convectiveDrs_);
110 serializer(dRsDtOnlyFreeGas_);
113 template<
class IntensiveQuantities>
114 void update(
unsigned compressedDofIdx,
115 const IntensiveQuantities& iq,
116 const int episodeIdx,
117 const Scalar gravity,
120 const int pvtRegionIdx)
122 const auto& oilVaporizationControl = schedule_[episodeIdx].oilvap();
124 if (oilVaporizationControl.drsdtConvective(pvtRegionIdx)) {
129 const auto& fs = iq.fluidState();
131 const auto& temperature = (FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)) ?
132 getValue(fs.temperature(FluidSystem::waterPhaseIdx)) :
133 getValue(fs.temperature(FluidSystem::oilPhaseIdx));
134 const auto& pressure = (FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)) ?
135 getValue(fs.pressure(FluidSystem::waterPhaseIdx)) :
136 getValue(fs.pressure(FluidSystem::oilPhaseIdx));
137 const auto& pressuregas = getValue(fs.pressure(FluidSystem::gasPhaseIdx));
138 const auto& rs = (FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)) ?
142 const auto& salt = getValue(fs.saltSaturation());
144 this->updateConvectiveDRsDt_(compressedDofIdx,
149 getValue(fs.saturation(FluidSystem::gasPhaseIdx)),
150 getValue(iq.porosity()),
155 oilVaporizationControl.getMaxDRSDT(fs.pvtRegionIndex()),
156 oilVaporizationControl.getPsi(fs.pvtRegionIndex()),
157 oilVaporizationControl.getOmega(fs.pvtRegionIndex()),
158 fs.pvtRegionIndex());
161 if (oilVaporizationControl.drsdtActive(pvtRegionIdx)) {
162 const auto& fs = iq.fluidState();
164 using FluidState =
typename std::decay<
decltype(fs)>::type;
165 constexpr Scalar freeGasMinSaturation_ = 1e-7;
166 if (oilVaporizationControl.getOption(pvtRegionIdx) ||
167 fs.saturation(FluidSystem::gasPhaseIdx) > freeGasMinSaturation_) {
168 lastRs_[compressedDofIdx]
169 = ((FluidSystem::enableDissolvedGasInWater())) ?
170 BlackOil::template getRsw_<FluidSystem, FluidState, Scalar>(fs, iq.pvtRegionIndex()) :
171 BlackOil::template getRs_<FluidSystem, FluidState, Scalar>(fs, iq.pvtRegionIndex());
174 lastRs_[compressedDofIdx] = std::numeric_limits<Scalar>::infinity();
177 if (oilVaporizationControl.drvdtActive(pvtRegionIdx)) {
178 const auto& fs = iq.fluidState();
179 using FluidState =
typename std::decay<
decltype(fs)>::type;
180 lastRv_[compressedDofIdx]
181 = BlackOil::template getRv_<FluidSystem, FluidState, Scalar>(fs, iq.pvtRegionIndex());
186 void updateConvectiveDRsDt_(
const unsigned compressedDofIdx,
195 const Scalar gravity,
199 const Scalar omegainn,
200 const int pvtRegionIndex);
202 std::vector<Scalar> lastRv_;
203 std::vector<Scalar> maxDRv_;
205 std::vector<Scalar> convectiveDrs_;
206 std::vector<Scalar> lastRs_;
207 std::vector<Scalar> maxDRs_;
208 std::vector<bool> dRsDtOnlyFreeGas_;
210 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:272
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:246