MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_ShiftedLaplacianOperator_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // MueLu: A package for multigrid based preconditioning
4 //
5 // Copyright 2012 NTESS and the MueLu contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef MUELU_SHIFTEDLAPLACIANOPERATOR_DECL_HPP
11 #define MUELU_SHIFTEDLAPLACIANOPERATOR_DECL_HPP
12 
13 #include "MueLu_ConfigDefs.hpp"
14 
15 #include <Tpetra_Operator.hpp>
17 #include "MueLu_Level.hpp"
18 #include "MueLu_Hierarchy_decl.hpp"
19 #include "MueLu_Utilities.hpp"
20 
21 // TODO: Kokkos headers
22 
23 namespace MueLu {
24 
28 template <class Scalar = Tpetra::Operator<>::scalar_type,
33  : public Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
39 
40  public:
42 
43 
46  : Hierarchy_(H)
47  , option_(0) {}
48 
51  const RCP<Matrix> A, int cycles, int iters, int option, double tol)
52  : Hierarchy_(H)
53  , A_(A)
54  , cycles_(cycles)
55  , iters_(iters)
56  , option_(option)
57  , tol_(tol) {
58  // setup 2-level correction
59  /*RCP< MueLu::Level > Level1 = H -> GetLevel(1);
60  R_ = Level1 -> Get< RCP<Matrix> >("R");
61  P_ = Level1 -> Get< RCP<Matrix> >("P");
62  //RCP<Matrix> AP = Level1 -> Get< RCP<Matrix> >("AP graph");
63  RCP<Matrix> AP;
64  AP = MUtils::Multiply(*A_, false, *P_, false, AP);
65  // Optimization storage option. If matrix is not changing later, allow this.
66  bool doOptimizedStorage = true;
67  // Reuse coarse matrix memory if available (multiple solve)
68  //RCP<Matrix> Ac = Level1 -> Get< RCP<Matrix> >("RAP graph");
69  RCP<Matrix> Ac;
70  Ac = MUtils::Multiply(*R_, false, *AP, false, Ac, true, doOptimizedStorage);
71  Ac_ = MUtils::Op2NonConstTpetraCrs(Ac);
72 
73  // Setup Belos for two-level correction
74  BelosList_ = rcp( new Teuchos::ParameterList("GMRES") );
75  BelosList_ -> set("Maximum Iterations", iters_ );
76  BelosList_ -> set("Convergence Tolerance", tol_ );
77  BelosLP_ = rcp( new Belos::LinearProblem<Scalar,MV,OP> );
78  BelosLP_ -> setOperator ( Ac_ );
79  BelosSM_ = rcp( new Belos::BlockGmresSolMgr<Scalar,MV,OP>(BelosLP_, BelosList_) );*/
80  }
81 
84 
86 
89 
92 
94 
104 
106  bool hasTransposeApply() const;
107 
108  private:
113 
114  // RCP< Belos::LinearProblem<Scalar,MV,OP> > BelosLP_;
115  // RCP< Belos::SolverManager<Scalar,MV,OP> > BelosSM_;
116 
117  // cycles -> number of V-cycles
118  // iters -> number of GMRES iterations per correction
119  // option -> 0 if no correction is desired
121  double tol_;
122 };
123 
124 } // namespace MueLu
125 
126 #endif // MUELU_SHIFTEDLAPLACIANOPERATOR_DECL_HPP
MueLu::DefaultLocalOrdinal LocalOrdinal
Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > Matrix
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. ...
MueLu::DefaultNode Node
Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > OP
bool hasTransposeApply() const
Indicates whether this operator supports applying the adjoint operator.
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > R_
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > MV
Wraps an existing MueLu::Hierarchy as a Tpetra::Operator, with an optional two-level correction...
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Hierarchy_
MueLu::Utilities< Scalar, LocalOrdinal, GlobalOrdinal, Node > MUtils
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > P_
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this operator.
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A_
Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrix
RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Ac_
ShiftedLaplacianOperator(const RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &H)
Constructor.
ShiftedLaplacianOperator(const RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &H, const RCP< Matrix > A, int cycles, int iters, int option, double tol)
Auxiliary Constructor.
MueLu utility class.
Provides methods to build a multigrid hierarchy and apply multigrid cycles.