NOX Development

Inexact Newton Utilities More...
#include <NOX_Direction_Utils_InexactNewton.H>
Public Member Functions  
InexactNewton (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &directionSublist)  
Constructor.  
virtual  ~InexactNewton () 
Destructor.  
virtual bool  reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &directionSublist) 
Reset the utilities.  
virtual double  computeForcingTerm (const NOX::Abstract::Group &soln, const NOX::Abstract::Group &oldSoln, int niter, const NOX::Solver::Generic &solver, double eta_last=1.0) 
Inexact Newton Utilities
If we use an iterative linear solver for a Newtonbased solve, 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
"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.0e6.
"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.
"Forcing Term User Defined Norm" (NOX::Parameter::UserNorm derived object)  If using a Type 1 or Type 2 adjustable forcing term, the norms used to calculate should be based on the same norm used in the convergence test of the linear solver. Essentially this means that the norm must account for LEFT scaling of any kind that is applied to the linear system during a solve. If set, the computation of will be done using a used defined function that is passed in through a NOX::Parameter::Arbitrary derived object. It will take the arbitrary object and cast it to a NOX::Parameter::UserNorm object and use it for norm computations. If this parameter is not set, this method uses the L2 Norm for any norm computations of .
"Set Tolerance in Parameter List" When calling computeForcingTerm() the value of the forcing term will be set in the parmaeter list pointed to by the InexactNewton object. It will be set under paramsPtr>sublist(<directionMethod>).sublist("Linear Solver").set("Tolerance", eta_k). Defaults to true.
References
Michael Pernice and Homer F. Walker, NITSOL: A Newton Iterative Solver for Nonlinear Systems, SISC 19(Jan 1998):302318.
S. C. Eisenstat and H. F. Walker, Globally convergent inexact Newton methods, SINUM 19(1982):400408
double NOX::Direction::Utils::InexactNewton::computeForcingTerm  (  const NOX::Abstract::Group &  soln, 
const NOX::Abstract::Group &  oldSoln,  
int  niter,  
const NOX::Solver::Generic &  solver,  
double  eta_last = 1.0 

)  [virtual] 
Called each iteration to reset the forcing term (ie, the convergence tolerance for the linear solver).
if the user supplied eta_last then it will use this value for eta_km1 instead of looking for it in the "Linear Solver" sublist.
References NOX::Abstract::Group::applyJacobian(), NOX::Abstract::Vector::clone(), NOX::Utils::Details, NOX::Abstract::Group::getF(), NOX::Abstract::Group::getNormF(), NOX::Abstract::Group::getX(), is_null(), NOX::Abstract::Group::isJacobian(), and NOX::ShapeCopy.