10#ifndef MUELU_SHIFTEDLAPLACIANOPERATOR_DEF_HPP
11#define MUELU_SHIFTEDLAPLACIANOPERATOR_DEF_HPP
15#include <Xpetra_Matrix.hpp>
16#include <Xpetra_CrsMatrixWrap.hpp>
17#include <Xpetra_BlockedCrsMatrix.hpp>
18#include <Xpetra_TpetraMultiVector.hpp>
19#include <Xpetra_MultiVectorFactory.hpp>
22#include "MueLu_Hierarchy.hpp"
23#include "MueLu_Utilities.hpp"
29template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
30Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
33 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> XMatrix;
35 RCP<MueLu::Level> L0 = Hierarchy_->GetLevel(0);
36 RCP<XMatrix> A = L0->Get<RCP<XMatrix> >(
"A");
38 RCP<Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > tpbA =
39 Teuchos::rcp_dynamic_cast<Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >(A);
40 if (tpbA != Teuchos::null) {
41 return Xpetra::toTpetraNonZero(tpbA->getDomainMap());
44 RCP<Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > tpA =
46 return tpA->getDomainMap();
51template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
52Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
55 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> XMatrix;
57 RCP<MueLu::Level> L0 = Hierarchy_->GetLevel(0);
58 RCP<XMatrix> A = L0->Get<RCP<XMatrix> >(
"A");
60 RCP<Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > tpbA =
61 Teuchos::rcp_dynamic_cast<Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >(A);
62 if (tpbA != Teuchos::null)
63 return Xpetra::toTpetraNonZero(tpbA->getRangeMap());
65 RCP<Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > tpA =
67 return tpA->getRangeMap();
72template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
74 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Y,
76 typedef Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> TMV;
77 typedef Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> XTMV;
80 TMV& temp_x =
const_cast<TMV&
>(X);
81 const XTMV tX(rcpFromRef(temp_x));
82 XTMV tY(rcpFromRef(Y));
86 Hierarchy_->Iterate(tX, tY, cycles_,
true);
89 catch (std::exception& e) {
91 std::cerr <<
"Caught an exception in MueLu::ShiftedLaplacianOperator::ApplyInverse():" << std::endl
92 << e.what() << std::endl;
125template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
MueLu::DefaultScalar Scalar
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this 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.
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.
Namespace for MueLu classes and methods.