NOX::EpetraNew::BroydenOperator Class Reference

A concrete implementation of a Broyden-type operator for NOX. More...

#include <NOX_EpetraNew_BroydenOperator.H>

Inheritance diagram for NOX::EpetraNew::BroydenOperator:

[legend]
Collaboration diagram for NOX::EpetraNew::BroydenOperator:
[legend]
List of all members.

Public Member Functions

 BroydenOperator (NOX::Parameter::List &nlParams, Epetra_Vector &solnVec, Epetra_CrsMatrix &broydMat0, bool verbose=false)
 Constructor taking an initial matrix to be updated.
 BroydenOperator (NOX::Parameter::List &nlParams, Epetra_Vector &solnVec, Epetra_CrsMatrix &broydMat0, NOX::EpetraNew::Interface::Jacobian &jacInt, Epetra_CrsMatrix &jacMatrix, bool verbose=false)
 Constructor taking an initial matrix to be updated along with a Jacobian matrix whose values replace those of the Broyden update.
 BroydenOperator (NOX::Parameter::List &nlParams, Epetra_Vector &solnVec, Epetra_CrsMatrix &broydMat0, NOX::EpetraNew::Interface::Preconditioner &precInt, Epetra_CrsMatrix &precMatrix, bool verbose=false)
 Constructor taking an initial matrix to be updated along with a preconditioning matrix whose values replace those of the Broyden update.
 BroydenOperator (const BroydenOperator &)
 Copy Constructor.
virtual ~BroydenOperator ()
 Destructor.
Epetra_CrsMatrixgetBroydenMatrix ()
 Return a reference to the Broyden matrix. The matrix is not owned but is obtained from the client at construction.

Protected Member Functions

virtual bool computeJacobian (const Epetra_Vector &x)
 Allow for fill of Jacobian matrix whose values will replace corresponding entries in the Broyden matrix.
virtual bool computePreconditioner (const Epetra_Vector &, NOX::Parameter::List *params=0)
 Allow for fill of preconditioning matrix whose values will replace corresponding entries in the Broyden matrix.
virtual void runPostIterate (const NOX::Solver::Generic &solver)
 Update the Broyden matrix using changes in residuals the solution vector from the most recent nnlinear iteration.
virtual NOX::Parameter::Arbitraryclone () const
 A dummy method needed for inheritance.
virtual const string & getType () const
 A dummy method needed for inheritance.
void replaceBroydenMatrixValues (const Epetra_CrsMatrix &mat)
 Replace values in Broyden matrix with either Jacobian or preconditioning matrix entries.

Protected Attributes

bool verbose
NOX::Epetra::VectorupdateVectorPtr
NOX::Epetra::VectorupdateVector
NOX::Epetra::VectorbroydenVecPtr
NOX::Epetra::VectorresidualVecPtr
NOX::Epetra::VectortempVecPtr
Epetra_CrsMatrixcrsMatrix
NOX::EpetraNew::Interface::JacobianjacIntPtr
Epetra_CrsMatrixjacMatrixPtr
NOX::EpetraNew::Interface::PreconditionerprecIntPtr
Epetra_CrsMatrixprecMatrixPtr
std::string myType

Detailed Description

A concrete implementation of a Broyden-type operator for NOX.

This operator is intended to allow cheap updates to an existing Jacobian or preconditioning matrix that would otherwise be difficult or impossible to obtain by other means. It computes updates using secant approximations emobdied in truncated Broyden updates that preserve matrix sparsity.

This class derives from NOX::Parameter::PrePostOperator in order to perform a Broyden-type update on an existing matrix that it holds but does not own. This update is performed after each nonlinear iteration within method runPostIterate(...) according to the recursive formula:

\[ \tilde{B}_{k+1} = \tilde{B}_k + \frac{({y_k - \tilde{B}_k s_k})s_k^T}{s^T s} \]

where

\[ y_k = F_{k+1} - F_k \]

and

\[ s_k = x_{k+1} - x_k \]

The tilde on the matrices $ B $ indicates that the updates are constrained so that the nonzero structure of the original matrix passed into the constructor is preserved. Inasmuch as unconstrained Broyden updates produce dense matrices, these constrained updates lead to a loss of Broyden-matrix properties, e.g.

\[ \tilde{B}_{k+1} s_k \ne \tilde{B}_k + s_k \]

\[ \tilde{B}_{k+1} q \ne \tilde{B}_k q \quad \forall q : s_k^T q = 0 \]

One could recover these properties by passing into the constructor a dense Epetra_CrsMatrix, though the cost of typical use of this matrix, e.g. applying ILU to it, would be significant. Additionally, "better" values obtained from another Jacobian or preconditioning matrix can be used to replace corresponding values in the updated Broyden matrix by passing the Jacobian or preconditioning matrix and its associated interface to the constructor. The structure of the Jacobain or preconditioning matrix typically represents a subset of the Broyden matrix, e.g. a block diagonal matrix.


The documentation for this class was generated from the following files:
Generated on Thu Sep 18 12:40:49 2008 for NOX by doxygen 1.3.9.1