From 170607e60c2ba1b43023fabf6b67463e5fcb37c2 Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Mon, 5 Sep 2016 16:14:27 +0800 Subject: [PATCH] check if the phase is present. --- opm/autodiff/BlackoilModelBase_impl.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 7e1f7a2fc..0cbbd5772 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -2310,9 +2310,9 @@ namespace detail { const DataBlock s = Eigen::Map(& x.saturation()[0], nc, np); state.pressure = ADB::constant(Eigen::Map(& x.pressure()[0], nc, 1)); state.temperature = ADB::constant(Eigen::Map(& x.temperature()[0], nc, 1)); - state.saturation[Water] = ADB::constant(s.col(Water)); - state.saturation[Oil] = ADB::constant(s.col(Oil)); - state.saturation[Gas] = ADB::constant(s.col(Gas)); + state.saturation[Water] = active_[Water] ? ADB::constant(s.col(Water)) : ADB::null(); + state.saturation[Oil] = active_[Oil] ? ADB::constant(s.col(Oil)) : ADB::constant(V::Zero(nc)); + state.saturation[Gas] = active_[Gas] ? ADB::constant(s.col(Gas)) : ADB::constant(V::Zero(nc)); state.rs = ADB::constant(Eigen::Map(& x.gasoilratio()[0], nc, 1)); state.rv = ADB::constant(Eigen::Map(& x.rv()[0], nc, 1)); state.canonical_phase_pressures = computePressures(state.pressure, @@ -2357,10 +2357,11 @@ namespace detail { } // compute PAV and PORV or every regions. + const V hydrocarbon = state.saturation[Oil].value() + state.saturation[Gas].value(); for (int c = 0; c < nc; ++c) { if (fipnum[c] != 0) { - values[fipnum[c]-1][5] += pv[c] * (s.col(Gas)[c] + s.col(Oil)[c]); - values[fipnum[c]-1][6] += pv[c] * state.pressure.value()[c] * (s.col(Gas)[c] + s.col(Oil)[c]); + values[fipnum[c]-1][5] += pv[c] * hydrocarbon[c]; + values[fipnum[c]-1][6] += pv[c] * state.pressure.value()[c] * hydrocarbon[c]; } }