Ifpack2 Templated Preconditioning Package  Version 1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
Ifpack2::TriDiContainer< MatrixType, LocalScalarType > Class Template Reference

Store and solve a local TriDi linear problem. More...

#include <Ifpack2_TriDiContainer_decl.hpp>

Inheritance diagram for Ifpack2::TriDiContainer< MatrixType, LocalScalarType >:
Inheritance graph
[legend]

List of all members.

Public Types

Public typedefs
typedef MatrixType matrix_type
 The first template parameter of this class.
typedef LocalScalarType local_scalar_type
 The second template parameter of this class.
typedef MatrixType::scalar_type scalar_type
 The type of entries in the input (global) matrix.
typedef
MatrixType::local_ordinal_type 
local_ordinal_type
 The type of local indices in the input (global) matrix.
typedef
MatrixType::global_ordinal_type 
global_ordinal_type
 The type of global indices in the input (global) matrix.
typedef MatrixType::node_type node_type
 The Kokkos Node type of the input (global) matrix.
typedef Container< MatrixType >
::row_matrix_type 
row_matrix_type
 The (base class) type of the input matrix.

Public Member Functions

Constructor and destructor
 TriDiContainer (const Teuchos::RCP< const row_matrix_type > &matrix, const Teuchos::ArrayView< const local_ordinal_type > &localRows)
 Constructor.
virtual ~TriDiContainer ()
 Destructor (declared virtual for memory safety of derived classes).
Get and set methods
virtual size_t getNumRows () const
 The number of rows in the local matrix on the calling process.
virtual bool isInitialized () const
 Whether the container has been successfully initialized.
virtual bool isComputed () const
 Whether the container has been successfully computed.
virtual void setParameters (const Teuchos::ParameterList &List)
 Set all necessary parameters.
Mathematical functions
virtual void initialize ()
 Do all set-up operations that only require matrix structure.
virtual void compute ()
 Extract the local diagonal block and prepare the solver.
