NOX
Development
|
Newton direction computation More...
#include <NOX_Direction_Newton.H>
Public Member Functions | |
Newton (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) | |
Constructor. | |
virtual | ~Newton () |
Destructor. | |
virtual bool | reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) |
Reset direction based on possibly new parameters. | |
virtual bool | compute (NOX::Abstract::Vector &dir, NOX::Abstract::Group &grp, const NOX::Solver::Generic &solver) |
Compute the direction vector, dir , for a specific method given the current group, grp . More... | |
virtual bool | compute (NOX::Abstract::Vector &dir, NOX::Abstract::Group &grp, const NOX::Solver::LineSearchBased &solver) |
Same as compute(NOX::Abstract::Vector&, NOX::Abstract::Group&, const NOX::Solver::Generic&) More... | |
Public Member Functions inherited from NOX::Direction::Generic | |
Generic () | |
Constructor. More... | |
virtual | ~Generic () |
Destructor. | |
Protected Member Functions | |
virtual bool | resetForcingTerm (const NOX::Abstract::Group &soln, const NOX::Abstract::Group &oldSoln, int niter, const NOX::Solver::Generic &solver) |
Newton direction computation
Computes the Newton direction by solving the Newton system.
Here is the n x n Jacobian matrix at the current iterate, is the n-vector representing the nonlinear function at the current iterate, and is the n-vector that we are solving for.
If we use an iterative linear solver for the Newton system, then this is called an inexact Newton method. The tolerance used to terminate the linear solve is called the forcing term. The forcing term may be constant, or it may be adjustable. In either case, at iteration we require,
Here is the forcing term for iteration .
Adjustable forcing terms were introduced by Eisenstat and Walker (1982); here they are implemented as described in Pernice and Walker (1998). We have two choices for adjustable forcing terms:
Type 1
With the following safeguards imposed:
Type 2
With the following safeguards imposed:
Parameters
"Direction":
"Direction"/"Newton":
"Forcing Term Method" - Method to compute the forcing term, i.e., the tolerance for the linear solver. Choices are:
"Forcing Term Initial Tolerance" - (initial linear solver tolerance). Defaults to 0.1.
"Forcing Term Minimum Tolerance" - . Defaults to 1.0e-6.
"Forcing Term Maximum Tolerance" - . Defaults to 0.01.
"Forcing Term Alpha" - (used only by "Type 2"). Defaults to 1.5.
"Forcing Term Gamma" - (used only by "Type 2"). Defaults to 0.9.
"Rescue Bad %Newton Solve" (Boolean) - If set to true, we will use the computed direction even if the linear solve does not achieve the tolerance specified by the forcing term. Defaults to true.
"Direction"/"Newton"/"Linear Solver":
"Tolerance" - Tolerance for the linear solve. This may be adjusted automatically by the forcing calculation. Defaults to 1.0e-10. Will be adjusted automatically by NOX if the "Forcing Term Method" is "Type 1" or "Type 2".
References
Michael Pernice and Homer F. Walker, NITSOL: A Newton Iterative Solver for Nonlinear Systems, SISC 19(Jan 1998):302-318.
S. C. Eisenstat and H. F. Walker, Globally convergent inexact Newton methods, SINUM 19(1982):400-408
|
virtual |
Compute the direction vector, dir
, for a specific method given the current group, grp
.
The grp
is not const so that we can compute the F vector, the Jacobian matrix, the Newton vector, and so on.
Const access to the solver is used for getting additional information such as the past solution, the iteration number, and so on.
Implements NOX::Direction::Generic.
References NOX::Abstract::Group::computeF(), NOX::Abstract::Group::computeJacobian(), NOX::Abstract::Group::computeNewton(), NOX::Utils::Details, NOX::Abstract::Group::getNewton(), NOX::Solver::Generic::getNumIterations(), NOX::Solver::Generic::getPreviousSolutionGroup(), NOX::Abstract::Group::logLastLinearSolveStats(), NOX::Abstract::Group::Ok, and NOX::Utils::Warning.
|
virtual |
Same as compute(NOX::Abstract::Vector&, NOX::Abstract::Group&, const NOX::Solver::Generic&)
Enables direct support for line search based solvers for the purpose of efficiency since the LineSearchBased object has a getStep() function that some directions require.
If it is not redefined in the derived class, it will just call the compute with the NOX::Solver::Generic argument.
Reimplemented from NOX::Direction::Generic.
References NOX::Direction::Generic::compute().
|
protectedvirtual |
Called each iteration to reset the forcing term (ie, the convergence tolerance for the linear solver).
References NOX::Abstract::Group::applyJacobian(), NOX::Abstract::Vector::clone(), NOX::Utils::Details, NOX::Abstract::Group::getF(), NOX::Abstract::Group::getNormF(), NOX::Abstract::Group::getX(), Teuchos::is_null(), NOX::Abstract::Group::isJacobian(), NOX::ShapeCopy, NOX::Abstract::Vector::update(), and NOX::Utils::Warning.