NEML2 2.1.0
Loading...
Searching...
No Matches

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.

#include <Newton.h>

Inheritance diagram for Newton:

Public Member Functions

 Newton (const OptionSet &options)
Result solve (NonlinearSystem &) override
 Solve the given nonlinear system.
Public Member Functions inherited from NonlinearSolver
 NonlinearSolver (const OptionSet &options)
void to (const TensorOptions &) override
 Change the device and dtype of the solver's internal data.
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 = EquationSystem>
std::shared_ptr< T > get_es (const std::string &name)
 Get an equation system from the factory.
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 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

virtual void prepare (const NonlinearSystem &)
 Prepare solver internal data before the iterative update.
virtual bool converged (size_t itr, const Scalar &nb, const Scalar &nb0) 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 update (NonlinearSystem &sys)
 Update trial solution with fresh function graph.
virtual void final_update (NonlinearSystem &sys)
 Update solution with function graph.

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
std::shared_ptr< LinearSolverlinear_solver
 Linear solver used by the nonlinear solver.
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

◆ Newton()

Newton ( const OptionSet & options)

Member Function Documentation

◆ converged()

virtual bool converged ( size_t itr,
const Scalar & nb,
const Scalar & nb0 ) const
protectedvirtual

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.

Parameters
itrThe current iteration number
nbThe current residual norm
nb0The initial residual norm

◆ expected_options()

OptionSet expected_options ( )
static

◆ final_update()

virtual void final_update ( NonlinearSystem & sys)
protectedvirtual

Update solution with function graph.

◆ prepare()

virtual void prepare ( const NonlinearSystem & )
inlineprotectedvirtual

Prepare solver internal data before the iterative update.

◆ solve()

Result solve ( NonlinearSystem & system)
overridevirtual

Solve the given nonlinear system.

Parameters
systemThe nonlinear system to solve
Returns
See also
neml2::NonlinearSolver::Result

Implements NonlinearSolver.

◆ update()

virtual void update ( NonlinearSystem & sys)
protectedvirtual

Update trial solution with fresh function graph.

Reimplemented in NewtonWithLineSearch.