ignore the CNV convergence criterion for the last few newton iterations

the cell based residual can cause problems for cells with
almost-singular shapes and/or small pore volume.
This commit is contained in:
Andreas Lauser 2017-06-09 13:41:34 +02:00
parent d284a657cf
commit e58fed9956
3 changed files with 10 additions and 1 deletions

View File

@ -975,7 +975,12 @@ namespace Opm {
residual_norms.push_back(CNV[compIdx]); 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_ ) if ( terminal_output_ )
{ {

View File

@ -52,6 +52,7 @@ namespace Opm
tolerance_well_control_ = param.getDefault("tolerance_well_control", tolerance_well_control_); tolerance_well_control_ = param.getDefault("tolerance_well_control", tolerance_well_control_);
maxSinglePrecisionTimeStep_ = unit::convert::from( maxSinglePrecisionTimeStep_ = unit::convert::from(
param.getDefault("max_single_precision_days", unit::convert::to( maxSinglePrecisionTimeStep_, unit::day) ), unit::day ); 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_); solve_welleq_initially_ = param.getDefault("solve_welleq_initially",solve_welleq_initially_);
update_equations_scaling_ = param.getDefault("update_equations_scaling", update_equations_scaling_); update_equations_scaling_ = param.getDefault("update_equations_scaling", update_equations_scaling_);
use_update_stabilization_ = param.getDefault("use_update_stabilization", use_update_stabilization_); use_update_stabilization_ = param.getDefault("use_update_stabilization", use_update_stabilization_);

View File

@ -56,6 +56,9 @@ namespace Opm
/// for solving for the Jacobian /// for solving for the Jacobian
double maxSinglePrecisionTimeStep_; double maxSinglePrecisionTimeStep_;
/// Maximum number of Newton iterations before we give up
int max_iter_;
/// Solve well equation initially /// Solve well equation initially
bool solve_welleq_initially_; bool solve_welleq_initially_;