136 enum { conti0EqIdx = Indices::conti0EqIdx };
137 enum { dimWorld = GridView::dimensionworld };
138 enum { waterPhaseIdx = FluidSystem::waterPhaseIdx };
139 enum { oilPhaseIdx = FluidSystem::oilPhaseIdx };
141 static constexpr unsigned contiEnergyEqIdx = Indices::contiEnergyEqIdx;
144 struct ConvectiveMixingModuleParam
146 std::vector<bool> active_;
147 std::vector<Scalar> Xhi_;
148 std::vector<Scalar> Psi_;
152 static void beginEpisode(
const EclipseState& eclState,
155 ConvectiveMixingModuleParam& info)
158 std::size_t
numRegions = eclState.runspec().tabdims().getNumPVTTables();
160 if (info.active_.empty()) {
165 for (std::size_t i = 0; i <
numRegions; ++i ) {
166 info.active_[i] =
control.drsdtConvective(i);
167 if (
control.drsdtConvective(i)) {
168 info.Xhi_[i] =
control.getMaxDRSDT(i);
169 info.Psi_[i] =
control.getPsi(i);
175 static void modifyAvgDensity(Evaluation&
rhoAvg,
179 const ConvectiveMixingModuleParam& info) {
181 if (info.active_.empty()) {
188 if (
phaseIdx == FluidSystem::gasPhaseIdx) {
192 const auto& liquidPhaseIdx =
193 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
194 ? FluidSystem::waterPhaseIdx
195 : FluidSystem::oilPhaseIdx;
198 const auto&
t_in =
intQuantsIn.fluidState().temperature(liquidPhaseIdx);
203 FluidSystem::phaseIsActive(waterPhaseIdx)
204 ? FluidSystem::waterPvt().inverseFormationVolumeFactor(
intQuantsIn.pvtRegionIndex(),
206 : FluidSystem::oilPvt().inverseFormationVolumeFactor(
intQuantsIn.pvtRegionIndex(),
210 FluidSystem::phaseIsActive(waterPhaseIdx)
211 ? FluidSystem::waterPvt().waterReferenceDensity(
intQuantsIn.pvtRegionIndex())
212 : FluidSystem::oilPvt().oilReferenceDensity(
intQuantsIn.pvtRegionIndex());
216 const auto t_ex = Toolbox::value(
intQuantsEx.fluidState().temperature(liquidPhaseIdx));
217 const auto p_ex = Toolbox::value(
intQuantsEx.fluidState().pressure(liquidPhaseIdx));
221 FluidSystem::phaseIsActive(waterPhaseIdx)
222 ? FluidSystem::waterPvt().inverseFormationVolumeFactor(
intQuantsEx.pvtRegionIndex(),
224 : FluidSystem::oilPvt().inverseFormationVolumeFactor(
intQuantsEx.pvtRegionIndex(),
228 FluidSystem::phaseIsActive(waterPhaseIdx)
229 ? FluidSystem::waterPvt().waterReferenceDensity(
intQuantsEx.pvtRegionIndex())
230 : FluidSystem::oilPvt().oilReferenceDensity(
intQuantsEx.pvtRegionIndex());
237 template <
class Context>
238 static void addConvectiveMixingFlux(RateVector&
flux,
239 const Context& elemCtx,
244 const auto& problem = elemCtx.problem();
245 const auto& stencil = elemCtx.stencil(
timeIdx);
255 Scalar faceArea =
scvf.area();
256 const Scalar
g = problem.gravity()[dimWorld - 1];
262 addConvectiveMixingFlux(
flux,
270 problem.moduleParams().convectiveMixingModuleParam);
284 const Scalar faceArea,
285 const ConvectiveMixingModuleParam& info)
287 if (info.active_.empty()) {
295 const auto& liquidPhaseIdx =
296 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
297 ? FluidSystem::waterPhaseIdx
298 : FluidSystem::oilPhaseIdx;
301 const auto&
t_in =
intQuantsIn.fluidState().temperature(liquidPhaseIdx);
307 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
308 ? FluidSystem::waterPvt().inverseFormationVolumeFactor(
intQuantsIn.pvtRegionIndex(),
310 : FluidSystem::oilPvt().inverseFormationVolumeFactor(
intQuantsIn.pvtRegionIndex(),
314 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
315 ? FluidSystem::waterPvt().waterReferenceDensity(
intQuantsIn.pvtRegionIndex())
316 : FluidSystem::oilPvt().oilReferenceDensity(
intQuantsIn.pvtRegionIndex());
321 rssat_in * FluidSystem::referenceDensity(FluidSystem::gasPhaseIdx,
330 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
331 ? FluidSystem::waterPvt().inverseFormationVolumeFactor(
intQuantsEx.pvtRegionIndex(),
333 : FluidSystem::oilPvt().inverseFormationVolumeFactor(
intQuantsEx.pvtRegionIndex(),
337 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
338 ? FluidSystem::waterPvt().waterReferenceDensity(
intQuantsEx.pvtRegionIndex())
339 : FluidSystem::oilPvt().oilReferenceDensity(
intQuantsEx.pvtRegionIndex());
344 rssat_ex * FluidSystem::referenceDensity(FluidSystem::gasPhaseIdx,
365 FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx)
366 ?
up.fluidState().Rsw()
367 :
up.fluidState().Rs();
369 const Evaluation&
transMult =
up.rockCompTransMultiplier();
370 const auto&
invB =
up.fluidState().invB(liquidPhaseIdx);
371 const auto&
visc =
up.fluidState().viscosity(liquidPhaseIdx);
378 unsigned activeGasCompIdx = FluidSystem::canonicalToActiveCompIdx(FluidSystem::gasCompIdx);
386 if constexpr (enableEnergy) {
387 const auto&
h =
up.fluidState().enthalpy(liquidPhaseIdx) *
388 FluidSystem::referenceDensity(FluidSystem::gasPhaseIdx,
up.pvtRegionIndex());
static void addConvectiveMixingFlux(RateVector &, const IntensiveQuantities &, const IntensiveQuantities &, const unsigned, const unsigned, const Scalar, const Scalar, const Scalar, const ConvectiveMixingModuleParam &)
Adds the convective mixing mass flux flux to the flux vector over a flux integration point.
Definition blackoilconvectivemixingmodule.hh:112
static void addConvectiveMixingFlux(RateVector &flux, const IntensiveQuantities &intQuantsIn, const IntensiveQuantities &intQuantsEx, const unsigned globalIndexIn, const unsigned globalIndexEx, const Scalar distZg, const Scalar trans, const Scalar faceArea, const ConvectiveMixingModuleParam &info)
Adds the convective mixing mass flux flux to the flux vector over a flux integration point.
Definition blackoilconvectivemixingmodule.hh:277
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:240
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:233