introducing tolerance_pressure_ms_wells for pressure equations

for the multisegment wells. More detailedly, we should distinguish the
rate control equations, bhp control equations and ordinary pressure
equations.
This commit is contained in:
Kai Bao 2017-10-03 15:23:38 +02:00
parent 92abdc4f23
commit 6fb459a797
3 changed files with 7 additions and 2 deletions

View File

@ -50,6 +50,7 @@ namespace Opm
tolerance_cnv_ = param.getDefault("tolerance_cnv", tolerance_cnv_); tolerance_cnv_ = param.getDefault("tolerance_cnv", tolerance_cnv_);
tolerance_wells_ = param.getDefault("tolerance_wells", tolerance_wells_ ); tolerance_wells_ = param.getDefault("tolerance_wells", tolerance_wells_ );
tolerance_well_control_ = param.getDefault("tolerance_well_control", tolerance_well_control_); tolerance_well_control_ = param.getDefault("tolerance_well_control", tolerance_well_control_);
tolerance_pressure_ms_wells_ = param.getDefault("tolerance_pressure_ms_wells", tolerance_pressure_ms_wells_);
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_strict_iter_ = param.getDefault("max_strict_iter",8); max_strict_iter_ = param.getDefault("max_strict_iter",8);
@ -76,6 +77,7 @@ namespace Opm
tolerance_cnv_ = 1.0e-2; tolerance_cnv_ = 1.0e-2;
tolerance_wells_ = 1.0e-4; tolerance_wells_ = 1.0e-4;
tolerance_well_control_ = 1.0e-7; tolerance_well_control_ = 1.0e-7;
tolerance_pressure_ms_wells_ = 100.0;
maxSinglePrecisionTimeStep_ = unit::convert::from( 20.0, unit::day ); maxSinglePrecisionTimeStep_ = unit::convert::from( 20.0, unit::day );
solve_welleq_initially_ = true; solve_welleq_initially_ = true;
update_equations_scaling_ = false; update_equations_scaling_ = false;

View File

@ -51,6 +51,8 @@ namespace Opm
/// Tolerance for the well control equations /// Tolerance for the well control equations
// TODO: it might need to distinguish between rate control and pressure control later // TODO: it might need to distinguish between rate control and pressure control later
double tolerance_well_control_; double tolerance_well_control_;
/// Tolerance for the pressure equations for multisegment wells
double tolerance_pressure_ms_wells_;
/// Tolerance for time step in seconds where single precision can be used /// Tolerance for time step in seconds where single precision can be used
/// for solving for the Jacobian /// for solving for the Jacobian

View File

@ -548,6 +548,8 @@ namespace Opm
} }
} }
} else { // pressure equation } else { // pressure equation
// TODO: we should distinguish the rate control equations, bhp control equations
// and the oridnary pressure equations
const double pressure_residal = residual[seg][eq_idx]; const double pressure_residal = residual[seg][eq_idx];
const std::string eq_name("Pressure"); const std::string eq_name("Pressure");
if (std::isnan(pressure_residal)) { if (std::isnan(pressure_residal)) {
@ -575,8 +577,7 @@ namespace Opm
report.converged = report.converged && (maximum_residual[comp_idx] < param.tolerance_wells_); report.converged = report.converged && (maximum_residual[comp_idx] < param.tolerance_wells_);
} }
// TODO: it is not good to use a hard-coded value. report.converged = report.converged && (maximum_residual[SPres] < param.tolerance_pressure_ms_wells_);
report.converged = report.converged && (maximum_residual[SPres] < 100.0);
} else { // abnormal values found and no need to check the convergence } else { // abnormal values found and no need to check the convergence
report.converged = false; report.converged = false;
} }