430 const PrimaryVariables& priVars = elemCtx.primaryVars(dofIdx,
timeIdx);
431 unsigned pvtRegionIdx = priVars.pvtRegionIndex();
432 auto& fs = asImp_().fluidState_;
434 zFraction_ = priVars.makeEvaluation(zFractionIdx,
timeIdx);
436 oilViscosity_ = ExtboModule::oilViscosity(pvtRegionIdx, fs.pressure(oilPhaseIdx), zFraction_);
437 gasViscosity_ = ExtboModule::gasViscosity(pvtRegionIdx, fs.pressure(gasPhaseIdx), zFraction_);
439 bo_ = ExtboModule::bo(pvtRegionIdx, fs.pressure(oilPhaseIdx), zFraction_);
440 bg_ = ExtboModule::bg(pvtRegionIdx, fs.pressure(gasPhaseIdx), zFraction_);
442 bz_ = ExtboModule::bg(pvtRegionIdx, fs.pressure(oilPhaseIdx), Evaluation{0.99});
444 if (FluidSystem::enableDissolvedGas())
445 rs_ = ExtboModule::rs(pvtRegionIdx, fs.pressure(oilPhaseIdx), zFraction_);
449 if (FluidSystem::enableVaporizedOil())
450 rv_ = ExtboModule::rv(pvtRegionIdx, fs.pressure(gasPhaseIdx), zFraction_);
454 xVolume_ = ExtboModule::xVolume(pvtRegionIdx, fs.pressure(oilPhaseIdx), zFraction_);
455 yVolume_ = ExtboModule::yVolume(pvtRegionIdx, fs.pressure(oilPhaseIdx), zFraction_);
457 Evaluation
pbub = fs.pressure(oilPhaseIdx);
459 if (priVars.primaryVarsMeaningWater() == PrimaryVariables::WaterMeaning::Sw) {
461 Scalar
sw = priVars.makeEvaluation(Indices::waterSwitchIdx,
timeIdx).value();
466 if (priVars.primaryVarsMeaningGas() == PrimaryVariables::GasMeaning::Rs) {
467 rs_ = priVars.makeEvaluation(Indices::compositionSwitchIdx,
timeIdx);
468 const Evaluation zLim = ExtboModule::zLim(pvtRegionIdx);
469 if (zFraction_ > zLim) {
470 pbub = ExtboModule::pbubRs(pvtRegionIdx, zLim, rs_);
472 pbub = ExtboModule::pbubRs(pvtRegionIdx, zFraction_, rs_);
474 bo_ = ExtboModule::bo(pvtRegionIdx,
pbub, zFraction_) + ExtboModule::oilCmp(pvtRegionIdx, zFraction_)*(fs.pressure(oilPhaseIdx)-
pbub);
476 xVolume_ = ExtboModule::xVolume(pvtRegionIdx,
pbub, zFraction_);
479 if (priVars.primaryVarsMeaningGas() == PrimaryVariables::GasMeaning::Rv) {
480 rv_ = priVars.makeEvaluation(Indices::compositionSwitchIdx,
timeIdx);
481 Evaluation
rvsat = ExtboModule::rv(pvtRegionIdx,
pbub, zFraction_);
482 bg_ = ExtboModule::bg(pvtRegionIdx,
pbub, zFraction_) + ExtboModule::gasCmp(pvtRegionIdx, zFraction_)*(rv_-
rvsat);
484 yVolume_ = ExtboModule::yVolume(pvtRegionIdx,
pbub, zFraction_);
495 const auto&
iq = asImp_();
496 auto& fs = asImp_().fluidState_;
498 unsigned pvtRegionIdx =
iq.pvtRegionIndex();
499 zRefDensity_ = ExtboModule::referenceDensity(pvtRegionIdx);
501 fs.setInvB(oilPhaseIdx, 1.0/bo_);
502 fs.setInvB(gasPhaseIdx, 1.0/bg_);
504 fs.setDensity(oilPhaseIdx,
506 *(FluidSystem::referenceDensity(oilPhaseIdx, pvtRegionIdx)
507 + (1.0-xVolume_)*fs.Rs()*FluidSystem::referenceDensity(gasPhaseIdx, pvtRegionIdx)
508 + xVolume_*fs.Rs()*zRefDensity_ ));
509 fs.setDensity(gasPhaseIdx,
511 *(FluidSystem::referenceDensity(gasPhaseIdx, pvtRegionIdx)*(1.0-yVolume_)+yVolume_*zRefDensity_
512 + FluidSystem::referenceDensity(oilPhaseIdx, pvtRegionIdx)*fs.Rv()));