Currectly handling GOC below and WOC above the reservoir The phase pressure of water and gas is set to inf when WOC and GOC is above and below the reservoir. This make sure the minimum saturation values are picked for these cases.

This commit is contained in:
Tor Harald Sandve 2014-08-27 09:46:14 +02:00 committed by Andreas Lauser
parent a6b85d28a4
commit 11ac3d1ccd

View File

@ -394,14 +394,12 @@ namespace Opm
assign(G, opress, z0, cells, press); assign(G, opress, z0, cells, press);
// Default pressure at WOC and GOC to -inf
po_woc = -std::numeric_limits<double>::max();
po_goc = -std::numeric_limits<double>::max();
const double woc = reg.zwoc(); const double woc = reg.zwoc();
// Compute Oil pressure at WOC, // Compute Oil pressure at WOC,
// if WOC is within the reservoir. if ( woc > span[1] ) { po_woc = std::numeric_limits<double>::max(); } // WOC above reservoir (model is entirely water filled)
if ( ( woc > span[0] ) && ( woc < span[1] ) ){ else if ( woc < span[0] ) { po_woc = -std::numeric_limits<double>::max(); } // WOC below reservoir
else{
// if WOC is within the reservoir.
if (z0 > woc) { po_woc = opress[0](woc); } // WOC above datum if (z0 > woc) { po_woc = opress[0](woc); } // WOC above datum
else if (z0 < woc) { po_woc = opress[1](woc); } // WOC below datum else if (z0 < woc) { po_woc = opress[1](woc); } // WOC below datum
else { po_woc = p0; } // WOC *at* datum else { po_woc = p0; } // WOC *at* datum
@ -409,8 +407,10 @@ namespace Opm
const double goc = reg.zgoc(); const double goc = reg.zgoc();
// Compute Oil pressure at GOC, // Compute Oil pressure at GOC,
// if GOC is within the reservoir. if ( goc > span[1] ) { po_goc = -std::numeric_limits<double>::max(); } // GOC above reservoir
if ( ( goc > span[0] ) && ( goc < span[1] ) ){ else if ( goc < span[0] ) { po_goc = std::numeric_limits<double>::max(); } // GOC below reservoir (model is entirely gas filled)
else{
// if GOC is within the reservoir.
if (z0 > goc) { po_goc = opress[0](goc); } // GOC above datum if (z0 > goc) { po_goc = opress[0](goc); } // GOC above datum
else if (z0 < goc) { po_goc = opress[1](goc); } // GOC below datum else if (z0 < goc) { po_goc = opress[1](goc); } // GOC below datum
else { po_goc = p0; } // GOC *at* datum else { po_goc = p0; } // GOC *at* datum
@ -484,9 +484,9 @@ namespace Opm
const int wix = PhaseIndex::water(pu); const int wix = PhaseIndex::water(pu);
// If woc is above or below the reservoar, // If woc is above or below the reservoar,
// po_woc is -inf and the water pressure // po_woc is set to inf and -inf, respectivly
// is set to -inf. // and so is the water pressure
if ( po_woc > 0 ){ if ( std::abs(po_woc) < std::numeric_limits<double>::max() ){
PhasePressure::water(G, reg, span, grav, po_woc, PhasePressure::water(G, reg, span, grav, po_woc,
cells, press[ wix ]); cells, press[ wix ]);
} else { } else {
@ -498,10 +498,11 @@ namespace Opm
if (PhaseUsed::gas(pu)) { if (PhaseUsed::gas(pu)) {
const int gix = PhaseIndex::gas(pu); const int gix = PhaseIndex::gas(pu);
// If woc is above or below the reservoar, // If goc is above or below the reservoar,
// po_woc is -inf and the water pressure // po_goc is set to -inf and inf, respectivly
// is set to -inf. // and so is the gas pressure
if (po_goc > 0){
if ( std::abs(po_goc) < std::numeric_limits<double>::max()){
PhasePressure::gas(G, reg, span, grav, po_goc, PhasePressure::gas(G, reg, span, grav, po_goc,
cells, press[ gix ]); cells, press[ gix ]);
} else { } else {