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 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.
The NOX::LAPACK instantiation 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. To compile the NOX::LAPACK library, use the CMake flag "NOX_ENABLE_ABSTRACT_IMPLEMENTATION_LAPACK=ON" option to enable. The NOX::LAPACK instatiation is serial only.
The NOX::Epetra instantiation is an interface to the Trilinos/Epetra linear algebra library. It is Sandia's workhorse code for parallel applications. For more information see the Epetra Home Page. The epetra support interface actually requires four Trilinos libraries: Epetra, EpetraExt, AztecOO, and Ifpack. The NOX::Epetra library is automatically enabled if you configure Trilinos with the four required packages enabled. Alternatively, you can force epetra support to be enabled with the CMake flag "NOX_ENABLE_ABSTRACT_IMPLEMENTATION_EPETRA=ON". The configure will fail if you do not have the required packages (Epetra, EpetraExt, AztecOO, and Ifpack) enabled. For instructions on interfacing your code to the epetra implementation see The Epetra Interface. Optionally, the epetra support can also use the ML library.
The NOX::Thyra instantiation is an interface to the Trilinos/Thyra package. The Thyra package contains a set of interfaces and supporting code that defines basic interoperability mechanisms between different types of numerical software. The foundation of all the interfaces related to abstract numerical algorithms (ANAs) are the mathematical concepts of vectors, vector spaces, and linear operators. All other ANA interfaces and support software are built on these fundamental operator/vector interfaces. We expect this interface to supersceed the Epetra interface above when all functionality is moved into the Trilinos/Stratimikos layer. For more information see the Thyra Home Page. Thyra will automatically be enabled if the Trilinos package Thyra is enabled. To explicitly force the NOX::Thyra library to be enabled, use the CMake option "NOX_ENABLE_ABSTRACT_IMPLEMENTATION_THYRA=ON" during configure. For instructions on interfacing your code to the thyra implementation see The Thyra Interface.
The NOX::PETSc instantiation is an interface with the PETSc library. PETSc is developed at Argonne National Labs; for more information see the PETSc Home Page To compile the NOX::Petsc library and examples, use the CMake flag "NOX_ENABLE_ABSTRACT_IMPLEMENTATION_PETSC=ON". For instructions on interfacing your code to the petsc implementation see The PETSc Interface.
If you have problems...
Please report any issues regarding NOX and LOCA to Bugzilla; see Reporting Bugs and Making Enhancement Requests for more information.
Go on to Step 3: Call NOX from your code.