Overall requirements for Belos:

1) Belos iterative solvers should have minimal requirements imposed on them.  They should not be responsible
for preconditioning, scaling or status testing.  Although they should be allowed to address these things if
desired.

2) Our design should be able to support standard methods such as CG, GMRES, BiCGSTAB, QMR, etc.  and block
variants.  It should also support multiple simultaneous and multiple sequential RHS.

3) Any Belos solver should be useable as an kernel of a meta solver.

4) Belos solvers must be configurable via parameter lists.

This is a start ...

-------------------------------------------------------------------------------------------------

Initial list of requirements for the following classes:

1) A Linear Problem Manager
2) Iterative Solver
3) A Status Test
4) I/O Manager


Belos::LinearProblemManager (LPM)
=================================

This class is an example of the Mediator design pattern.  It is a concrete class accepting TSF objects.  

Requirements on this class include:

1) Accepts shared pointers to the following objects:
	preconstructed preconditioner, 
	linear operator, 
	status test,
	LHS and RHS.  
   Any or all of these pointers can be zero at instantiation of LPM.

2) Allows redefinition of any of the pointers in (1).
3) Enforces just-in-time consistency of the objects in (1).
4) Support explicit scaling of linear system.
5) Supports left, right and two sided implicit preconditioning.
6) Support all-at-once and step-by-step apply of the preconditioned linear operator.
7) 

Belos::IterativeSolver 
======================

This class is an example of the Facade design pattern.  This is an abstract interface that each Belos 
iterative solver would implement.  The primary purpose of the interface is to provide information to 
the Belos::StatusTest class for the purposes of getting information about the current residual, number 
of iterations, etc.  This interface can be extended to handle special information that some iterative 
solvers can possibly provide such as estimates for min/max eigenvalues, etc.

Requirements:

The following requirements are more complex than what we might think is needed at first.  This is because 
methods such as GMRES do not have a native residual vector or update solution vector at each iteration, 
but do have an estimate of the residual.

1) Provides a vector (or multivector) containing the "native" residual vector, if one is available.  
   This is the residual that is naturally produced by the iterative process, if there is one.
2) Provides the current iteration count.
3) Provides "native" residual norm estimate if available.
3) Can be interrogated as to whether or not the solution vector (multivector) is up to date.


Belos::StatusTest
=================

This class is an example of a State design pattern.  This is an abstract interface that is used to 
determine if the iterative process has converged, failed or is still in progress.  Belos should provide 
a few concrete implementations of this interface, much like AztecOO, and should provide a combination 
class that allows two or more status test objects to be combined.

Requirements:

I think this class should be very similar to the status class already in use in AztecOO. See the 
following site:

http://software.sandia.gov/Trilinos/doc/aztecoo/doc/html/classAztecOO__StatusTest.html

The big differences would be that the Belos version needs support for multivectors and needs to be 
templated on the scalar field.


Belos::IOManager

This class is an example of a Mediator design pattern.  It is
instantiated outside of the solver and is used to handle output from
the solver.

Requirements:

It should provide methods that allow a single print of a message that
is the same across all processors.  It should also support printing
of unique information from each processor.  It should allow
reconfigurable formatting and support printing of the ordinal and
scalar types as well as a string object.  It could be provided
directly to the solver, or could be accessed from the linear problem
manager.