Reference documentation for deal.II version Git 9e557027ad 2021-09-25 18:07:42 +0200

#include <deal.II/lac/trilinos_sparse_matrix.h>

[legend]

## Public Types

using VectorType = Epetra_MultiVector

using Range = VectorType

using Domain = VectorType

## Public Member Functions

Constructors / destructor

TrilinosPayload (const TrilinosWrappers::SparseMatrix &matrix_exemplar, const TrilinosWrappers::SparseMatrix &matrix)

TrilinosPayload (const TrilinosWrappers::SparseMatrix &matrix_exemplar, const TrilinosWrappers::PreconditionBase &preconditioner)

TrilinosPayload (const TrilinosWrappers::PreconditionBase &preconditioner_exemplar, const TrilinosWrappers::PreconditionBase &preconditioner)

template<typename Solver , typename Preconditioner >
std::enable_if< std::is_base_of< TrilinosWrappers::SolverBase, Solver >::value &&std::is_base_of< TrilinosWrappers::PreconditionBase, Preconditioner >::value, TrilinosPayload >::type inverse_payload (Solver &, const Preconditioner &) const

template<typename Solver , typename Preconditioner >
std::enable_if< !(std::is_base_of< TrilinosWrappers::SolverBase, Solver >::value &&std::is_base_of< TrilinosWrappers::PreconditionBase, Preconditioner >::value), TrilinosPayload >::type inverse_payload (Solver &, const Preconditioner &) const

Core Epetra_Operator functionality
virtual bool UseTranspose () const override

virtual int SetUseTranspose (bool UseTranspose) override

virtual int Apply (const VectorType &X, VectorType &Y) const override

virtual int ApplyInverse (const VectorType &Y, VectorType &X) const override

virtual const char * Label () const override

virtual const Epetra_Comm & Comm () const override

virtual const Epetra_Map & OperatorDomainMap () const override

virtual const Epetra_Map & OperatorRangeMap () const override

## Private Member Functions

template<typename EpetraOpType >
TrilinosPayload (EpetraOpType &op, const bool supports_inverse_operations, const bool use_transpose, const MPI_Comm &mpi_communicator, const IndexSet &locally_owned_domain_indices, const IndexSet &locally_owned_range_indices)

virtual bool HasNormInf () const override

virtual double NormInf () const override

## Private Attributes

bool use_transpose

Epetra_MpiComm communicator

Epetra_Map domain_map

Epetra_Map range_map

## LinearOperator functionality

std::function< void(VectorType &, const VectorType &)> vmult

std::function< void(VectorType &, const VectorType &)> Tvmult

std::function< void(VectorType &, const VectorType &)> inv_vmult

std::function< void(VectorType &, const VectorType &)> inv_Tvmult

IndexSet locally_owned_domain_indices () const

IndexSet locally_owned_range_indices () const

MPI_Comm get_mpi_communicator () const

void transpose ()

## Detailed Description

This is an extension class to LinearOperators for Trilinos sparse matrix and preconditioner types. It provides the interface to performing basic operations (vmult and Tvmult) on Trilinos vector types. It fulfills the requirements necessary for wrapping a Trilinos solver, which calls Epetra_Operator functions, as a LinearOperator.

Note
The TrilinosWrappers::SparseMatrix or TrilinosWrappers::PreconditionBase that this payload wraps is passed by reference to the vmult and Tvmult functions. This object is not thread-safe when the transpose flag is set on it or the Trilinos object to which it refers. See the docuemtation for the TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::SetUseTranspose() function for further details.

Definition at line 2045 of file trilinos_sparse_matrix.h.

## ◆ VectorType

Definition for the internally supported vector type.

Definition at line 2051 of file trilinos_sparse_matrix.h.

## ◆ Range

Definition for the vector type for the domain space of the operator.

Definition at line 2056 of file trilinos_sparse_matrix.h.

## ◆ Domain

Definition for the vector type for the range space of the operator.

Definition at line 2061 of file trilinos_sparse_matrix.h.

## Constructor & Destructor Documentation

Default constructor

Note
By design, the resulting object is inoperable since there is insufficient information with which to construct the domain and range maps.

Definition at line 2321 of file trilinos_sparse_matrix.cc.

Constructor for a sparse matrix based on an exemplary matrix

Definition at line 2354 of file trilinos_sparse_matrix.cc.

Constructor for a sparse matrix based on an exemplary payload

Definition at line 2368 of file trilinos_sparse_matrix.cc.

