Anasazi Version of the Day
Anasazi::MultiVecTraits< ScalarType, MV > Class Template Reference

Traits class which defines basic operations on multivectors. More...

#include <AnasaziMultiVecTraits.hpp>

List of all members.

Static Public Member Functions

Creation methods
static Teuchos::RCP< MV > Clone (const MV &mv, const int numvecs)
 Creates a new empty MV containing numvecs columns.
static Teuchos::RCP< MV > CloneCopy (const MV &mv)
 Creates a new MV and copies contents of mv into the new vector (deep copy).
static Teuchos::RCP< MV > CloneCopy (const MV &mv, const std::vector< int > &index)
 Creates a new MV and copies the selected contents of mv into the new vector (deep copy).
static Teuchos::RCP< MV > CloneCopy (const MV &mv, const Teuchos::Range1D &index)
 Deep copy of specified columns of mv.
static Teuchos::RCP< MV > CloneViewNonConst (MV &mv, const std::vector< int > &index)
 Creates a new MV that shares the selected contents of mv (shallow copy).
static Teuchos::RCP< MV > CloneViewNonConst (MV &mv, const Teuchos::Range1D &index)
 Non-const view of specified columns of mv.
static Teuchos::RCP< const MV > CloneView (const MV &mv, const std::vector< int > &index)
 Creates a new const MV that shares the selected contents of mv (shallow copy).
static Teuchos::RCP< MV > CloneView (MV &mv, const Teuchos::Range1D &index)
 Const view of specified columns of mv.
Attribute methods
static int GetVecLength (const MV &mv)
static int GetNumberVecs (const MV &mv)
 Obtain the number of vectors in mv.
Update methods
static void MvTimesMatAddMv (const ScalarType alpha, const MV &A, const Teuchos::SerialDenseMatrix< int, ScalarType > &B, const ScalarType beta, MV &mv)
 Update mv with $ \alpha AB + \beta mv $.
static void MvAddMv (const ScalarType alpha, const MV &A, const ScalarType beta, const MV &B, MV &mv)
 Replace mv with $\alpha A + \beta B$.
static void MvScale (MV &mv, const ScalarType alpha)
 Scale each element of the vectors in mv with alpha.
static void MvScale (MV &mv, const std::vector< ScalarType > &alpha)
 Scale each element of the i-th vector in mv with alpha[i].
static void MvTransMv (const ScalarType alpha, const MV &A, const MV &mv, Teuchos::SerialDenseMatrix< int, ScalarType > &B)
 Compute a dense matrix B through the matrix-matrix multiply $ \alpha A^Hmv $.
static void MvDot (const MV &mv, const MV &A, std::vector< ScalarType > &b)
 Compute a vector b where the components are the individual dot-products of the i-th columns of A and mv, i.e. $b[i] = A[i]^Hmv[i]$.
Norm method
static void MvNorm (const MV &mv, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec)
 Compute the 2-norm of each individual vector of mv. Upon return, normvec[i] holds the value of $||mv_i||_2$, the i-th column of mv.
Initialization methods
static void SetBlock (const MV &A, const std::vector< int > &index, MV &mv)
 Copy the vectors in A to a set of vectors in mv indicated by the indices given in index.
static void SetBlock (const MV &A, const Teuchos::Range1D &index, MV &mv)
 Deep copy of A into specified columns of mv.
static void Assign (const MV &A, MV &mv)
 mv := A
static void MvRandom (MV &mv)
 Replace the vectors in mv with random vectors.
static void MvInit (MV &mv, const ScalarType alpha=Teuchos::ScalarTraits< ScalarType >::zero())
 Replace each element of the vectors in mv with alpha.
Print method
static void MvPrint (const MV &mv, std::ostream &os)
 Print the mv multi-vector to the os output stream.

Detailed Description

template<class ScalarType, class MV>
class Anasazi::MultiVecTraits< ScalarType, MV >

Traits class which defines basic operations on multivectors.

Template Parameters:
ScalarTypeThe type of the entries in the multivectors.
MVThe type of the multivectors themselves.

This traits class tells Anasazi's solvers how to perform multivector operations for the multivector type MV. These operations include creating copies or views, finding the number of rows or columns (i.e., vectors) in a given multivector, and computing inner products, norms, and vector sums. (Anasazi's solvers use the OperatorTraits traits class to apply operators to multivectors.)

