Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Public Types | List of all members
Tpetra::details::ApplyOp< Scalar, OperatorType > Class Template Reference

A class for wrapping an Operator apply in a Operator. More...

#include <Tpetra_ApplyOp.hpp>

Inheritance diagram for Tpetra::details::ApplyOp< Scalar, OperatorType >:
Inheritance graph
[legend]

Public Types

typedef OperatorType::scalar_type scalar_type
 The type of the entries of the input OperatorType.
 
typedef OperatorType::local_ordinal_type local_ordinal_type
 The type of local indices in the input OperatorType.
 
typedef OperatorType::global_ordinal_type global_ordinal_type
 The type of global indices in the input OperatorType.
 
typedef OperatorType::node_type node_type
 The type of the Kokkos Node used by the input OperatorType.
 

Public Member Functions

Constructor and destructor
 ApplyOp (const Teuchos::RCP< const OperatorType > &op)
 Constructor.
 
virtual ~ApplyOp ()
 Destructor.
 
Pure virtual functions to be overridden by subclasses.
virtual bool hasDiagonal () const
 Whether this operator can return its diagonal.
 
virtual void getLocalDiagCopy (Vector< Scalar, OperatorType::local_ordinal_type, OperatorType::global_ordinal_type, OperatorType::node_type > &diag) const
 Get the diagonal of the operator.
 

Methods implementing Operator

Teuchos::RCP< const OperatorTypeoperator_
 The underlying Operator object.
 
