Anasazi Operator/Vector Interfaces


Classes

class  Anasazi::MultiVecTraits< ScalarType, MV >
 Virtual base class which defines basic traits for the multi-vector type. More...
class  Anasazi::OperatorTraits< ScalarType, MV, OP >
 Virtual base class which defines basic traits for the operator type. More...

Detailed Description

Anasazi utilizes abstract interfaces for operators and multivectors so leveraging existing linear algebra libraries for use in Anasazi. The choice in linear algebra is made through templating, and access to the functionality of the underlying objects is provided via the traits classes Anasazi::MultiVecTraits and Anasazi::OperatorTraits.

Anasazi::MultiVecTraits requires two template arguments:

Because Anasazi implements block eigensolvers, the underlying primitive is a collection of column vectors (a multivector) instead of a single column vector. Anasazi::MultiVecTraits provides an interface for accessing multivector operations (e.g., multivector AXPY). For example code, to manipulate an Epetra_Multivector via the Anasazi::MultiVecTraits interface is

   // build some Epetra_MultiVector objects...
   Epetra_MultiVector A(...), B(...), C(...);
   // ...and a Teuchos::SerialDenseMatrix
   Teuchos::SerialDenseMatrix<int,double> D(...);

   // perform C <- 1.0*A + 0.5*B;
   Anasazi::MultiVecTraits<double,Epetra_MultiVector>::MvAddMv(1.0, A, 0.5, B, C);

   // perform C <- -2.0*A*D + 1.0*C
   Anasazi::MultiVecTraits<double,Epetra_MultiVector>::MvTimesMatAddMv(-2.0, A, D, 1.0, C);

Similarly, OperatorTraits is used to access the functionality of operators, namely, their effect on multivectors. In this respect, Anasazi::OperatorTraits requires three template arguments:

The Anasazi::OperatorTraits interface provides access to a single mechanism: the ability to apply an operator of type OP to a multivector of type MV yields another multivector of type MV. This is perfomed as follows:

   // build some Epetra_MultiVector objects...
   Epetra_MultiVector A(...), B(...);
   // ...and an operator
   Epetra_Operator Op(...);

   // apply the operation B <- Op*A
   Anasazi::OperatorTraits<double,Epetra_MultiVector,Epetra_Operator>::Apply(Op,A,B);

These interfaces are used throughout Anasazi to manipulate multivectors and apply operators, so that no low-level access to the underlying objects are needed. Hence, Anasazi is independent of the underlying linear algebra data structures(e.g., serial or parallel, real or complex).

Calling methods of MultiVecTraits<ScalarType,MV> requires that a specialization of MultiVecTraits has been implemented for classes ScalarType and MV. In the case of Epetra_MultiVector and Epetra_Operator (which are both defined on the field of doubles), is provided by the Anasazi adapters to Epetra. Other specialization of these traits classes that are provided by Anasazi are:

Additional specializations of Anasazi::MultiVecTraits and Anasazi::OperatorTraits are created by the user.


Generated on Thu Sep 18 12:31:38 2008 for Anasazi by doxygen 1.3.9.1