2. TAO provides support for function evaluations and
derivative information. It allows for the direct evaluation
of this information by the application developer,
and contains limited support for finite difference, and
allows the uses of matrix-free methods.
The solvers can obtain this function and derivative information
through a simple interface while the details of its computation
are handled within the toolkit.
3. TAO provides line searches, convergence
tests, monitoring routines, and other tools
which are helpful within an optimization algorithm.
The availability
of these tools means that the developers of the optimization
solver do not have to write these utilities.
4. TAO offers vectors, matrices, index sets, and linear solvers
that can be used by the solver. These objects are standard mathematical
constructions that have many different implementations.
The objects may be distributed over multiple processors, restricted to
a single processor, have a dense representation,
use a sparse data structure, or vary in many other ways.
TAO solvers do not need to know how
these objects are represented or how the operations defined on them
have been implemented. Instead, the solvers apply these operations
through an abstract interface that leaves the details to TAO
and external libraries.
This abstraction allows solvers to work seamlessly with a variety
of data structures while allowing application developers to select
data structures tailored for their purposes.
5. TAO supports an interface to PETSc and
allows the integration of other libraries as well.
When used with PETSc, TAO provides the user a convenient
method for setting options at runtime, performance profiling, and debugging.