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.
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.
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.