Constructor for a preconditioner based on an exemplary matrix

Definition at line 2383 of file trilinos_sparse_matrix.cc.

Constructor for a preconditioner based on an exemplary preconditioner

Definition at line 2396 of file trilinos_sparse_matrix.cc.

Constructor for a preconditioner based on an exemplary payload

Definition at line 2410 of file trilinos_sparse_matrix.cc.

Default copy constructor

Definition at line 2423 of file trilinos_sparse_matrix.cc.

Composite copy constructor

This is required for PackagedOperations as it sets up the domain and range maps, and composite vmult and Tvmult operations based on the combined operation of both operations

Definition at line 2438 of file trilinos_sparse_matrix.cc.

overridevirtualdefault

Destructor

template<typename EpetraOpType >
 TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::TrilinosPayload ( EpetraOpType & op, const bool supports_inverse_operations, const bool use_transpose, const MPI_Comm & mpi_communicator, const IndexSet & locally_owned_domain_indices, const IndexSet & locally_owned_range_indices )
private

A generic constructor.

This constructor allows the payload to be configured from any objects that can be cast to an Epetra operation. The supports_inverse_operations flag indicates that the op can be used to compute inverse operations; preconditioners have such a facility.

## Member Function Documentation

Return a payload configured for identity operations

Definition at line 2451 of file trilinos_sparse_matrix.cc.

Return a payload configured for null operations

Definition at line 2477 of file trilinos_sparse_matrix.cc.

Return a payload configured for transpose operations

Definition at line 2517 of file trilinos_sparse_matrix.cc.

template<typename Solver , typename Preconditioner >

Return a payload configured for inverse operations

Invoking this factory function will configure two additional functions, namely inv_vmult and inv_Tvmult, both of which wrap inverse operations. The vmult and Tvmult operations retain the standard definitions inherited from op.

Note
This function is enabled only if the solver and preconditioner derive from the respective TrilinosWrappers base classes. The C++ compiler will therefore only consider this function if the following criterion are satisfied:
1. the Solver derives from TrilinosWrappers::SolverBase, and
2. the Preconditioner derives from TrilinosWrappers::PreconditionBase.

template<typename Solver , typename Preconditioner >

Return a payload configured for inverse operations

Invoking this factory function will configure two additional functions, namely inv_vmult and inv_Tvmult, both of which are disabled because the Solver or Preconditioner are not compatible with Epetra_MultiVector. The vmult and Tvmult operations retain the standard definitions inherited from op.

Note
The C++ compiler will only consider this function if the following criterion are satisfied:
1. the Solver does not derive from TrilinosWrappers::SolverBase, and
2. the Preconditioner does not derive from TrilinosWrappers::PreconditionBase.

## ◆ locally_owned_domain_indices()

Return an IndexSet that defines the partitioning of the domain space of this matrix, i.e., the partitioning of the vectors this matrix has to be multiplied with / operate on.

Definition at line 2527 of file trilinos_sparse_matrix.cc.

## ◆ locally_owned_range_indices()

Return an IndexSet that defines the partitioning of the range space of this matrix, i.e., the partitioning of the vectors that result from matrix-vector products.

Definition at line 2535 of file trilinos_sparse_matrix.cc.

## ◆ get_mpi_communicator()

Return the MPI communicator object in use with this Payload.

Definition at line 2543 of file trilinos_sparse_matrix.cc.

## ◆ transpose()

Sets an internal flag so that all operations performed by the matrix, i.e., multiplications, are done in transposed order.

Note
This does not reshape the matrix to transposed form directly, so care should be taken when using this flag.

Definition at line 2551 of file trilinos_sparse_matrix.cc.

## ◆ UseTranspose()

overridevirtual

Return the status of the transpose flag for this operator

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2559 of file trilinos_sparse_matrix.cc.

## ◆ SetUseTranspose()

 int TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::SetUseTranspose ( bool UseTranspose )
overridevirtual

Sets an internal flag so that all operations performed by the matrix, i.e., multiplications, are done in transposed order.

This overloads the same function from the Trilinos class Epetra_Operator.

Note
This does not reshape the matrix to transposed form directly, so care should be taken when using this flag. When the flag is set to true (either here or directly on the underlying Trilinos object itself), this object is no longer thread-safe. In essence, it is not possible ensure that the transposed state of the LinearOperator and the underlying Trilinos object remain synchronized throughout all operations that may occur on different threads simultaneously.

Definition at line 2567 of file trilinos_sparse_matrix.cc.

