\section{Challenges in Optimization Software Design}

\setcounter{footnote}{0}
\renewcommand{\thefootnote}{\arabic{footnote}}

The Toolkit for Advanced Optimization (TAO) focuses on the design of large
scale optimization software, including nonlinear least
squares,  bound-constrained
optimization, and nonlinearly constrained optimization.
The solution of optimization problems
pervades many areas of computational science and demands robust and
flexible solution strategies.
% As surveyed by Mor\'e and Wright \cite{more-wright},
Since many application problems require the computational
power of high-performance computers, a need clearly exists for a
uniform and flexible
framework for developing software for solving large-scale
optimization problems.

The current generation of numerical software generally has a rigid form
that imposes many limitations, even when restricted to
uniprocessor architectures.
In traditional software design, the expressions of
algorithms make assumptions about the way mathematical objects, such as
vectors and matrices, are represented by the computer.
Thus, users are
forced to convert from the natural representation of data for a particular
application to one imposed by the software developer, often at the
expense of considerable overhead.  In addition, library routines are
often characterized by long and complicated calling sequences, with
no consistent interface among algorithms that solve a particular class
of problems.
\textbf{Is this really true? I think that this paragraph
and the next are unnecessary}

These issues are magnified by the very nature of multiprocessor
architectures, since robust and
efficient implementation of mathematical abstractions involves
the added considerations
of parallel data structures and communication.
An effective software package should
exploit different parallel programming
techniques for various phases of the solution process.

Our goal is to use object-oriented and component-based
software engineering techniques to create  a
uniform and flexible toolkit for solving large-scale
optimization problems.
Other related projects that employ 
object-based optimization technology for
particular application areas are 
COOOL%
\footnote{\texttt{http://www.cwp.mines.edu}}
% \cite{coool-home-page}
which focuses on wave phenomena,
and the 
Rice Inversion Project%
\footnote{\texttt{http://www.trip.caam.rice.edu}}
% \cite{rice-inversion-home-page} which
focuses on computational
problems arise in reflection seismic data processing.
Recently Hohmann \cite{hohmann:94}, Meza \cite{meza:94}
and Bruhwiler et al. \cite{bsca98} have employed object-oriented design
for nonlinear optimization, although their work addresses only some
the issues we consider and is restricted to uniprocessor environments.


The TAO design philosophy
enables bidirectional connection to lower level
linear algebra support (for example, parallel sparse matrix data
structures) provided in toolkits such as
PETSc \cite{petsc-efficient,petsc-manual}
and 
ISIS++%
\footnote{\texttt{http://ca.sandia.gov/isis}}
as well as higher level application frameworks such as 
POOMA \cite{pooma} and 
InDEPS%
\footnote{\texttt{http://z.ca.sandia.gov/\~{ }indeps/}}.
%\cite{indeps-web-page}.
Our design decisions are strongly motivated by the challenges inherent
in the use of large-scale distributed memory architectures and the
reality of working with large, often
poorly structured legacy codes for specific applications.

This paper focuses on our design philosophy and its benefits in
developing robust
and scalable solutions strategies for bound
constrained quadratic problems.

