From 1fe610ef5a7d0053f84c5c3735dc241bd27fb6dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Thu, 27 Oct 2016 11:02:04 +0200 Subject: [PATCH] Bugfix: properly handle two-phase cases. Errors were found in FIP handling and output. --- opm/autodiff/BlackoilModelBase_impl.hpp | 10 ++++++---- .../SimulatorFullyImplicitBlackoilOutput.hpp | 20 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 692ded2b6..cfd777df9 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -2413,10 +2413,12 @@ namespace detail { { //Accumulate phases for each region for (int phase = 0; phase < maxnp; ++phase) { - for (int c = 0; c < nc; ++c) { - const int region = fipnum[c] - 1; - if (region != -1) { - values[region][phase] += sd_.fip[phase][c]; + if (active_[ phase ]) { + for (int c = 0; c < nc; ++c) { + const int region = fipnum[c] - 1; + if (region != -1) { + values[region][phase] += sd_.fip[phase][c]; + } } } } diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp index 713ef9cef..4348b9a26 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp @@ -691,24 +691,26 @@ namespace Opm data::TargetType::SUMMARY ); } if (liquid_active) { + const ADB::V& oipl = sd.fip[Model::SimulatorData::FIP_LIQUID]; + const ADB::V& oipg = vapour_active ? sd.fip[Model::SimulatorData::FIP_VAPORIZED_OIL] : ADB::V(); + const ADB::V& oip = vapour_active ? oipl + oipg : oipl; + //Oil in place (liquid phase only) if (hasFRBKeyword(summaryConfig, "OIPL")) { output.insert("OIPL", Opm::UnitSystem::measure::volume, - adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_LIQUID]), + adbVToDoubleVector(oipl), data::TargetType::SUMMARY ); } //Oil in place (gas phase only) if (hasFRBKeyword(summaryConfig, "OIPG")) { output.insert("OIPG", Opm::UnitSystem::measure::volume, - adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_VAPORIZED_OIL]), + adbVToDoubleVector(oipg), data::TargetType::SUMMARY ); } // Oil in place (in liquid and gas phases) if (hasFRBKeyword(summaryConfig, "OIP")) { - ADB::V oip = sd.fip[Model::SimulatorData::FIP_LIQUID] + - sd.fip[Model::SimulatorData::FIP_VAPORIZED_OIL]; output.insert("OIP", Opm::UnitSystem::measure::volume, adbVToDoubleVector(oip), @@ -716,24 +718,26 @@ namespace Opm } } if (vapour_active) { + const ADB::V& gipg = sd.fip[Model::SimulatorData::FIP_VAPOUR]; + const ADB::V& gipl = liquid_active ? sd.fip[Model::SimulatorData::FIP_DISSOLVED_GAS] : ADB::V(); + const ADB::V& gip = liquid_active ? gipg + gipl : gipg; + // Gas in place (gas phase only) if (hasFRBKeyword(summaryConfig, "GIPG")) { output.insert("GIPG", Opm::UnitSystem::measure::volume, - adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_VAPOUR]), + adbVToDoubleVector(gipg), data::TargetType::SUMMARY ); } // Gas in place (liquid phase only) if (hasFRBKeyword(summaryConfig, "GIPL")) { output.insert("GIPL", Opm::UnitSystem::measure::volume, - adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_DISSOLVED_GAS]), + adbVToDoubleVector(gipl), data::TargetType::SUMMARY ); } // Gas in place (in both liquid and gas phases) if (hasFRBKeyword(summaryConfig, "GIP")) { - ADB::V gip = sd.fip[Model::SimulatorData::FIP_VAPOUR] + - sd.fip[Model::SimulatorData::FIP_DISSOLVED_GAS]; output.insert("GIP", Opm::UnitSystem::measure::volume, adbVToDoubleVector(gip),