## ◆ Apply()

 int TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::Apply ( const VectorType & X, VectorType & Y ) const
overridevirtual

Apply the vmult operation on a vector X (of internally defined type VectorType) and store the result in the vector Y.

This overloads the same function from the Trilinos class Epetra_Operator.

Note
The intended operation depends on the status of the internal transpose flag. If this flag is set to true, the result will be the equivalent of performing a Tvmult operation.

Definition at line 2582 of file trilinos_sparse_matrix.cc.

## ◆ ApplyInverse()

 int TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::ApplyInverse ( const VectorType & Y, VectorType & X ) const
overridevirtual

Apply the vmult inverse operation on a vector X (of internally defined type VectorType) and store the result in the vector Y.

In practise, this function is only called from a Trilinos solver if the wrapped object is to act as a preconditioner.

This overloads the same function from the Trilinos class Epetra_Operator.

Note
This function will only be operable if the payload has been initialized with an InverseOperator, or is a wrapper to a preconditioner. If not, then using this function will lead to an error being thrown.
The intended operation depends on the status of the internal transpose flag. If this flag is set to true, the result will be the equivalent of performing a Tvmult operation.

Definition at line 2593 of file trilinos_sparse_matrix.cc.

## ◆ Label()

 const char * TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::Label ( ) const
overridevirtual

Return a label to describe this class.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2604 of file trilinos_sparse_matrix.cc.

## ◆ Comm()

 const Epetra_Comm & TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::Comm ( ) const
overridevirtual

Return a reference to the underlying MPI communicator for this object.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2612 of file trilinos_sparse_matrix.cc.

## ◆ OperatorDomainMap()

 const Epetra_Map & TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::OperatorDomainMap ( ) const
overridevirtual

Return the partitioning of the domain space of this matrix, i.e., the partitioning of the vectors this matrix has to be multiplied with.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2620 of file trilinos_sparse_matrix.cc.

## ◆ OperatorRangeMap()

 const Epetra_Map & TrilinosWrappers::internal::LinearOperatorImplementation::TrilinosPayload::OperatorRangeMap ( ) const
overridevirtual

Return the partitioning of the range space of this matrix, i.e., the partitioning of the vectors that are result from matrix-vector products.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2628 of file trilinos_sparse_matrix.cc.

## ◆ HasNormInf()

overrideprivatevirtual

Return a flag that describes whether this operator can return the computation of the infinity norm. Since in general this is not the case, this always returns a negetive result.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2636 of file trilinos_sparse_matrix.cc.

## ◆ NormInf()

overrideprivatevirtual

Return the infinity norm of this operator. Throws an error since, in general, we cannot compute this value.

This overloads the same function from the Trilinos class Epetra_Operator.

Definition at line 2644 of file trilinos_sparse_matrix.cc.

## ◆ vmult

The standard matrix-vector operation to be performed by the payload when Apply is called.

Note
This is not called by a LinearOperator, but rather by Trilinos functions that expect this to mimic the action of the LinearOperator.

Definition at line 2242 of file trilinos_sparse_matrix.h.

## ◆ Tvmult

The standard transpose matrix-vector operation to be performed by the payload when Apply is called.

Note
This is not called by a LinearOperator, but rather by Trilinos functions that expect this to mimic the action of the LinearOperator.

Definition at line 2251 of file trilinos_sparse_matrix.h.

## ◆ inv_vmult

The inverse matrix-vector operation to be performed by the payload when ApplyInverse is called.

Note
This is not called by a LinearOperator, but rather by Trilinos functions that expect this to mimic the action of the InverseOperator.

Definition at line 2261 of file trilinos_sparse_matrix.h.

## ◆ inv_Tvmult

The inverse transpose matrix-vector operation to be performed by the payload when ApplyInverse is called.

Note
This is not called by a LinearOperator, but rather by Trilinos functions that expect this to mimic the action of the InverseOperator.

Definition at line 2271 of file trilinos_sparse_matrix.h.

## ◆ use_transpose

private

A flag recording whether the operator is to perform standard matrix-vector multiplication, or the transpose operation.

Definition at line 2411 of file trilinos_sparse_matrix.h.

## ◆ communicator

private

Internal communication pattern in case the matrix needs to be copied from deal.II format.

Definition at line 2417 of file trilinos_sparse_matrix.h.

## ◆ domain_map

private

Epetra_Map that sets the partitioning of the domain space of this operator.

Definition at line 2423 of file trilinos_sparse_matrix.h.