NEML2 2.0.0
Loading...
Searching...
No Matches
NewtonWithLineSearch Class Reference

The nonlinear solver solves a nonlinear system of equations. More...

Detailed Description

The nonlinear solver solves a nonlinear system of equations.

The Newton-Raphson method is used to iteratively update the initial guess until the residual becomes zero within specified tolerances.

Armijo line search strategy is used to search along the direction of the full Newton step for a decreasing residual norm.

#include <NewtonWithLineSearch.h>

Inheritance diagram for NewtonWithLineSearch:

Public Member Functions

 NewtonWithLineSearch (const OptionSet &options)
 
- Public Member Functions inherited from Newton
 Newton (const OptionSet &options)
 
Result solve (NonlinearSystem &system, const NonlinearSystem::Sol< false > &x0) override
 Solve the given nonlinear system.
 
- Public Member Functions inherited from NonlinearSolver
 NonlinearSolver (const OptionSet &options)
 Construct a new NonlinearSolver object.
 
- Public Member Functions inherited from Solver
 Solver (const OptionSet &options)
 Construct a new Solver object.
 
- Public Member Functions inherited from NEML2Object
 NEML2Object ()=delete
 
 NEML2Object (NEML2Object &&)=delete
 
 NEML2Object (const NEML2Object &)=delete
 
NEML2Objectoperator= (NEML2Object &&)=delete
 
NEML2Objectoperator= (const NEML2Object &)=delete
 
virtual ~NEML2Object ()=default
 
 NEML2Object (const OptionSet &options)
 Construct a new NEML2Object object.
 
const OptionSetinput_options () const
 
virtual void setup ()
 Setup this object.
 
const std::string & name () const
 A readonly reference to the object's name.
 
const std::string & type () const
 A readonly reference to the object's type.
 
const std::string & path () const
 A readonly reference to the object's path.
 
const std::string & doc () const
 A readonly reference to the object's docstring.
 
Factoryfactory () const
 Get the factory that created this object.
 
const Settingssettings () const
 Settings.
 
template<typename T = NEML2Object>
const T * host () const
 Get a readonly pointer to the host.
 
template<typename T = NEML2Object>
T * host ()
 Get a writable pointer to the host.
 
template<typename T >
const T & resolve_tensor (const std::string &name)
 Resolve a TensorName to a Tensor.
 
template<class T >
std::shared_ptr< T > get_object (const std::string &section, const std::string &name)
 
template<class T = Solver>
std::shared_ptr< T > get_solver (const std::string &name)
 Get a solver from the factory.
 
template<class T = Data>
std::shared_ptr< T > get_data (const std::string &name)
 Get a data from the factory.
 
template<class T = Model>
std::shared_ptr< T > get_model (const std::string &name)
 Get a model from the factory.
 
template<class T = Driver>
std::shared_ptr< T > get_driver (const std::string &name)
 Get a driver from the factory.
 
template<class T = WorkScheduler>
std::shared_ptr< T > get_scheduler (const std::string &name)
 Get a scheduler from the factory.
 

Static Public Member Functions

static OptionSet expected_options ()
 
- Static Public Member Functions inherited from Newton
static OptionSet expected_options ()
 
- Static Public Member Functions inherited from NonlinearSolver
static OptionSet expected_options ()
 
- Static Public Member Functions inherited from Solver
static OptionSet expected_options ()
 
- Static Public Member Functions inherited from NEML2Object
static OptionSet expected_options ()
 

Protected Member Functions

void update (NonlinearSystem &system, NonlinearSystem::Sol< true > &x, const NonlinearSystem::Res< true > &r, const NonlinearSystem::Jac< true > &J) override
 Update trial solution.
 
virtual Scalar linesearch (NonlinearSystem &system, const NonlinearSystem::Sol< true > &x, const NonlinearSystem::Sol< true > &dx, const NonlinearSystem::Res< true > &R0) const
 Perform Armijo linesearch.
 
- Protected Member Functions inherited from Newton
virtual void prepare (const NonlinearSystem &, const NonlinearSystem::Sol< true > &)
 Prepare solver internal data before the iterative update.
 
virtual bool converged (size_t itr, const ATensor &nR, const ATensor &nR0) const
 Check for convergence. The current iteration is said to be converged if the residual norm is below the absolute tolerance or or the ratio between the residual norm and the initial residual norm is below the relative tolerance.
 
virtual void final_update (NonlinearSystem &system, NonlinearSystem::Sol< true > &x, const NonlinearSystem::Res< true > &r, const NonlinearSystem::Jac< true > &J)
 Do a final update to track AD function graph.
 
virtual NonlinearSystem::Sol< true > solve_direction (const NonlinearSystem::Res< true > &r, const NonlinearSystem::Jac< true > &J)
 Find the current update direction.
 

Protected Attributes

unsigned int _linesearch_miter
 Linesearch maximum iterations.
 
double _linesearch_sigma
 Decrease factor for linesearch.
 
double _linesearch_c
 Stopping criteria for linesearch.
 
EnumSelection _type
 Seclect the type of line search.
 
bool _check_crit
 

Additional Inherited Members

- Public Types inherited from NonlinearSolver
enum class  RetCode : std::uint8_t { SUCCESS = 0 , MAXITER = 1 , FAILURE = 2 }
 
- Public Attributes inherited from NonlinearSolver
double atol
 Absolute tolerance.
 
double rtol
 Relative tolerance.
 
unsigned int miters
 Maximum number of iterations.
 
- Public Attributes inherited from Solver
const bool verbose
 Whether to print additional (debugging) information during the solve.
 

Constructor & Destructor Documentation

◆ NewtonWithLineSearch()

NewtonWithLineSearch ( const OptionSet & options)

Member Function Documentation

◆ expected_options()

OptionSet expected_options ( )
static

◆ linesearch()

Scalar linesearch ( NonlinearSystem & system,
const NonlinearSystem::Sol< true > & x,
const NonlinearSystem::Sol< true > & dx,
const NonlinearSystem::Res< true > & R0 ) const
protectedvirtual

Perform Armijo linesearch.

◆ update()

void update ( NonlinearSystem & system,
NonlinearSystem::Sol< true > & x,
const NonlinearSystem::Res< true > & r,
const NonlinearSystem::Jac< true > & J )
overrideprotectedvirtual

Update trial solution.

Reimplemented from Newton.

Member Data Documentation

◆ _check_crit

bool _check_crit
protected

◆ _linesearch_c

double _linesearch_c
protected

Stopping criteria for linesearch.

◆ _linesearch_miter

unsigned int _linesearch_miter
protected

Linesearch maximum iterations.

◆ _linesearch_sigma

double _linesearch_sigma
protected

Decrease factor for linesearch.

◆ _type

EnumSelection _type
protected

Seclect the type of line search.