Anasazi gives users two different ways to tell its solvers how to compute with multivectors of a given type MV. The first and preferred way is for users to specialize MultiVecTraits, this traits class, for their given MV type. Anasazi provides specializations for MV = Epetra_MultiVector, Tpetra::MultiVector, and Thyra::MultiVectorBase. The second way is for users to make their multivector type (or a wrapper thereof) inherit from MultiVec. This works because Anasazi provides a specialization of MultiVecTraits for MultiVec. Specializing MultiVecTraits is more flexible because it does not require a multivector type to inherit from MultiVec; this is possible even if you do not have control over the interface of a class.

If you have a different multivector type MV that you would like to use with Anasazi, and if that type does not inherit from MultiVec, then you must implement a specialization of MultiVecTraits for MV. Otherwise, this traits class will report a compile-time error (relating to UndefinedMultiVecTraits). Specializing MultiVecTraits for your MV type is not hard. Just look at the examples for Epetra_MultiVector (in anasazi/epetra/src/AnasaziEpetraAdapter.hpp) and Tpetra::MultiVector (in anasazi/tpetra/src/AnasaziTpetraAdapter.hpp).

Note:
You do not need to write a specialization of MultiVecTraits if you are using Epetra, Tpetra, or Thyra multivectors. Anasazi already provides specializations for these types. Just relax and enjoy using the solvers!
Examples:

BlockKrylovSchur/BlockKrylovSchurEpetraEx.cpp, BlockKrylovSchur/BlockKrylovSchurEpetraExGenAmesos.cpp, BlockKrylovSchur/BlockKrylovSchurEpetraExGenAztecOO.cpp, and BlockKrylovSchur/BlockKrylovSchurEpetraExGenBelos.cpp.

Definition at line 114 of file AnasaziMultiVecTraits.hpp.


Member Function Documentation

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::Clone ( const MV &  mv,
const int  numvecs 
) [inline, static]

Creates a new empty MV containing numvecs columns.

Returns:
Reference-counted pointer to the new multivector of type MV.

Definition at line 123 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneCopy ( const MV &  mv) [inline, static]

Creates a new MV and copies contents of mv into the new vector (deep copy).

Returns:
Reference-counted pointer to the new multivector of type MV.

Definition at line 130 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneCopy ( const MV &  mv,
const std::vector< int > &  index 
) [inline, static]

Creates a new MV and copies the selected contents of mv into the new vector (deep copy).

The copied vectors from mv are indicated by the index.size() indices in index.

Returns:
Reference-counted pointer to the new multivector of type MV.

Definition at line 138 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneCopy ( const MV &  mv,
const Teuchos::Range1D index 
) [inline, static]

Deep copy of specified columns of mv.

Create a new MV, and copy (deep copy) the columns of mv specified by the given inclusive index range into the new multivector.

Parameters:
mv[in] Multivector to copy
index[in] Inclusive index range of columns of mv
Returns:
Reference-counted pointer to the new multivector of type MV.

Definition at line 150 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneViewNonConst ( MV &  mv,
const std::vector< int > &  index 
) [inline, static]

Creates a new MV that shares the selected contents of mv (shallow copy).

The index of the numvecs vectors shallow copied from mv are indicated by the indices given in index.

Returns:
Reference-counted pointer to the new multivector of type MV.

Definition at line 158 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneViewNonConst ( MV &  mv,
const Teuchos::Range1D index 
) [inline, static]

Non-const view of specified columns of mv.

Return a non-const view of the columns of mv specified by the given inclusive index range.

Parameters:
mv[in] Multivector to view (shallow non-const copy)
index[in] Inclusive index range of columns of mv
Returns:
Reference-counted pointer to the non-const view of specified columns of mv

Definition at line 169 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<const MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneView ( const MV &  mv,
const std::vector< int > &  index 
) [inline, static]

Creates a new const MV that shares the selected contents of mv (shallow copy).

The index of the numvecs vectors shallow copied from mv are indicated by the indices given in index.

Returns:
Reference-counted pointer to the new const multivector of type MV.

Definition at line 177 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static Teuchos::RCP<MV> Anasazi::MultiVecTraits< ScalarType, MV >::CloneView ( MV &  mv,
const Teuchos::Range1D index 
) [inline, static]

