#include <NOX_EpetraNew_BroydenOperator.H>
Inheritance diagram for NOX::EpetraNew::BroydenOperator:
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_CrsMatrix & | getBroydenMatrix () |
| 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::Arbitrary * | clone () 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::Vector * | updateVectorPtr |
| NOX::Epetra::Vector & | updateVector |
| NOX::Epetra::Vector * | broydenVecPtr |
| NOX::Epetra::Vector * | residualVecPtr |
| NOX::Epetra::Vector * | tempVecPtr |
| Epetra_CrsMatrix & | crsMatrix |
| NOX::EpetraNew::Interface::Jacobian * | jacIntPtr |
| Epetra_CrsMatrix * | jacMatrixPtr |
| NOX::EpetraNew::Interface::Preconditioner * | precIntPtr |
| Epetra_CrsMatrix * | precMatrixPtr |
| std::string | myType |
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:
where
and
The tilde on the matrices
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.
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.
1.3.9.1