virtual void apply (const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const
 Compute Y := alpha * M^{-1} X + beta*Y.
virtual void weightedApply (const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, const Tpetra::Vector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &D, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const
 Compute Y := alpha * diag(D) * M^{-1} (diag(D) * X) + beta*Y.
Miscellaneous methods
virtual std::ostream & print (std::ostream &os) const
 Print information about this object to the given output stream.
Implementation of Teuchos::Describable
virtual std::string description () const
 A one-line description of this object.
virtual void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
 Print the object with some verbosity level to the given FancyOStream.

Detailed Description

template<typename MatrixType, typename LocalScalarType>
class Ifpack2::TriDiContainer< MatrixType, LocalScalarType >

Store and solve a local TriDi linear problem.

Please refer to the documentation of the Container interface. Currently, Containers are used by BlockRelaxation. Block relaxations need to be able to do two things:

  1. Store the diagonal blocks
  2. Solve linear systems with each diagonal block

TriDiContainer stores the diagonal blocks as TriDi matrices, and solves them using either LAPACK (for the four Scalar types that it supports) or a custom LU factorization (for Scalar types not supported by LAPACK).

As with Ifpack2::Container, MatrixType must be a specialization of Tpetra::RowMatrix or of its subclass Tpetra::CrsMatrix. Using a TriDi matrix for each block is a good idea when the blocks are small. For large and / or sparse blocks, it would probably be better to use an implementation of Container that stores the blocks sparsely, in particular SparseContainer.

This class may store the TriDi local matrix using values of a different type (LocalScalarType) than those in MatrixType. You may mix and match so long as implicit conversions are available between LocalScalarType and MatrixType::scalar_type.

This class currently assumes the following about the column and row Maps of the input matrix:

  1. On all processes, the column and row Maps begin with the same set of on-process entries, in the same order. That is, on-process row and column indices are the same.
  2. On all processes, all off-process indices in the column Map of the input matrix occur after that initial set.

These assumptions may be violated if MatrixType is a Tpetra::CrsMatrix specialization and was constructed with a user-provided column Map. The assumptions are not mathematically necessary and could be relaxed at any time. Implementers who wish to do so will need to modify the extract() method, so that it translates explicitly between local row and column indices, instead of just assuming that they are the same.


Member Typedef Documentation

template<typename MatrixType, typename LocalScalarType>
typedef MatrixType Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::matrix_type

The first template parameter of this class.

This must be either a Tpetra::RowMatrix specialization or a Tpetra::CrsMatrix specialization. It may have entirely different template parameters (e.g., scalar_type) than InverseType.

template<typename MatrixType, typename LocalScalarType>
typedef LocalScalarType Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::local_scalar_type

The second template parameter of this class.

template<typename MatrixType, typename LocalScalarType>
typedef MatrixType::scalar_type Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::scalar_type

The type of entries in the input (global) matrix.

Reimplemented from Ifpack2::Container< MatrixType >.

template<typename MatrixType, typename LocalScalarType>
typedef MatrixType::local_ordinal_type Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::local_ordinal_type

The type of local indices in the input (global) matrix.

Reimplemented from Ifpack2::Container< MatrixType >.

template<typename MatrixType, typename LocalScalarType>
typedef MatrixType::global_ordinal_type Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::global_ordinal_type

The type of global indices in the input (global) matrix.

Reimplemented from Ifpack2::Container< MatrixType >.

template<typename MatrixType, typename LocalScalarType>
typedef MatrixType::node_type Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::node_type

The Kokkos Node type of the input (global) matrix.

Reimplemented from Ifpack2::Container< MatrixType >.

template<typename MatrixType, typename LocalScalarType>
typedef Container<MatrixType>::row_matrix_type Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::row_matrix_type

The (base class) type of the input matrix.

The input matrix to the constructor may be either a Tpetra::RowMatrix specialization or a Tpetra::CrsMatrix specialization. However, we want to make the constructor as general as possible, so we always accept the matrix as a Tpetra::RowMatrix. This typedef is the appropriate specialization of Tpetra::RowMatrix.

Reimplemented from Ifpack2::Container< MatrixType >.


Constructor & Destructor Documentation

template<class MatrixType , class LocalScalarType >
Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::TriDiContainer ( const Teuchos::RCP< const row_matrix_type > &  matrix,
const Teuchos::ArrayView< const local_ordinal_type > &  localRows 
)

Constructor.

matrix [in] The original input matrix. This Container will construct a local diagonal block from the rows given by localRows.

Parameters:
localRows[in] The set of (local) rows assigned to this container. localRows[i] == j, where i (from 0 to getNumRows() - 1) indicates the SparseContainer's row, and j indicates the local row in the calling process. localRows.size() gives the number of rows in the local matrix on each process. This may be different on different processes.
template<class MatrixType , class LocalScalarType >
Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::~TriDiContainer ( ) [virtual]

Destructor (declared virtual for memory safety of derived classes).


Member Function Documentation

template<class MatrixType , class LocalScalarType >
size_t Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::getNumRows ( ) const [virtual]

The number of rows in the local matrix on the calling process.

Local matrices must be square. Each process has exactly one matrix. Those matrices may vary in dimensions.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
bool Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::isInitialized ( ) const [virtual]

Whether the container has been successfully initialized.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
bool Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::isComputed ( ) const [virtual]

Whether the container has been successfully computed.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
void Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::setParameters ( const Teuchos::ParameterList List) [virtual]

Set all necessary parameters.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
void Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::initialize ( ) [virtual]

Do all set-up operations that only require matrix structure.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
void Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::compute ( ) [virtual]

Extract the local diagonal block and prepare the solver.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
void Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::apply ( const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &  X,
Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &  Y,
Teuchos::ETransp  mode = Teuchos::NO_TRANS,
scalar_type  alpha = Teuchos::ScalarTraits<scalar_type>::one(),
scalar_type  beta = Teuchos::ScalarTraits<scalar_type>::zero() 
) const [virtual]

Compute Y := alpha * M^{-1} X + beta*Y.

Implements Ifpack2::Container< MatrixType >.

Compute Y := alpha * diag(D) * M^{-1} (diag(D) * X) + beta*Y.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
std::ostream & Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::print ( std::ostream &  os) const [virtual]

Print information about this object to the given output stream.

operator<< uses this method.

Implements Ifpack2::Container< MatrixType >.

template<class MatrixType , class LocalScalarType >
std::string Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::description ( ) const [virtual]

A one-line description of this object.

Reimplemented from Teuchos::Describable.

template<class MatrixType , class LocalScalarType >
void Ifpack2::TriDiContainer< MatrixType, LocalScalarType >::describe ( Teuchos::FancyOStream out,
const Teuchos::EVerbosityLevel  verbLevel = Teuchos::Describable::verbLevel_default 
) const [virtual]

Print the object with some verbosity level to the given FancyOStream.

Reimplemented from Teuchos::Describable.


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