30 template<
typename Scalar>
36 const std::vector<double>& residual_norms = nonlinear_solver->get_parameter_value(nonlinear_solver->residual_norms());
37 const std::vector<double>& solution_norms = nonlinear_solver->get_parameter_value(nonlinear_solver->solution_norms());
38 const std::vector<double>& solution_change_norms = nonlinear_solver->get_parameter_value(nonlinear_solver->solution_change_norms());
39 int residual_norms_count = residual_norms.size();
40 int solution_norms_count = solution_norms.size();
41 int solution_change_norms_count = solution_change_norms.size();
43 double initial_residual_norm = residual_norms[0];
44 double current_residual_norm = residual_norms.back();
45 double previous_residual_norm = iteration == 1 ? current_residual_norm : residual_norms[residual_norms_count - 2];
47 double initial_solution_norm = solution_norms[0];
48 double previous_solution_norm = solution_norms[solution_norms_count - 2];
49 double current_solution_norm = solution_norms.back();
50 double current_solution_change_norm = solution_change_norms.back();
59 convergence_decision_value[0] = ((previous_residual_norm - current_residual_norm) / previous_residual_norm);
60 convergence_decision_value[1] = (current_residual_norm / initial_residual_norm);
61 convergence_decision_value[2] = (current_residual_norm / previous_residual_norm);
62 convergence_decision_value[3] = current_residual_norm;
63 convergence_decision_value[4] = current_solution_change_norm;
64 convergence_decision_value[5] = (current_solution_change_norm / previous_solution_norm);
71 if (i == 1 && iteration == 1)
79 bool converged_this_tolerance = (convergence_decision_value[i] < nonlinear_solver->
tolerance[i]);
81 converged = converged && converged_this_tolerance;
83 if (converged_this_tolerance)
General namespace for the Hermes library.
bool tolerance_set[NonlinearConvergenceMeasurementTypeCount]
info about set tolerances.
int get_current_iteration_number()
Shortcut method for getting the current iteration.
static bool converged(NonlinearMatrixSolver< Scalar > *newtonSolver)
Convergence measurement function - returns converged true/false.
Newton's method for algebraic equations.
Base class for defining interface for nonlinear solvers.
nonlinear_convergence_measurement.
bool handleMultipleTolerancesAnd
double tolerance[NonlinearConvergenceMeasurementTypeCount]
Tolerances for all NonlinearConvergenceMeasurementType numbered sequentially as the enum NonlinearCon...
const int NonlinearConvergenceMeasurementTypeCount