44 #ifndef IFPACK2_BORDEREDOPERATOR_DEF_HPP 45 #define IFPACK2_BORDEREDOPERATOR_DEF_HPP 47 #include "Ifpack2_BorderedOperator_decl.hpp" 48 #include "Tpetra_MultiVector.hpp" 49 #include "Teuchos_TestForException.hpp" 53 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node >
55 BorderedOperator (
const Teuchos::RCP<
const Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node > >& A) :
58 TEUCHOS_TEST_FOR_EXCEPTION(
59 A_.is_null (), std::runtime_error,
60 Teuchos::typeName (*
this) <<
"::BorderedOperator constructor: " 61 "The input Operator A is null.");
64 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node >
65 Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
68 return A_->getDomainMap();
71 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node >
72 Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
75 return A_->getRangeMap();
78 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node >
82 return A_->hasTransposeApply();
85 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node >
88 apply (
const Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node >& X,
89 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node >& Y,
90 Teuchos::ETransp mode,
94 TEUCHOS_TEST_FOR_EXCEPTION(
95 X.getNumVectors() != Y.getNumVectors(), std::runtime_error,
96 "Ifpack2::BorderedOperator::apply(): X.getNumVectors() = " 97 << X.getNumVectors() <<
" != Y.getNumVectors() = " 98 << Y.getNumVectors() <<
".");
99 A_->apply (X, Y, mode, coefAx, coefY );
104 #define IFPACK2_BORDEREDOPERATOR_INSTANT(S,LO,GO,N) \ 105 template class Ifpack2::BorderedOperator< S, LO, GO, N >; virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The range Map of this operator. It must be compatible with Y.getMap().
Definition: Ifpack2_BorderedOperator_def.hpp:73
void apply(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Apply the bordered operator.
Definition: Ifpack2_BorderedOperator_def.hpp:88
bool hasTransposeApply() const
Whether this operator can apply the transpose or conjugate transpose.
Definition: Ifpack2_BorderedOperator_def.hpp:80
BorderedOperator(const Teuchos::RCP< const Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A)
Constructor with Tpetra::Operator input.
Definition: Ifpack2_BorderedOperator_def.hpp:55
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The domain Map of this operator. It must be compatible with X.getMap().
Definition: Ifpack2_BorderedOperator_def.hpp:66