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

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

#include <Ifpack2_DenseContainer_decl.hpp>

Detailed Description

template<class MatrixType, class LocalScalarType, bool lapackSupportsScalar = ::Ifpack2::Details::LapackSupportsScalar<LocalScalarType>::value>
class Ifpack2::DenseContainer< MatrixType, LocalScalarType, lapackSupportsScalar >

Store and solve a local dense linear problem.

Template Parameters
MatrixTypeA specialization of Tpetra::RowMatrix.

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

DenseContainer stores the diagonal blocks as dense 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. Using a dense 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 dense 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 the input matrix is a Tpetra::CrsMatrix that 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.


The documentation for this class was generated from the following file: