MueLu Version of the Day
Loading...
Searching...
No Matches
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>
16#include <Tpetra_MultiVector_decl.hpp>
17#include "MueLu_Level.hpp"
19#include "MueLu_Utilities.hpp"
20
21// TODO: Kokkos headers
22
23namespace MueLu {
24
28template <class Scalar = Tpetra::Operator<>::scalar_type,
29 class LocalOrdinal = typename Tpetra::Operator<Scalar>::local_ordinal_type,
30 class GlobalOrdinal = typename Tpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type,
31 class Node = typename Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
33 : public Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
34 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> Matrix;
35 typedef Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> CrsMatrix;
36 typedef Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> MV;
37 typedef Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> OP;
39
40 public:
42
43
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
88 Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> > getDomainMap() const;
89
91 Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> > getRangeMap() const;
92
94
99 void apply(const Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& X,
100 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Y,
101 Teuchos::ETransp mode = Teuchos::NO_TRANS,
102 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
103 Scalar beta = Teuchos::ScalarTraits<Scalar>::one()) const;
104
106 bool hasTransposeApply() const;
107
108 private:
109 RCP<MueLu::Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Hierarchy_;
110 RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > R_, P_, A_;
111 RCP<Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Ac_;
112 RCP<Teuchos::ParameterList> BelosList_;
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
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Wraps an existing MueLu::Hierarchy as a Tpetra::Operator, with an optional two-level correction....
MueLu::Utilities< Scalar, LocalOrdinal, GlobalOrdinal, Node > MUtils
Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrix
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > P_
Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > OP
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A_
ShiftedLaplacianOperator(const RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &H)
Constructor.
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > R_
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Tpetra::Map object associated with the range of this operator.
RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Ac_
Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > Matrix
bool hasTransposeApply() const
Indicates whether this operator supports applying the adjoint operator.
ShiftedLaplacianOperator(const RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &H, const RCP< Matrix > A, int cycles, int iters, int option, double tol)
Auxiliary Constructor.
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Hierarchy_
Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
Returns the Tpetra::Map object associated with the domain of this operator.
Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > MV
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 utility class.
Namespace for MueLu classes and methods.