Bugfix: properly handle two-phase cases.

Errors were found in FIP handling and output.
This commit is contained in:
Atgeirr Flø Rasmussen 2016-10-27 11:02:04 +02:00
parent dbf902e704
commit 1fe610ef5a
2 changed files with 18 additions and 12 deletions

View File

@ -2413,10 +2413,12 @@ namespace detail {
{ {
//Accumulate phases for each region //Accumulate phases for each region
for (int phase = 0; phase < maxnp; ++phase) { for (int phase = 0; phase < maxnp; ++phase) {
for (int c = 0; c < nc; ++c) { if (active_[ phase ]) {
const int region = fipnum[c] - 1; for (int c = 0; c < nc; ++c) {
if (region != -1) { const int region = fipnum[c] - 1;
values[region][phase] += sd_.fip[phase][c]; if (region != -1) {
values[region][phase] += sd_.fip[phase][c];
}
} }
} }
} }

View File

@ -691,24 +691,26 @@ namespace Opm
data::TargetType::SUMMARY ); data::TargetType::SUMMARY );
} }
if (liquid_active) { 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) //Oil in place (liquid phase only)
if (hasFRBKeyword(summaryConfig, "OIPL")) { if (hasFRBKeyword(summaryConfig, "OIPL")) {
output.insert("OIPL", output.insert("OIPL",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_LIQUID]), adbVToDoubleVector(oipl),
data::TargetType::SUMMARY ); data::TargetType::SUMMARY );
} }
//Oil in place (gas phase only) //Oil in place (gas phase only)
if (hasFRBKeyword(summaryConfig, "OIPG")) { if (hasFRBKeyword(summaryConfig, "OIPG")) {
output.insert("OIPG", output.insert("OIPG",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_VAPORIZED_OIL]), adbVToDoubleVector(oipg),
data::TargetType::SUMMARY ); data::TargetType::SUMMARY );
} }
// Oil in place (in liquid and gas phases) // Oil in place (in liquid and gas phases)
if (hasFRBKeyword(summaryConfig, "OIP")) { if (hasFRBKeyword(summaryConfig, "OIP")) {
ADB::V oip = sd.fip[Model::SimulatorData::FIP_LIQUID] +
sd.fip[Model::SimulatorData::FIP_VAPORIZED_OIL];
output.insert("OIP", output.insert("OIP",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(oip), adbVToDoubleVector(oip),
@ -716,24 +718,26 @@ namespace Opm
} }
} }
if (vapour_active) { 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) // Gas in place (gas phase only)
if (hasFRBKeyword(summaryConfig, "GIPG")) { if (hasFRBKeyword(summaryConfig, "GIPG")) {
output.insert("GIPG", output.insert("GIPG",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_VAPOUR]), adbVToDoubleVector(gipg),
data::TargetType::SUMMARY ); data::TargetType::SUMMARY );
} }
// Gas in place (liquid phase only) // Gas in place (liquid phase only)
if (hasFRBKeyword(summaryConfig, "GIPL")) { if (hasFRBKeyword(summaryConfig, "GIPL")) {
output.insert("GIPL", output.insert("GIPL",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(sd.fip[Model::SimulatorData::FIP_DISSOLVED_GAS]), adbVToDoubleVector(gipl),
data::TargetType::SUMMARY ); data::TargetType::SUMMARY );
} }
// Gas in place (in both liquid and gas phases) // Gas in place (in both liquid and gas phases)
if (hasFRBKeyword(summaryConfig, "GIP")) { if (hasFRBKeyword(summaryConfig, "GIP")) {
ADB::V gip = sd.fip[Model::SimulatorData::FIP_VAPOUR] +
sd.fip[Model::SimulatorData::FIP_DISSOLVED_GAS];
output.insert("GIP", output.insert("GIP",
Opm::UnitSystem::measure::volume, Opm::UnitSystem::measure::volume,
adbVToDoubleVector(gip), adbVToDoubleVector(gip),