Merge pull request #4922 from bska/nldd-control-number-of-global-iterations

Make Number of Initial Global Iterations Configurable
This commit is contained in:
Atgeirr Flø Rasmussen 2023-10-11 10:35:58 +02:00 committed by GitHub
commit 05eccd37c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 6 deletions

View File

@ -369,13 +369,13 @@ namespace Opm {
convergence_reports_.back().report.reserve(11);
}
if (iteration == 0) {
return nonlinearIterationNewton(iteration, timer, nonlinear_solver);
if ((this->param_.nonlinear_solver_ != "nldd") ||
(iteration < this->param_.nldd_num_initial_newton_iter_))
{
return this->nonlinearIterationNewton(iteration, timer, nonlinear_solver);
}
if (param_.nonlinear_solver_ == "nldd") {
return nlddSolver_->nonlinearIterationNldd(iteration, timer, nonlinear_solver);
} else {
return nonlinearIterationNewton(iteration, timer, nonlinear_solver);
else {
return this->nlddSolver_->nonlinearIterationNldd(iteration, timer, nonlinear_solver);
}
}

View File

@ -208,6 +208,10 @@ struct LocalToleranceScalingCnv {
using type = UndefinedProperty;
};
template<class TypeTag, class MyTypeTag>
struct NlddNumInitialNewtonIter {
using type = UndefinedProperty;
};
template<class TypeTag, class MyTypeTag>
struct NumLocalDomains {
using type = UndefinedProperty;
};
@ -407,6 +411,11 @@ struct LocalToleranceScalingCnv<TypeTag, TTag::FlowModelParameters> {
static constexpr type value = 0.01;
};
template<class TypeTag>
struct NlddNumInitialNewtonIter<TypeTag, TTag::FlowModelParameters> {
using type = int;
static constexpr auto value = type{1};
};
template<class TypeTag>
struct NumLocalDomains<TypeTag, TTag::FlowModelParameters> {
using type = int;
static constexpr auto value = 0;
@ -558,6 +567,7 @@ namespace Opm
double local_tolerance_scaling_mb_;
double local_tolerance_scaling_cnv_;
int nldd_num_initial_newton_iter_{1};
int num_local_domains_{0};
double local_domain_partition_imbalance_{1.03};
std::string local_domain_partition_method_;
@ -612,6 +622,7 @@ namespace Opm
max_local_solve_iterations_ = EWOMS_GET_PARAM(TypeTag, int, MaxLocalSolveIterations);
local_tolerance_scaling_mb_ = EWOMS_GET_PARAM(TypeTag, double, LocalToleranceScalingMb);
local_tolerance_scaling_cnv_ = EWOMS_GET_PARAM(TypeTag, double, LocalToleranceScalingCnv);
nldd_num_initial_newton_iter_ = EWOMS_GET_PARAM(TypeTag, int, NlddNumInitialNewtonIter);
num_local_domains_ = EWOMS_GET_PARAM(TypeTag, int, NumLocalDomains);
local_domain_partition_imbalance_ = std::max(1.0, EWOMS_GET_PARAM(TypeTag, double, LocalDomainsPartitioningImbalance));
local_domain_partition_method_ = EWOMS_GET_PARAM(TypeTag, std::string, LocalDomainsPartitioningMethod);
@ -672,6 +683,7 @@ namespace Opm
EWOMS_REGISTER_PARAM(TypeTag, int, MaxLocalSolveIterations, "Max iterations for local solves with NLDD nonlinear solver.");
EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalToleranceScalingMb, "Set lower than 1.0 to use stricter convergence tolerance for local solves.");
EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalToleranceScalingCnv, "Set lower than 1.0 to use stricter convergence tolerance for local solves.");
EWOMS_REGISTER_PARAM(TypeTag, int, NlddNumInitialNewtonIter, "Number of initial global Newton iterations when running the NLDD nonlinear solver.");
EWOMS_REGISTER_PARAM(TypeTag, int, NumLocalDomains, "Number of local domains for NLDD nonlinear solver.");
EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalDomainsPartitioningImbalance, "Subdomain partitioning imbalance tolerance. 1.03 is 3 percent imbalance.");
EWOMS_REGISTER_PARAM(TypeTag, std::string, LocalDomainsPartitioningMethod, "Subdomain partitioning method. "