47 #ifndef MUELU_TPETRAOPERATOR_DEF_HPP 48 #define MUELU_TPETRAOPERATOR_DEF_HPP 52 #ifdef HAVE_MUELU_TPETRA 54 #include <Xpetra_BlockedMap.hpp> 55 #include <Xpetra_Matrix.hpp> 56 #include <Xpetra_CrsMatrixWrap.hpp> 57 #include <Xpetra_BlockedCrsMatrix.hpp> 58 #include <Xpetra_TpetraMultiVector.hpp> 61 #include "MueLu_Hierarchy.hpp" 62 #include "MueLu_Utilities.hpp" 67 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
70 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> Matrix;
71 typedef Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>
Map;
72 typedef Xpetra::BlockedMap<LocalOrdinal, GlobalOrdinal, Node> BlockedMap;
74 RCP<Matrix> A = Hierarchy_->GetLevel(0)->template Get<RCP<Matrix> >(
"A");
77 if(bDomainMap.
is_null() ==
false) {
78 return Xpetra::toTpetraNonZero(bDomainMap->getFullMap());
80 return Xpetra::toTpetraNonZero(A->getDomainMap());
83 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
85 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> Matrix;
86 typedef Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>
Map;
87 typedef Xpetra::BlockedMap<LocalOrdinal, GlobalOrdinal, Node> BlockedMap;
89 RCP<Matrix> A = Hierarchy_->GetLevel(0)->template Get<RCP<Matrix> >(
"A");
92 if(bRangeMap.
is_null() ==
false) {
93 return Xpetra::toTpetraNonZero(bRangeMap->getFullMap());
95 return Xpetra::toTpetraNonZero(A->getRangeMap());
98 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
103 typedef Xpetra::TpetraMultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> XTMV;
106 TMV& temp_x =
const_cast<TMV &
>(X);
107 const XTMV tX(rcpFromRef(temp_x));
108 XTMV tY(rcpFromRef(Y));
111 Hierarchy_->Iterate(tX, tY, 1,
true);
113 }
catch (std::exception& e) {
114 std::cerr <<
"MueLu::TpetraOperator::apply : detected an exception" << std::endl
115 << e.what() << std::endl;
120 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
125 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 #endif //ifdef HAVE_MUELU_TPETRA 134 #endif //ifdef MUELU_TPETRAOPERATOR_DEF_HPP Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
Returns the Tpetra::Map object associated with the domain of this operator.
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this operator.
Namespace for MueLu classes and methods.
Classes::Map< LocalOrdinal, GlobalOrdinal, Node > Map
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetHierarchy() const
Direct access to the underlying MueLu::Hierarchy.
bool hasTransposeApply() const
Indicates whether this operator supports applying the adjoint operator.
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 >::one()) const
Returns in Y the result of a Tpetra::Operator applied to a Tpetra::MultiVector X. ...