MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_EpetraOperator.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_EPETRAOPERATOR_HPP
11 #define MUELU_EPETRAOPERATOR_HPP
12 
14 
15 #include <Epetra_Operator.h>
16 #include "MueLu_Hierarchy.hpp"
17 // TODO: Kokkos headers
18 
19 #if defined(HAVE_MUELU_SERIAL) and defined(HAVE_MUELU_EPETRA)
20 
21 namespace MueLu {
22 
27 class EpetraOperator : public Epetra_Operator {
28  typedef double SC;
29  typedef int LO;
30  typedef int GO;
31  typedef Xpetra::EpetraNode NO;
32 
33  typedef Xpetra::Matrix<SC, LO, GO, NO> Matrix;
34  typedef MueLu::Hierarchy<SC, LO, GO, NO> Hierarchy;
36 
37  public:
39 
40 
42  EpetraOperator(const RCP<Hierarchy>& H)
43  : Hierarchy_(H) {}
44 
46  virtual ~EpetraOperator() {}
47 
49 
50  int SetUseTranspose(bool /* UseTransposeBool */) { return -1; }
51 
53 
54 
56 
64  int Apply(const Epetra_MultiVector& /* X */, Epetra_MultiVector& /* Y */) const { return -1; }
65 
67 
78  int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
79 
81  /* Returns the quantity \f$ \| A \|_\infty\f$ such that
82  \f[\| A \|_\infty = \max_{1\lei\lem} \sum_{j=1}^n |a_{ij}| \f].
83 
84  \warning This method must not be called unless HasNormInf() returns true.
85  */
86  double NormInf() const { return 0; }
88 
90 
91 
93  const char* Label() const { return "MueLu::Hierarchy"; }
94 
96  bool UseTranspose() const { return false; }
97 
99  bool HasNormInf() const { return 0; }
100 
102  const Epetra_Comm& Comm() const;
103 
105  const Epetra_Map& OperatorDomainMap() const;
106 
108  const Epetra_Map& OperatorRangeMap() const;
109 
111 
113 
114 
116  RCP<Hierarchy> GetHierarchy() const { return Hierarchy_; }
117 
119 
120  private:
121  RCP<Hierarchy> Hierarchy_;
122 };
123 
124 } // namespace MueLu
125 
126 #endif // HAVE_MUELU_EPETRA and HAVE_MUELU_SERIAL
127 
128 #endif // MUELU_EPETRAOPERATOR_HPP
GlobalOrdinal GO
LocalOrdinal LO
EpetraOperatorT< int > EpetraOperator
Scalar SC
Node NO
MueLu utility class.
Provides methods to build a multigrid hierarchy and apply multigrid cycles.