EclDefaultMaterial: use inconsistent saturations for the hysteresis update

with this, I got slightly better performance than the opm-core master
version if flow is tasked on simulating the full Norne deck. Be aware
that from the physical POV, this is wrong.
This commit is contained in:
Andreas Lauser 2015-08-13 21:18:07 +02:00
parent 83de8aceb1
commit 893538c9f3

View File

@ -327,18 +327,21 @@ public:
{ {
typedef MathToolbox<typename FluidState::Scalar> FsToolbox; typedef MathToolbox<typename FluidState::Scalar> FsToolbox;
Scalar Swco = params.Swl(); Scalar So = FsToolbox::value(fluidState.saturation(oilPhaseIdx));
Scalar Sw = FsToolbox::value(fluidState.saturation(waterPhaseIdx));
Scalar Sg = FsToolbox::value(fluidState.saturation(gasPhaseIdx)); Scalar Sg = FsToolbox::value(fluidState.saturation(gasPhaseIdx));
Sw = std::min(1.0, std::max(Swco, Sw));
Sg = std::min(1.0, std::max(0.0, Sg)); Sg = std::min(1.0, std::max(0.0, Sg));
Scalar Sw_ow = Sg + Sw; // FIXME: the saturations which are passed to update the hysteresis curves are
Scalar So_go = 1 - Sw_ow + Swco; // inconsistent with the ones used to calculate the relative permabilities. We do
// it like this anyway because (a) the saturation functions of opm-core do it
params.oilWaterParams().update(/*pcSw=*/Sw, /*krwSw=*/1 - Sg, /*krnSw=*/Sw_ow); // this way (b) the simulations seem to converge better (which is not too much
params.gasOilParams().update(/*pcSw=*/1 - Sg, /*krwSw=*/So_go, /*krnSw=*/1 - Sg); // surprising actually, because the time step does not start on a kink in the
// solution) and (c) the Eclipse 100 simulator may do the same.
//
// Though be aware that from a physical perspective this is definitively
// incorrect!
params.oilWaterParams().update(/*pcSw=*/1 - So, /*krwSw=*/1 - So, /*krn_Sw=*/1 - So);
params.gasOilParams().update(/*pcSw=*/1 - Sg, /*krwSw=*/1 - Sg, /*krn_Sw=*/1 - Sg);
} }
}; };
} // namespace Opm } // namespace Opm