Block relaxation preconditioners (or smoothers) for Tpetra::RowMatrix and Tpetra::CrsMatrix sparse matrices.
More...
|
Teuchos::RCP< Ifpack2::Partitioner< Tpetra::RowGraph< local_ordinal_type, global_ordinal_type, node_type > > > | getPartitioner () |
| For diagnostic purposes. More...
|
|
|
void | setParameters (const Teuchos::ParameterList ¶ms) |
| Sets all the parameters for the preconditioner. More...
|
|
void | initialize () |
| Initialize. More...
|
|
bool | isInitialized () const |
| Returns true if the preconditioner has been successfully initialized. More...
|
|
void | computeBlockCrs () |
|
void | compute () |
| compute the preconditioner for the specified matrix, diagonal perturbation thresholds and relaxation parameters. More...
|
|
bool | isComputed () const |
| Return true if compute() has been called. More...
|
|
|
virtual void | setMatrix (const Teuchos::RCP< const row_matrix_type > &A) |
| Change the matrix to be preconditioned. More...
|
|
|
void | apply (const MV &X, MV &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const |
| Applies the preconditioner to X, returns the result in Y. More...
|
|
Teuchos::RCP< const map_type > | getDomainMap () const |
| Returns the Tpetra::Map object associated with the domain of this operator. More...
|
|
Teuchos::RCP< const map_type > | getRangeMap () const |
| Returns the Tpetra::Map object associated with the range of this operator. More...
|
|
bool | hasTransposeApply () const |
|
void | applyMat (const MV &X, MV &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS) const |
| Applies the matrix to a Tpetra::MultiVector. More...
|
|
|
Teuchos::RCP< const Teuchos::Comm< int > > | getComm () const |
| The communicator over which the input matrix is distributed. More...
|
|
Teuchos::RCP< const row_matrix_type > | getMatrix () const |
| The input matrix of this preconditioner's constructor. More...
|
|
int | getNumInitialize () const |
| Returns the number of calls to initialize(). More...
|
|
int | getNumCompute () const |
| Returns the number of calls to compute(). More...
|
|
int | getNumApply () const |
| Returns the number of calls to apply(). More...
|
|
double | getInitializeTime () const |
| Returns the time spent in initialize(). More...
|
|
double | getComputeTime () const |
| Returns the time spent in compute(). More...
|
|
double | getApplyTime () const |
| Returns the time spent in apply(). More...
|
|
|
std::string | description () const |
| A one-line description of this object. More...
|
|
void | describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const |
| Print the object with some verbosity level to an FancyOStream object. More...
|
|
virtual | ~Preconditioner () |
| Destructor. More...
|
|
virtual void | apply (const Tpetra::MultiVector< MatrixType::scalar_type, MatrixType::local_ordinal_type, MatrixType::global_ordinal_type, MatrixType::node_type > &X, Tpetra::MultiVector< MatrixType::scalar_type, MatrixType::local_ordinal_type, MatrixType::global_ordinal_type, MatrixType::node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, MatrixType::scalar_type alpha=Teuchos::ScalarTraits< MatrixType::scalar_type >::one(), MatrixType::scalar_type beta=Teuchos::ScalarTraits< MatrixType::scalar_type >::zero()) const=0 |
| Apply the preconditioner to X, putting the result in Y. More...
|
|
virtual void | setMatrix (const Teuchos::RCP< const Tpetra::RowMatrix< MatrixType::scalar_type, MatrixType::local_ordinal_type, MatrixType::global_ordinal_type, MatrixType::node_type > > &A)=0 |
| Set the new matrix. More...
|
|
virtual | ~CanChangeMatrix () |
| Destructor. More...
|
|
template<class MatrixType, class ContainerType = Container<MatrixType>>
class Ifpack2::BlockRelaxation< MatrixType, ContainerType >
Block relaxation preconditioners (or smoothers) for Tpetra::RowMatrix and Tpetra::CrsMatrix sparse matrices.
- Template Parameters
-
MatrixType | A specialization of Tpetra::RowMatrix. |
ContainerType | DO NOT SPECIFY THIS EXPLICITLY. This exists only for backwards compatibility. |
This class implements the construction and application of block relaxation preconditioners and smoothers, for sparse matrices represented as Tpetra::RowMatrix or Tpetra::CrsMatrix. This class implements Tpetra::Operator, and its apply() method applies the block relaxation.
BlockRelaxation implements block variants of the following relaxations:
-
Damped Jacobi
-
Damped Gauss-Seidel, i.e., SOR
-
Damped symmetric Gauss-Seidel, i.e., symmetric SOR
For a list of supported parameters, please refer to the documentation of setParameters().
template<class MatrixType , class ContainerType >
Constructor.
- Parameters
-
Matrix | [in] The matrix for which to make the constructor. Tpetra::RowMatrix is the base class of Tpetra::CrsMatrix, so you may give either a Tpetra::RowMatrix or a Tpetra::CrsMatrix here. |
The results of apply() are undefined if you change the sparse matrix after invoking this constructor, without first calling initialize() and compute() (in that order) to reinitialize the preconditioner.
The "explicit" keyword just means that you must invoke the Relaxation constructor explicitly; you aren't allowed to use it as an implicit conversion ("cast"). For example, you may do this (namespaces and Tpetra template parameters omitted for brevity):
RCP<const CrsMatrix<...> > A = ...;
but you may not do this:
RCP<const CrsMatrix<...> > A = ...;
foo (A);
template<class MatrixType , class ContainerType >
Change the matrix to be preconditioned.
- Parameters
-
- Postcondition
! isInitialized ()
-
! isComputed ()
Calling this method with a matrix different than the current matrix resets the preconditioner's state. After calling this method with a nonnull input, you must first call initialize() and compute() (in that order) before you may call apply().
You may call this method with a null input. If A is null, then you may not call initialize() or compute() until you first call this method again with a nonnull input. This method invalidates any previous factorization whether or not A is null, so calling setMatrix() with a null input is one way to clear the preconditioner's state (and free any memory that it may be using).
The new matrix A need not necessarily have the same Maps or even the same communicator as the original matrix.