Const view of specified columns of mv.

Return a const view of the columns of mv specified by the given inclusive index range.

Parameters:
mv[in] Multivector to view (shallow const copy)
index[in] Inclusive index range of columns of mv
Returns:
Reference-counted pointer to the const view of specified columns of mv

Definition at line 188 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static int Anasazi::MultiVecTraits< ScalarType, MV >::GetVecLength ( const MV &  mv) [inline, static]

Return the number of rows in the given multivector mv.

If you are writing a specialization of MultiVecTraits for your own multivector type MV, please see the documentation of MultiVecTraitsExt in this file. Most Anasazi users will not need to do this, since MultiVecTraits already has specializations for Epetra, Tpetra, and Thyra objects.

Definition at line 203 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static int Anasazi::MultiVecTraits< ScalarType, MV >::GetNumberVecs ( const MV &  mv) [inline, static]

Obtain the number of vectors in mv.

Definition at line 207 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvTimesMatAddMv ( const ScalarType  alpha,
const MV &  A,
const Teuchos::SerialDenseMatrix< int, ScalarType > &  B,
const ScalarType  beta,
MV &  mv 
) [inline, static]

Update mv with $ \alpha AB + \beta mv $.

Definition at line 217 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvAddMv ( const ScalarType  alpha,
const MV &  A,
const ScalarType  beta,
const MV &  B,
MV &  mv 
) [inline, static]

Replace mv with $\alpha A + \beta B$.

Definition at line 224 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvScale ( MV &  mv,
const ScalarType  alpha 
) [inline, static]

Scale each element of the vectors in mv with alpha.

Definition at line 229 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvScale ( MV &  mv,
const std::vector< ScalarType > &  alpha 
) [inline, static]

Scale each element of the i-th vector in mv with alpha[i].

Definition at line 234 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvTransMv ( const ScalarType  alpha,
const MV &  A,
const MV &  mv,
Teuchos::SerialDenseMatrix< int, ScalarType > &  B 
) [inline, static]

Compute a dense matrix B through the matrix-matrix multiply $ \alpha A^Hmv $.

Definition at line 239 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvDot ( const MV &  mv,
const MV &  A,
std::vector< ScalarType > &  b 
) [inline, static]

Compute a vector b where the components are the individual dot-products of the i-th columns of A and mv, i.e. $b[i] = A[i]^Hmv[i]$.

Definition at line 244 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvNorm ( const MV &  mv,
std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &  normvec 
) [inline, static]

Compute the 2-norm of each individual vector of mv. Upon return, normvec[i] holds the value of $||mv_i||_2$, the i-th column of mv.

Definition at line 254 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::SetBlock ( const MV &  A,
const std::vector< int > &  index,
MV &  mv 
) [inline, static]

Copy the vectors in A to a set of vectors in mv indicated by the indices given in index.

The numvecs vectors in A are copied to a subset of vectors in mv indicated by the indices given in index, i.e. mv[index[i]] = A[i].

Definition at line 266 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::SetBlock ( const MV &  A,
const Teuchos::Range1D index,
MV &  mv 
) [inline, static]

Deep copy of A into specified columns of mv.

(Deeply) copy the first index.size() columns of A into the columns of mv specified by the given index range.

Postcondition: mv[i] = A[i - index.lbound()] for all i in [index.lbound(), index.ubound()]

Parameters:
A[in] Source multivector
index[in] Inclusive index range of columns of mv; index set of the target
mv[out] Target multivector

Definition at line 281 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::Assign ( const MV &  A,
MV &  mv 
) [inline, static]

mv := A

Assign (deep copy) A into mv.

Definition at line 287 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvRandom ( MV &  mv) [inline, static]

Replace the vectors in mv with random vectors.

Definition at line 292 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvInit ( MV &  mv,
const ScalarType  alpha = Teuchos::ScalarTraits<ScalarType>::zero() 
) [inline, static]

Replace each element of the vectors in mv with alpha.

Definition at line 297 of file AnasaziMultiVecTraits.hpp.

template<class ScalarType , class MV >
static void Anasazi::MultiVecTraits< ScalarType, MV >::MvPrint ( const MV &  mv,
std::ostream &  os 
) [inline, static]

Print the mv multi-vector to the os output stream.

Definition at line 307 of file AnasaziMultiVecTraits.hpp.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends