Boost logo

Glas :

RE: [glas] vector space, banach space and hilbert space concepts

From: Michael A Heroux (maherou_at_[hidden])
Date: 2005-03-24 16:30:50

I have been on this mailing list for several months, but have not taken the
time to keep up with all the threads. Today I scanned through the 100+
messages from this list. Here are a few comments:

1) I think we could really benefit from an all-out brainstorming on the
requirements, specifically use cases and scenarios, we want to support. I
am extremely sympathetic to the Agile programming philosophy of
"barely-sufficient" documentation, but I don't think we have reached that
level yet. Who are the users and implementers of GLAS? What are the
relationships between these groups? What are some very specific scenarios
we want to make sure work? I don't have a good feel for this based on the
discussion so far.

2) I have to admit that I am concrete-minded, probably to a fault. Still, I
strongly believe in the statement that "abstraction can be used to reduce
any type of complexity, except for too much abstraction." We have
experienced this over the years as part of the Trilinos project designs.
Too many abstractions, especially abstraction layers, make learning and
using the abstract model complex in its own right. Although there may be
mathematical motivations for elaborate abstraction, I am concerned about
having so many concepts and models. Abstractions must serve the use cases
and scenarios. Maybe this is the case, but again I don't have a good feel
for the requirements of GLAS.

3) On the specific topic of VectorSpace, several Trilinos packages have made
effective use of this concept. In particular the packages TSFCore (becoming
Thyra), Tpetra and Epetra (where it is called Map) have this class as a core
piece of the design and functionality.

VectorSpace is used for:

- Generating vectors (and multivectors, which are collections of compatible
vectors). Each vector knows its vector space, which can in turn be used to
generate another compatible vector.

- Generating matrices. A rowVectorSpace and columnVectorSpace define the
dimension and distribution of matrix rows and columns. Note: These can be
different than the domainVectorSpace and rangeVectorSpace (see below).
However, since a matrix "isa" linear operator, a matrix has all four
VectorSpace attributes.

- Testing compatibility of two vectors. Compatibility is a fairly complex
issue, and whether or not two vectors are compatible depends on the
operation being performed. Being able to encapsulate this test and the
required data into the VectorSpace has been very important for us.

- Testing compatibility of linear operators with vectors. In Trilinos
packages, we typically have two VectorSpace objects associated with a linear
operator instance: the domainVectorSpace and the rangeVectorSpace. These
are used to efficiently check for compatibility in matrix operations. For
example, to compute y = A*x, where x and y are vectors and A is a matrix, we
check to see that the vectorSpace of x is compatible with the
domainVectorSpace of A and the vectorSpace of y is compatible with the
rangeVectorSpace of A.

Because of how we use VectorSpace, we encapsulate a lot of information in
this class, including dimensional data.

Best regards,


Michael Heroux
Sandia National Laboratories
(320) 845-7695