47#ifndef MUELU_TPETRAOPERATOR_DEF_HPP
48#define MUELU_TPETRAOPERATOR_DEF_HPP
52#include <Xpetra_BlockedMap.hpp>
53#include <Xpetra_Matrix.hpp>
54#include <Xpetra_CrsMatrixWrap.hpp>
55#include <Xpetra_BlockedCrsMatrix.hpp>
56#include <Xpetra_Operator.hpp>
57#include <Xpetra_TpetraMultiVector.hpp>
60#include "MueLu_Hierarchy.hpp"
61#include "MueLu_Utilities.hpp"
66template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
67Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
69 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> Matrix;
70 typedef Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> Map;
71 typedef Xpetra::BlockedMap<LocalOrdinal, GlobalOrdinal, Node> BlockedMap;
73 RCP<const Map> domainMap;
75 else domainMap =
Operator_->getDomainMap();
78 RCP<const BlockedMap> bDomainMap = Teuchos::rcp_dynamic_cast<const BlockedMap>(domainMap);
79 if(bDomainMap.is_null() ==
false) {
80 return Xpetra::toTpetraNonZero(bDomainMap->getFullMap());
82 return Xpetra::toTpetraNonZero(domainMap);
85template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
87 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> Matrix;
88 typedef Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> Map;
89 typedef Xpetra::BlockedMap<LocalOrdinal, GlobalOrdinal, Node> BlockedMap;
92 RCP<const Map> rangeMap;
96 RCP<const BlockedMap> bRangeMap = Teuchos::rcp_dynamic_cast<const BlockedMap>(rangeMap);
97 if(bRangeMap.is_null() ==
false) {
98 return Xpetra::toTpetraNonZero(bRangeMap->getFullMap());
100 return Xpetra::toTpetraNonZero(rangeMap);
103template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
105 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>& Y,
107 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> TMV;
108 typedef Xpetra::TpetraMultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> XTMV;
110 TEUCHOS_TEST_FOR_EXCEPTION(mode!=Teuchos::NO_TRANS,std::logic_error,
"MueLu::TpetraOperator does not support applying the adjoint operator");
113 TMV& temp_x =
const_cast<TMV &
>(X);
114 const XTMV tX(rcpFromRef(temp_x));
115 XTMV tY(rcpFromRef(Y));
122 }
catch (std::exception& e) {
123 std::cerr <<
"MueLu::TpetraOperator::apply : detected an exception" << std::endl
124 << e.what() << std::endl;
129template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
134template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
135RCP<MueLu::Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
140template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
141RCP<Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
MueLu::DefaultScalar Scalar
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.
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this operator.
RCP< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetOperator() const
Direct access to the underlying MueLu::Operator.
bool hasTransposeApply() const
Indicates whether this operator supports applying the adjoint operator.
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
Returns the Tpetra::Map object associated with the domain of this operator.
RCP< Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Operator_
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Hierarchy_
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetHierarchy() const
Direct access to the underlying MueLu::Hierarchy.
Namespace for MueLu classes and methods.