NOX
Development
|
NOX's flexibility is based on the fact that it does not depend on any particular linear algebra package. In order to interface to NOX, the user needs to supply methods that derive from the following abstract classes:
The Vector supports basic vector operations such as dot products and so on. The Group supports the linear algebra functionality as well as the interface to evaluate the function and, optionally, the Jacobian. Complete details are provided in the class description.
Included with NOX are four such interfaces:
The LAPACK interface is an interface to the BLAS/LAPACK library. It is not intended for large-scale computations, but to serve as an easy-to-understand example of how one might interface to NOX.
The Epetra interface is an interface to the Trilinos/Epetra library developed by Sandia National Labs; for more information see the Trilinos Home Page.
The Thyra interface is an interface to the Trilinos/Thyra library developed by Sandia National Labs; for more information see the Trilinos Home Page.
The PETSc interface is an interface with the PETSc library. PETSc was developed at Argonne National Labs; for more information see the PETSc Home Page
All solvers are in the NOX::Solver namespace. The solvers are constructed via the NOX::Solver::Factory. The recommended solver is NOX::Solver::LineSearchBased, which is a basic nonlinear solver based on a line search. Each solver has a number of options that can be specified, as documented in each class or on the NOX Parameter Reference Page.
The search directions are in the NOX::Direction namespace and accessed via the NOX::Direction::Factory. The default search direction for a line-search based method in NOX::Direction::Newton.
Several line searches are available, as defined in the NOX::LineSearch namespace, and accessed via the NOX::LineSearch::Factory class. Examples include
Convergence or failure of a given solver method is determined by the status tests defined in the NOX::StatusTest namespace. Various status tests may be combined via the NOX::StatusTest::Combo object. Users are free to create additional status tests that derive from the NOX::StatusTest::Generic class.