diff --git a/opm/autodiff/BlackoilModelEbos.hpp b/opm/autodiff/BlackoilModelEbos.hpp index 6b7d3383c..6b115a9a9 100644 --- a/opm/autodiff/BlackoilModelEbos.hpp +++ b/opm/autodiff/BlackoilModelEbos.hpp @@ -975,7 +975,12 @@ namespace Opm { residual_norms.push_back(CNV[compIdx]); } - const bool converged = converged_MB && converged_CNV && converged_Well; + bool converged = converged_MB && converged_Well; + + // do not care about the cell based residual in the last two Newton + // iterations + if (iteration < param_.max_iter_ - 2) + converged = converged && converged_CNV; if ( terminal_output_ ) { diff --git a/opm/autodiff/BlackoilModelParameters.cpp b/opm/autodiff/BlackoilModelParameters.cpp index 6ae955458..e33a4c4d2 100644 --- a/opm/autodiff/BlackoilModelParameters.cpp +++ b/opm/autodiff/BlackoilModelParameters.cpp @@ -52,6 +52,7 @@ namespace Opm tolerance_well_control_ = param.getDefault("tolerance_well_control", tolerance_well_control_); maxSinglePrecisionTimeStep_ = unit::convert::from( param.getDefault("max_single_precision_days", unit::convert::to( maxSinglePrecisionTimeStep_, unit::day) ), unit::day ); + max_iter_ = param.getDefault("max_iter",15); solve_welleq_initially_ = param.getDefault("solve_welleq_initially",solve_welleq_initially_); update_equations_scaling_ = param.getDefault("update_equations_scaling", update_equations_scaling_); use_update_stabilization_ = param.getDefault("use_update_stabilization", use_update_stabilization_); diff --git a/opm/autodiff/BlackoilModelParameters.hpp b/opm/autodiff/BlackoilModelParameters.hpp index 9f3427bb9..12260472a 100644 --- a/opm/autodiff/BlackoilModelParameters.hpp +++ b/opm/autodiff/BlackoilModelParameters.hpp @@ -56,6 +56,9 @@ namespace Opm /// for solving for the Jacobian double maxSinglePrecisionTimeStep_; + /// Maximum number of Newton iterations before we give up + int max_iter_; + /// Solve well equation initially bool solve_welleq_initially_;