diff --git a/ebos/eclequilinitializer.hh b/ebos/eclequilinitializer.hh index 46f29e816..d5ed2dab2 100644 --- a/ebos/eclequilinitializer.hh +++ b/ebos/eclequilinitializer.hh @@ -69,6 +69,7 @@ class EclEquilInitializer typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; + typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; enum { numPhases = FluidSystem::numPhases }; enum { oilPhaseIdx = FluidSystem::oilPhaseIdx }; @@ -84,14 +85,18 @@ class EclEquilInitializer enum { enableTemperature = GET_PROP_VALUE(TypeTag, EnableTemperature) }; enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) }; +public: // NB: setting the enableEnergy argument to true enables storage of enthalpy and // internal energy! typedef Opm::BlackOilFluidState ScalarFluidState; + enableEnergy, + Indices::gasEnabled, + Indices::numPhases + > ScalarFluidState; + -public: template EclEquilInitializer(const Simulator& simulator, EclMaterialLawManager& materialLawManager) @@ -123,18 +128,18 @@ public: for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { if (FluidSystem::phaseIsActive(phaseIdx)) fluidState.setSaturation(phaseIdx, initialState.saturation()[phaseIdx][elemIdx]); - else + else if (Indices::numPhases == 3) fluidState.setSaturation(phaseIdx, 0.0); } if (FluidSystem::enableDissolvedGas()) fluidState.setRs(initialState.rs()[elemIdx]); - else + else if (Indices::gasEnabled) fluidState.setRs(0.0); if (FluidSystem::enableVaporizedOil()) fluidState.setRv(initialState.rv()[elemIdx]); - else + else if (Indices::gasEnabled) fluidState.setRv(0.0); @@ -143,8 +148,11 @@ public: fluidState.setTemperature(initialState.temperature()[elemIdx]); // set the phase pressures. - for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { + if (!FluidSystem::phaseIsActive(phaseIdx)) + continue; fluidState.setPressure(phaseIdx, initialState.press()[phaseIdx][elemIdx]); + } } } diff --git a/ebos/eclproblem.hh b/ebos/eclproblem.hh index c313a3a31..555fe7f8e 100644 --- a/ebos/eclproblem.hh +++ b/ebos/eclproblem.hh @@ -362,10 +362,7 @@ class EclProblem : public GET_PROP_TYPE(TypeTag, BaseProblem) typedef BlackOilSolventModule SolventModule; typedef BlackOilPolymerModule PolymerModule; - typedef Opm::BlackOilFluidState InitialFluidState; + typedef typename EclEquilInitializer::ScalarFluidState InitialFluidState; typedef Opm::MathToolbox Toolbox; typedef Dune::FieldMatrix DimMatrix;