NOX  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Step 2: Create concrete implementations of the NOX::Abstract classes

NOX abstract classes

NOX's flexibility is based on the fact that it does not depend on any particular linear algebra package. Interfacing to NOX requires concrete implementations or instatiations 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 (nonlinear equations) and, optionally, the Jacobian. Complete details are provided in the class descriptions.

Users have two choices on how to supply the concrete implementations of the above classes: (1) write your own implementation of the NOX::Abstract::Vector and NOX::Abstract::Group classes (see Writing your own instantiation) or (2) use one of the predefined implementations (see Instantiations provided with NOX).

Writing your own instantiation

We recommend using the NOX::LAPACK concrete implementation as a guide. In this case, the underlying vectors are C++ STL std::vector<double> objects, and the matrices are stored in our own NOX::LAPACK::Matrix class. Both the vectors and matrices are manipulated using LAPACK. The NOX::LAPACK::Vector is straightforward; see NOX_LAPACK_Vector.H and NOX_LAPACK_Vector.C. The NOX::LAPACK::Group uses the NOX::LAPACK::Vector and NOX::LAPACK::Matrix objects. The interface with the application is handled in a separate class (NOX::LAPACK::Interface) that is passed to the NOX::LAPACK::Group when it is constructed.

Instantiations provided with NOX

NOX includes four ready-made instantiations.

If you have problems...

Please report any issues regarding NOX and LOCA to Bugzilla; see Reporting Bugs and Making Enhancement Requests for more information.

Moving on...

Go on to Step 3: Call NOX from your code.