From 215af283e27395dcfb883850430dd0eff0368c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Fri, 22 Mar 2019 09:00:58 +0100 Subject: [PATCH] Stop interpolating between unsaturated/saturated regions. This is possible since the new interpolation ensures continuity up to the boundary between the regions. --- .../fluidsystems/BlackOilFluidSystem.hpp | 56 +++---------------- 1 file changed, 8 insertions(+), 48 deletions(-) diff --git a/opm/material/fluidsystems/BlackOilFluidSystem.hpp b/opm/material/fluidsystems/BlackOilFluidSystem.hpp index c3d6af910..a55690fed 100644 --- a/opm/material/fluidsystems/BlackOilFluidSystem.hpp +++ b/opm/material/fluidsystems/BlackOilFluidSystem.hpp @@ -724,20 +724,10 @@ public: if (fluidState.saturation(gasPhaseIdx) > 0.0 && Rs >= (1.0 - 1e-10)*oilPvt_->saturatedGasDissolutionFactor(regionIdx, Opm::scalarValue(T), Opm::scalarValue(p))) { - if (fluidState.saturation(gasPhaseIdx) < 1e-4) { - // here comes the relatively expensive case: first calculate and then - // interpolate between the saturated and undersaturated quantities to - // avoid a discontinuity - const auto& alpha = Opm::decay(fluidState.saturation(gasPhaseIdx))/1e-4; - const auto& bSat = oilPvt_->saturatedInverseFormationVolumeFactor(regionIdx, T, p); - const auto& bUndersat = oilPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rs); - return alpha*bSat + (1.0 - alpha)*bUndersat; - } - return oilPvt_->saturatedInverseFormationVolumeFactor(regionIdx, T, p); + } else { + return oilPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rs); } - - return oilPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rs); } const LhsEval Rs(0.0); @@ -749,20 +739,10 @@ public: if (fluidState.saturation(oilPhaseIdx) > 0.0 && Rv >= (1.0 - 1e-10)*gasPvt_->saturatedOilVaporizationFactor(regionIdx, Opm::scalarValue(T), Opm::scalarValue(p))) { - if (fluidState.saturation(oilPhaseIdx) < 1e-4) { - // here comes the relatively expensive case: first calculate and then - // interpolate between the saturated and undersaturated quantities to - // avoid a discontinuity - const auto& alpha = Opm::decay(fluidState.saturation(oilPhaseIdx))/1e-4; - const auto& bSat = gasPvt_->saturatedInverseFormationVolumeFactor(regionIdx, T, p); - const auto& bUndersat = gasPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rv); - return alpha*bSat + (1.0 - alpha)*bUndersat; - } - return gasPvt_->saturatedInverseFormationVolumeFactor(regionIdx, T, p); + } else { + return gasPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rv); } - - return gasPvt_->inverseFormationVolumeFactor(regionIdx, T, p, Rv); } const LhsEval Rv(0.0); @@ -941,20 +921,10 @@ public: if (fluidState.saturation(gasPhaseIdx) > 0.0 && Rs >= (1.0 - 1e-10)*oilPvt_->saturatedGasDissolutionFactor(regionIdx, Opm::scalarValue(T), Opm::scalarValue(p))) { - if (fluidState.saturation(gasPhaseIdx) < 1e-4) { - // here comes the relatively expensive case: first calculate and then - // interpolate between the saturated and undersaturated quantities to - // avoid a discontinuity - const auto& alpha = Opm::decay(fluidState.saturation(gasPhaseIdx))/1e-4; - const auto& muSat = oilPvt_->saturatedViscosity(regionIdx, T, p); - const auto& muUndersat = oilPvt_->viscosity(regionIdx, T, p, Rs); - return alpha*muSat + (1.0 - alpha)*muUndersat; - } - return oilPvt_->saturatedViscosity(regionIdx, T, p); + } else { + return oilPvt_->viscosity(regionIdx, T, p, Rs); } - - return oilPvt_->viscosity(regionIdx, T, p, Rs); } const LhsEval Rs(0.0); @@ -967,20 +937,10 @@ public: if (fluidState.saturation(oilPhaseIdx) > 0.0 && Rv >= (1.0 - 1e-10)*gasPvt_->saturatedOilVaporizationFactor(regionIdx, Opm::scalarValue(T), Opm::scalarValue(p))) { - if (fluidState.saturation(oilPhaseIdx) < 1e-4) { - // here comes the relatively expensive case: first calculate and then - // interpolate between the saturated and undersaturated quantities to - // avoid a discontinuity - const auto& alpha = Opm::decay(fluidState.saturation(oilPhaseIdx))/1e-4; - const auto& muSat = gasPvt_->saturatedViscosity(regionIdx, T, p); - const auto& muUndersat = gasPvt_->viscosity(regionIdx, T, p, Rv); - return alpha*muSat + (1.0 - alpha)*muUndersat; - } - return gasPvt_->saturatedViscosity(regionIdx, T, p); + } else { + return gasPvt_->viscosity(regionIdx, T, p, Rv); } - - return gasPvt_->viscosity(regionIdx, T, p, Rv); } const LhsEval Rv(0.0);