NOX::Direction::NonlinearCG Class Reference

Calculates a search direction using the Nonlinear Conjugate Gradient method. More...

#include <NOX_Direction_NonlinearCG.H>

Inheritance diagram for NOX::Direction::NonlinearCG:

Inheritance graph
[legend]
Collaboration diagram for NOX::Direction::NonlinearCG:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 NonlinearCG (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &params)
 Constructor.
virtual ~NonlinearCG ()
 Destructor.
virtual bool reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &p)
 derived
virtual bool compute (Abstract::Vector &dir, Abstract::Group &grp, const Solver::Generic &solver)
 derived
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&).

Private Attributes

Teuchos::RCP< NOX::GlobalDataglobalDataPtr
 Global data pointer. Keep this so the parameter list remains valid.
Teuchos::RCP< NOX::Utilsutils
 Printing Utils.
const Abstract::GroupoldSolnPtr
 Previous solution pointer.
Teuchos::RCP< Abstract::VectortmpVecPtr
 Temporary vector used in applying preconditioner.
Teuchos::RCP< Abstract::VectoroldDirPtr
 Previous search direction pointer.
Teuchos::RCP< Abstract::VectoroldDescentDirPtr
 Pointer to previous descent direction.
Teuchos::RCP< Abstract::VectordiffVecPtr
 Temporary vector used in computing the numerator of Polak-Ribiere $ \beta $.
Teuchos::ParameterList * paramsPtr
 Input parameters.
double beta
 Orthogonalization parameter $ \beta $.
int niter
 Number of nonlinear iterations.
int restartFrequency
 Restart frequency.
bool doPrecondition
 Boolean flag indicating whether or not to use preconditioning.
bool usePRbeta
 Boolean flag indicating if beta is computed using Polak-Ribiere.


Detailed Description

Calculates a search direction using the Nonlinear Conjugate Gradient method.

Calculates the direction

\[ d = - M^{-1}(x) F(x) + \beta d_{prev} \]

where $ M $ is a preconditioner and $ \beta $ is an orthogonalization parameter which can be computed in various ways (see below), and $ d_{prev} $ is the search direction from the previous nonlinear iteration.

This method provides a generalization of Linear CG to nonlinear problems. It does this by computing a search direction using an expression analogous to that of Linear CG. The negative of the current residual vector, $ F(x) $ is taken, allowed to be preconditioned, and then orthogonalized against the previous search direction. This direction can sometimes be used successfully with the various choices provided in NOX::Linesearch but is intended to be used with NOX::Linesearch::NonlinearCG. In fact, the expected convergence behavior of linear problems can only be achieved in this way.

To use this direction, specify that the "Method" is "NonlinearCG" in the "Direction" sublist of the parameters that are passed to the solver (see NOX::Direction::Manager for more information on choosing the search direction).

The following options may be specified in the "Nonlinear CG" sublist of the "Direction" sublist of the solver parameters.

References

information about both linear and nonlinear conjugate gradient methods can be found in Chapter 5 of:

Nocedal & Wright, "Numerical Optimization", Springer-Verlag, New York, 1999. Though presented within the context of nonlinear optimization, the connection to nonlinear systems of equations is made by the correspondence $ \nabla f(x) \leftrightarrow F(x) $ (cf Algorithm 5.4).

Another useful useful reference is:

Jonathan Richard Shewchuk, "An Introduction to the Conjugate Gradient Method Without the Agonizing Pain," 1994. Chapter 14 provides a summary of issues in generalizing linear CG to the nonlinear case. Correspondence to NOX notation is made by the equivalence $ r \leftrightarrow f' \leftrightarrow F(x) $ (cd Section 14.1).

Definition at line 154 of file NOX_Direction_NonlinearCG.H.


Constructor & Destructor Documentation

NonlinearCG::NonlinearCG ( const Teuchos::RCP< NOX::GlobalData > &  gd,
Teuchos::ParameterList &  params 
)

Constructor.

Definition at line 54 of file NOX_Direction_NonlinearCG.C.

References reset().

NonlinearCG::~NonlinearCG (  )  [virtual]

Destructor.

Definition at line 81 of file NOX_Direction_NonlinearCG.C.


Member Function Documentation

bool NonlinearCG::reset ( const Teuchos::RCP< NOX::GlobalData > &  gd,
Teuchos::ParameterList &  p 
) [virtual]

derived

Implements NOX::Direction::Generic.

Definition at line 63 of file NOX_Direction_NonlinearCG.C.

References doPrecondition, globalDataPtr, paramsPtr, restartFrequency, usePRbeta, and utils.

Referenced by NonlinearCG().

bool NonlinearCG::compute ( Abstract::Vector dir,
Abstract::Group grp,
const Solver::Generic solver 
) [virtual]

bool NonlinearCG::compute ( NOX::Abstract::Vector dir,
NOX::Abstract::Group grp,
const NOX::Solver::LineSearchBased solver 
) [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.

Definition at line 198 of file NOX_Direction_NonlinearCG.C.

References compute().


Member Data Documentation

Global data pointer. Keep this so the parameter list remains valid.

Definition at line 180 of file NOX_Direction_NonlinearCG.H.

Referenced by reset().

Printing Utils.

Definition at line 183 of file NOX_Direction_NonlinearCG.H.

Referenced by compute(), and reset().

Previous solution pointer.

Definition at line 186 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Temporary vector used in applying preconditioner.

Definition at line 189 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Previous search direction pointer.

The current search direction is found by orthogonalizing against the previous search direction. This vector provides storage for the old search direction.

Definition at line 195 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Pointer to previous descent direction.

This vector stores the old descent direction which was orthogonalized to determine the old search direction. It is needed in the numerator of the expression for Polak-Ribiere $ \beta $.

Definition at line 201 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Temporary vector used in computing the numerator of Polak-Ribiere $ \beta $.

Definition at line 204 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Teuchos::ParameterList* NOX::Direction::NonlinearCG::paramsPtr [private]

Input parameters.

Definition at line 207 of file NOX_Direction_NonlinearCG.H.

Referenced by compute(), and reset().

Orthogonalization parameter $ \beta $.

Definition at line 210 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Number of nonlinear iterations.

Definition at line 213 of file NOX_Direction_NonlinearCG.H.

Referenced by compute().

Restart frequency.

Definition at line 216 of file NOX_Direction_NonlinearCG.H.

Referenced by compute(), and reset().

Boolean flag indicating whether or not to use preconditioning.

Definition at line 219 of file NOX_Direction_NonlinearCG.H.

Referenced by compute(), and reset().

Boolean flag indicating if beta is computed using Polak-Ribiere.

Definition at line 222 of file NOX_Direction_NonlinearCG.H.

Referenced by compute(), and reset().


The documentation for this class was generated from the following files:

Generated on Wed Oct 21 14:28:45 2009 for Nonlinear Solver Project by  doxygen 1.5.9