28 template<
typename Scalar>
34 template<
typename Scalar>
37 this->min_allowed_damping_coeff = 1E-4;
38 this->manual_damping =
false;
39 this->auto_damping_ratio = 2.0;
40 this->initial_auto_damping_factor = 1.0;
41 this->sufficient_improvement_factor = 0.95;
42 this->necessary_successful_steps_to_increase = 3;
44 this->sufficient_improvement_factor_jacobian = 1e-1;
45 this->max_steps_with_reused_jacobian = 3;
47 this->set_tolerance(1e-8, ResidualNormAbsolute);
50 template<
typename Scalar>
53 double residual_norm = this->get_parameter_value(this->p_residual_norms).back();
55 if (residual_norm > this->max_allowed_residual_norm)
56 return AboveMaxAllowedResidualNorm;
61 template<
typename Scalar>
64 double current_damping_factor = this->get_parameter_value(this->p_damping_factors).back();
66 double solution_change_norm = 0.;
67 for (
int i = 0; i < this->problem_size; i++)
69 solution_change_norm += std::pow(std::abs(linear_system_solution[i]), 2.);
70 this->sln_vector[i] += current_damping_factor * linear_system_solution[i];
72 return std::sqrt(solution_change_norm) * current_damping_factor;
General namespace for the Hermes library.
Newton's method for algebraic equations.
Namespace containing classes for vector / matrix operations.
Base class for defining interface for nonlinear solvers.
NonlinearConvergenceState
Nonlinear Convergence state.
virtual NonlinearConvergenceState get_convergence_state()
Find out the convergence state.
virtual NonlinearConvergenceState get_convergence_state()
Find out the convergence state.
virtual double update_solution_return_change_norm(Scalar *linear_system_solution)