void apply (const Tpetra::MultiVector< Scalar, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< Scalar, local_ordinal_type, global_ordinal_type, node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
 Compute Y = beta*Y + alpha*Op(A)*X, where Op(A) is either A, $A^T$, or $A^H$.
 
bool hasTransposeApply () const
 Whether this Operator's apply() method can apply the transpose or conjugate transpose.
 
Teuchos::RCP< const Tpetra::Map< local_ordinal_type, global_ordinal_type, node_type > > getDomainMap () const
 The domain Map of this Operator.
 
Teuchos::RCP< const Tpetra::Map< local_ordinal_type, global_ordinal_type, node_type > > getRangeMap () const
 The range Map of this Operator.
 

Detailed Description

template<class Scalar, class OperatorType>
class Tpetra::details::ApplyOp< Scalar, OperatorType >

A class for wrapping an Operator apply in a Operator.

Note
Most Tpetra users do not need to use this class. It will be useful to Tpetra users who want to do mixed-precision operator apply, where the operator's data has a different precision than that of the input and output vectors. If your operator and vectors have the same type of entries, then you don't need to use this class.

This class makes a Operator<OpScalar, ...> "look like" an Operator<Scalar, ...>, where OpScalar and Scalar may be different types. It does so by working around a limitation of C++, namely that template methods of a class can't be virtual.

Template Parameters
ScalarThe type of the entries of the input and output MultiVector of the apply() method. Same as the first template parameter of Operator.
OperatorTypeThe type of the underlying Operator, whose first template parameter OperatorType::scalar_type may differ from this Operator's Scalar type.

Definition at line 76 of file Tpetra_ApplyOp.hpp.

Member Typedef Documentation

◆ scalar_type

typedef OperatorType::scalar_type Tpetra::details::ApplyOp< Scalar, OperatorType >::scalar_type

The type of the entries of the input OperatorType.

Definition at line 86 of file Tpetra_ApplyOp.hpp.

◆ local_ordinal_type

typedef OperatorType::local_ordinal_type Tpetra::details::ApplyOp< Scalar, OperatorType >::local_ordinal_type

The type of local indices in the input OperatorType.

Definition at line 89 of file Tpetra_ApplyOp.hpp.

◆ global_ordinal_type

typedef OperatorType::global_ordinal_type Tpetra::details::ApplyOp< Scalar, OperatorType >::global_ordinal_type

The type of global indices in the input OperatorType.

Definition at line 92 of file Tpetra_ApplyOp.hpp.

◆ node_type

typedef OperatorType::node_type Tpetra::details::ApplyOp< Scalar, OperatorType >::node_type

The type of the Kokkos Node used by the input OperatorType.

Definition at line 95 of file Tpetra_ApplyOp.hpp.

Constructor & Destructor Documentation

◆ ApplyOp()

Tpetra::details::ApplyOp< Scalar, OperatorType >::ApplyOp ( const Teuchos::RCP< const OperatorType > & op)
inline

Constructor.

Parameters
A[in] The Operator to wrap with a different Scalar type.

Definition at line 104 of file Tpetra_ApplyOp.hpp.

◆ ~ApplyOp()

Destructor.

Definition at line 108 of file Tpetra_ApplyOp.hpp.

Member Function Documentation

◆ apply()

void Tpetra::details::ApplyOp< Scalar, OperatorType >::apply ( const Tpetra::MultiVector< Scalar, local_ordinal_type, global_ordinal_type, node_type > & X,
Tpetra::MultiVector< Scalar, local_ordinal_type, global_ordinal_type, node_type > & Y,
Teuchos::ETransp mode = Teuchos::NO_TRANS,
Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
Scalar beta = Teuchos::ScalarTraits<Scalar>::zero() ) const
inlinevirtual

Compute Y = beta*Y + alpha*Op(A)*X, where Op(A) is either A, $A^T$, or $A^H$.

This method calls the underlying Operator object's applyTempl<Scalar,Scalar>() method.

Implements Tpetra::Operator< Scalar, OperatorType::local_ordinal_type, OperatorType::global_ordinal_type, OperatorType::node_type >.

Definition at line 120 of file Tpetra_ApplyOp.hpp.

◆ hasTransposeApply()

bool Tpetra::details::ApplyOp< Scalar, OperatorType >::hasTransposeApply ( ) const
inlinevirtual

Whether this Operator's apply() method can apply the transpose or conjugate transpose.

This depends on whether it is true for the Operator that this object wraps.

Reimplemented from Tpetra::Operator< Scalar, OperatorType::local_ordinal_type, OperatorType::global_ordinal_type, OperatorType::node_type >.

Definition at line 135 of file Tpetra_ApplyOp.hpp.

◆ getDomainMap()

Teuchos::RCP< const Tpetra::Map< local_ordinal_type, global_ordinal_type, node_type > > Tpetra::details::ApplyOp< Scalar, OperatorType >::getDomainMap ( ) const
inlinevirtual

◆ getRangeMap()

Teuchos::RCP< const Tpetra::Map< local_ordinal_type, global_ordinal_type, node_type > > Tpetra::details::ApplyOp< Scalar, OperatorType >::getRangeMap ( ) const
inlinevirtual

◆ hasDiagonal()

bool Tpetra::Operator< Scalar, OperatorType::local_ordinal_type , OperatorType::global_ordinal_type , OperatorType::node_type >::hasDiagonal ( ) const
virtualinherited

Whether this operator can return its diagonal.

By default, this returns false. Subclasses must override this method if they can supply a diagonal.

Definition at line 139 of file Tpetra_Operator.hpp.

◆ getLocalDiagCopy()

void Tpetra::Operator< Scalar, OperatorType::local_ordinal_type , OperatorType::global_ordinal_type , OperatorType::node_type >::getLocalDiagCopy ( Vector< Scalar, OperatorType::local_ordinal_type , OperatorType::global_ordinal_type , OperatorType::node_type > & diag) const
virtualinherited

Get the diagonal of the operator.

By default, this throws. Subclasses must override this method if they can supply a diagonal.

Definition at line 145 of file Tpetra_Operator.hpp.

Member Data Documentation

◆ operator_

Teuchos::RCP<const OperatorType> Tpetra::details::ApplyOp< Scalar, OperatorType >::operator_
protected

The underlying Operator object.

Definition at line 154 of file Tpetra_ApplyOp.hpp.


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