[feature] make ILU relaxation and iteration a dynamic parameter.

This commit is contained in:
Robert Kloefkorn 2017-05-18 17:49:50 +02:00
parent a774128fb7
commit e4f1bf9955
2 changed files with 10 additions and 3 deletions

View File

@ -295,8 +295,9 @@ namespace Opm
template <class Operator>
std::unique_ptr<SeqPreconditioner> constructPrecond(Operator& opA, const Dune::Amg::SequentialInformation&) const
{
const double relax = 0.9;
std::unique_ptr<SeqPreconditioner> precond(new SeqPreconditioner(opA.getmat(), relax));
const double relax = parameters_.ilu_relaxation_;
const int iteration = parameters_.ilu_iteration_;
std::unique_ptr<SeqPreconditioner> precond(new SeqPreconditioner(opA.getmat(), iteration, relax));
return precond;
}
@ -308,7 +309,7 @@ namespace Opm
constructPrecond(Operator& opA, const Comm& comm) const
{
typedef std::unique_ptr<ParPreconditioner> Pointer;
const double relax = 0.9;
const double relax = parameters_.ilu_relaxation_;
return Pointer(new ParPreconditioner(opA.getmat(), comm, relax));
}
#endif

View File

@ -37,9 +37,11 @@ namespace Opm
struct NewtonIterationBlackoilInterleavedParameters
{
double linear_solver_reduction_;
double ilu_relaxation_;
int linear_solver_maxiter_;
int linear_solver_restart_;
int linear_solver_verbosity_;
int ilu_iteration_;
bool newton_use_gmres_;
bool require_full_sparsity_pattern_;
bool ignoreConvergenceFailure_;
@ -61,6 +63,8 @@ namespace Opm
require_full_sparsity_pattern_ = param.getDefault("require_full_sparsity_pattern", require_full_sparsity_pattern_);
ignoreConvergenceFailure_ = param.getDefault("linear_solver_ignoreconvergencefailure", ignoreConvergenceFailure_);
linear_solver_use_amg_ = param.getDefault("linear_solver_use_amg", linear_solver_use_amg_ );
ilu_relaxation_ = param.getDefault("ilu_relaxation", ilu_relaxation_ );
ilu_iteration_ = param.getDefault("ilu_iteration", ilu_iteration_ );
}
// set default values
@ -74,6 +78,8 @@ namespace Opm
require_full_sparsity_pattern_ = false;
ignoreConvergenceFailure_ = false;
linear_solver_use_amg_ = false;
ilu_iteration_ = 0;
ilu_relaxation_ = 0.9;
}
};