From f2711be107230a80f6aa7653d7bf0a26064be403 Mon Sep 17 00:00:00 2001 From: hnil Date: Sun, 19 May 2019 20:40:27 +0200 Subject: [PATCH] Small changes to try to make onephase work --- .../EclMaterialLawManager.hpp | 14 ++++++--- .../EclMultiplexerMaterial.hpp | 29 +++++++++++++++++++ .../EclMultiplexerMaterialParams.hpp | 7 ++++- .../fluidsystems/BlackOilFluidSystem.hpp | 2 +- opm/material/thermal/EclThconrLaw.hpp | 11 ++++--- 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp b/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp index ec55a6fdb..e52e33e01 100644 --- a/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp +++ b/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp @@ -448,10 +448,11 @@ private: + (oilEnabled?1:0) + (waterEnabled?1:0); - if (numEnabled < 2) - throw std::runtime_error("At least two fluid phases must be enabled. (Is: "+std::to_string(numEnabled)+")"); - - if (numEnabled == 2) { + if (numEnabled == 0) { + throw std::runtime_error("At least one fluid phase must be enabled. (Is: "+std::to_string(numEnabled)+")"); + } else if (numEnabled == 1) { + threePhaseApproach_ = Opm::EclMultiplexerApproach::EclOnePhaseApproach; + } else if ( numEnabled == 2) { threePhaseApproach_ = Opm::EclTwoPhaseApproach; if (!gasEnabled) twoPhaseApproach_ = Opm::EclTwoPhaseOilWater; @@ -1051,6 +1052,11 @@ private: realParams.finalize(); break; } + + case EclOnePhaseApproach: { + // Nothing to do, no parameters. + break; + } } } diff --git a/opm/material/fluidmatrixinteractions/EclMultiplexerMaterial.hpp b/opm/material/fluidmatrixinteractions/EclMultiplexerMaterial.hpp index 710d930a8..b1d2938c9 100644 --- a/opm/material/fluidmatrixinteractions/EclMultiplexerMaterial.hpp +++ b/opm/material/fluidmatrixinteractions/EclMultiplexerMaterial.hpp @@ -155,6 +155,10 @@ public: params.template getRealParams(), fluidState); break; + + case EclOnePhaseApproach: + values[0] = 0.0; + break; } } @@ -188,6 +192,10 @@ public: TwoPhaseMaterial::oilWaterHysteresisParams(pcSwMdc, krnSwMdc, params.template getRealParams()); break; + + case EclOnePhaseApproach: + // Do nothing. + break; } } @@ -221,6 +229,10 @@ public: TwoPhaseMaterial::setOilWaterHysteresisParams(pcSwMdc, krnSwMdc, params.template getRealParams()); break; + + case EclOnePhaseApproach: + // Do nothing. + break; } } @@ -254,6 +266,10 @@ public: TwoPhaseMaterial::gasOilHysteresisParams(pcSwMdc, krnSwMdc, params.template getRealParams()); break; + + case EclOnePhaseApproach: + // Do nothing. + break; } } @@ -287,6 +303,10 @@ public: TwoPhaseMaterial::setGasOilHysteresisParams(pcSwMdc, krnSwMdc, params.template getRealParams()); break; + + case EclOnePhaseApproach: + // Do nothing. + break; } } @@ -407,7 +427,16 @@ public: params.template getRealParams(), fluidState); break; + + case EclOnePhaseApproach: + values[0] = 1.0; + break; + + default: + throw std::logic_error("Not implemented: relativePermeabilities() option for unknown EclMultiplexerApproach (=" + + std::to_string(params.approach()) + ")"); } + } /*! diff --git a/opm/material/fluidmatrixinteractions/EclMultiplexerMaterialParams.hpp b/opm/material/fluidmatrixinteractions/EclMultiplexerMaterialParams.hpp index a21d4eea1..41eb3cf8c 100644 --- a/opm/material/fluidmatrixinteractions/EclMultiplexerMaterialParams.hpp +++ b/opm/material/fluidmatrixinteractions/EclMultiplexerMaterialParams.hpp @@ -44,7 +44,8 @@ enum EclMultiplexerApproach { EclDefaultApproach, EclStone1Approach, EclStone2Approach, - EclTwoPhaseApproach + EclTwoPhaseApproach, + EclOnePhaseApproach }; /*! @@ -125,6 +126,10 @@ public: case EclTwoPhaseApproach: realParams_ = ParamPointerType(new TwoPhaseParams, Deleter< TwoPhaseParams > () ); break; + + case EclOnePhaseApproach: + // Do nothing, no parameters. + break; } } diff --git a/opm/material/fluidsystems/BlackOilFluidSystem.hpp b/opm/material/fluidsystems/BlackOilFluidSystem.hpp index 43604fb07..d087f0088 100644 --- a/opm/material/fluidsystems/BlackOilFluidSystem.hpp +++ b/opm/material/fluidsystems/BlackOilFluidSystem.hpp @@ -199,7 +199,7 @@ public: setReservoirTemperature(eclState.getTableManager().rtemp()); // this fluidsystem only supports two or three phases - assert(numActivePhases_ >= 2 && numActivePhases_ <= 3); + assert(numActivePhases_ >= 1 && numActivePhases_ <= 3); setEnableDissolvedGas(deck.hasKeyword("DISGAS")); setEnableVaporizedOil(deck.hasKeyword("VAPOIL")); diff --git a/opm/material/thermal/EclThconrLaw.hpp b/opm/material/thermal/EclThconrLaw.hpp index 731c68b62..5ef62edd8 100644 --- a/opm/material/thermal/EclThconrLaw.hpp +++ b/opm/material/thermal/EclThconrLaw.hpp @@ -57,11 +57,14 @@ public: { // THCONR + THCONSF approach. Scalar lambdaRef = params.referenceTotalThermalConductivity(); - Scalar alpha = params.dTotalThermalConductivity_dSg(); - static constexpr int gasPhaseIdx = FluidSystem::gasPhaseIdx; - const Evaluation& Sg = Opm::decay(fluidState.saturation(gasPhaseIdx)); - return lambdaRef*(1.0 - alpha*Sg); + if (FluidSystem::phaseIsActive(gasPhaseIdx)) { + Scalar alpha = params.dTotalThermalConductivity_dSg(); + const Evaluation& Sg = Opm::decay(fluidState.saturation(gasPhaseIdx)); + return lambdaRef*(1.0 - alpha*Sg); + } else { + return lambdaRef; + } } }; } // namespace Opm