8#include <kernel/solver/linesearch.hpp>
30 template<
typename Functional_,
typename Filter_>
39 typedef typename Functional_::DataType
DataType;
58 BaseClass(
"NR-LS", functional, filter, keep_iterates)
81 Functional_& functional, Filter_& filter) :
82 BaseClass(
"NR-LS", section_name, section, functional, filter)
94 return "Newton-Raphson-Linesearch";
157 Statistics::add_solver_expression(std::make_shared<ExpressionStartSolve>(this->
name()));
196 this->_fval_min = fval;
215 vec_sol.axpy(this->
_vec_pn, alpha);
256 template<
typename Functional_,
typename Filter_>
258 Functional_& functional, Filter_& filter,
bool keep_iterates =
false)
260 return std::make_shared<NewtonRaphsonLinesearch<Functional_, Filter_>>(functional, filter, keep_iterates);
281 template<
typename Functional_,
typename Filter_>
284 Functional_& functional, Filter_& filter)
286 return std::make_shared<NewtonRaphsonLinesearch<Functional_, Filter_>>(section_name, section, functional, filter);
A class organizing a tree of key-value pairs.
Helper class for iteration statistics collection.
Index get_num_iter() const
Returns number of performed iterations.
Status _status
current status of the solver
Index _num_iter
number of performed iterations
virtual void plot_summary() const
Plot a summary of the last solver run.
VectorType _vec_grad
Gradient vector.
Functional_ & _functional
The (nonlinear) functional.
VectorType _vec_initial_sol
Initial solution.
virtual void trim_func_grad(DataType &func)
Trims the function value and gradient according to some threshold.
virtual Status _startup(DataType &alpha, DataType &fval, DataType &delta, const VectorType &vec_sol, const VectorType &vec_dir)
Performs the startup of the iteration.
VectorType _vec_pn
descend direction vector, normalized for better numerical stability
DataType _fval_min
Functional functional value.
Filter_ & _filter
The filter to be applied to the functional's gradient.
DataType _alpha_min
Line search parameter.
VectorType _vec_tmp
temporary vector
virtual Status _check_convergence(const DataType fval, const DataType df, const DataType alpha)
Performs the line search convergence checks using the strong Wolfe conditions.
Newton Raphson linesearch.
NewtonRaphsonLinesearch(const String §ion_name, const PropertyMap *section, Functional_ &functional, Filter_ &filter)
Constructor using a PropertyMap.
Functional_::VectorTypeR VectorType
Input vector type for the functional's gradient.
NewtonRaphsonLinesearch(Functional_ &functional, Filter_ &filter, bool keep_iterates=false)
Standard constructor.
virtual Status correct(VectorType &vec_sol, const VectorType &vec_dir) override
Applies the solver, making use of an initial guess.
Filter_ FilterType
Filter type to be applied to the gradient of the functional.
virtual Status apply(VectorType &vec_cor, const VectorType &vec_dir) override
Applies the solver, setting the initial guess to zero.
virtual ~NewtonRaphsonLinesearch()
Functional_::DataType DataType
Underlying floating point type.
virtual String name() const override
Returns a descriptive string.
virtual Status _apply_intern(VectorType &vec_sol, const VectorType &vec_dir)
Internal function: Applies the solver.
Linesearch< Functional_, Filter_ > BaseClass
Our base class.
String class implementation.
std::shared_ptr< NewtonRaphsonLinesearch< Functional_, Filter_ > > new_newton_raphson_linesearch(Functional_ &functional, Filter_ &filter, bool keep_iterates=false)
Creates a new NewtonRaphsonLinesearch object.
Status
Solver status return codes enumeration.
@ success
solving successful (convergence criterion fulfilled)
@ progress
continue iteration (internal use only)
@ undefined
undefined status