diff --git a/opm/autodiff/BlackoilPropsAdFromDeck.cpp b/opm/autodiff/BlackoilPropsAdFromDeck.cpp index 823049700..787e80752 100644 --- a/opm/autodiff/BlackoilPropsAdFromDeck.cpp +++ b/opm/autodiff/BlackoilPropsAdFromDeck.cpp @@ -208,6 +208,7 @@ namespace Opm "Inconsistent number of phases in pvt data (" << phase_usage_.num_phases << ") and saturation-dependent function data (" << satprops_->numPhases() << ")."); } + vap_satmax_guard_ = 0.01; } //////////////////////////// @@ -1081,7 +1082,7 @@ namespace Opm const int n = cells.size(); V factor = V::Ones(n, 1); for (int i=0; i 0.01 && so[i] < satOilMax_[cells[i]]) { + if (satOilMax_[cells[i]] > vap_satmax_guard_ && so[i] < satOilMax_[cells[i]]) { factor[i] = std::pow(so[i]/satOilMax_[cells[i]], vap); } } @@ -1104,7 +1105,7 @@ namespace Opm V factor = V::Ones(n, 1); //V dfactor_dso = V::Zero(n, 1); TODO: Consider effect of complete jacobian (including so-derivatives) for (int i=0; i 0.01 && so.value()[i] < satOilMax_[cells[i]]) { + if (satOilMax_[cells[i]] > vap_satmax_guard_ && so.value()[i] < satOilMax_[cells[i]]) { factor[i] = std::pow(so.value()[i]/satOilMax_[cells[i]], vap); //dfactor_dso[i] = vap*std::pow(so.value()[i]/satOilMax_[cells[i]], vap-1.0)/satOilMax_[cells[i]]; } diff --git a/opm/autodiff/BlackoilPropsAdFromDeck.hpp b/opm/autodiff/BlackoilPropsAdFromDeck.hpp index 871cf0403..8042c4d4d 100644 --- a/opm/autodiff/BlackoilPropsAdFromDeck.hpp +++ b/opm/autodiff/BlackoilPropsAdFromDeck.hpp @@ -435,6 +435,7 @@ namespace Opm double vap1_; double vap2_; std::vector satOilMax_; + double vap_satmax_guard_; //Threshold value to promote stability }; } // namespace Opm