10 #ifndef MUELU_STRATIMIKOSSMOOTHER_DECL_HPP
11 #define MUELU_STRATIMIKOSSMOOTHER_DECL_HPP
21 #if defined(HAVE_MUELU_STRATIMIKOS) && defined(HAVE_MUELU_THYRA)
23 #include <Tpetra_CrsMatrix.hpp>
27 #include "MueLu_SmootherPrototype.hpp"
30 #include <Thyra_LinearOpWithSolveBase.hpp>
44 template <class Scalar = SmootherPrototype<>::scalar_type,
45 class LocalOrdinal =
typename SmootherPrototype<Scalar>::local_ordinal_type,
46 class GlobalOrdinal =
typename SmootherPrototype<Scalar, LocalOrdinal>::global_ordinal_type,
47 class Node =
typename SmootherPrototype<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
48 class StratimikosSmoother :
public SmootherPrototype<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
49 #undef MUELU_STRATIMIKOSSMOOTHER_SHORT
67 template <
class Scalar2,
class LocalOrdinal2,
class GlobalOrdinal2,
class Node2>
68 friend class StratimikosSmoother;
75 virtual ~StratimikosSmoother() =
default;
84 void DeclareInput(Level& currentLevel)
const {};
96 void Setup(Level& currentLevel){};
106 void Apply(MultiVector& X,
const MultiVector& B,
bool InitialGuessIsZero =
false)
const {};
113 RCP<SmootherPrototype>
Copy()
const {
return Teuchos::null; };
121 std::string description()
const {
return std::string(
""); };
138 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
139 struct StratimikosSmoother<double,
LocalOrdinal,
GlobalOrdinal,
Node> :
public SmootherPrototype<double, LocalOrdinal, GlobalOrdinal, Node> {
141 #undef MUELU_STRATIMIKOSSMOOTHER_SHORT
147 virtual ~StratimikosSmoother() =
default;
156 void DeclareInput(Level& currentLevel)
const;
168 void Setup(Level& currentLevel);
178 void Apply(MultiVector& X,
const MultiVector& B,
bool InitialGuessIsZero =
false)
const;
185 RCP<SmootherPrototype>
Copy()
const;
193 std::string description()
const;
206 size_t getNodeSmootherComplexity()
const;
209 void SetupStratimikos(Level& currentLevel);
216 void ExperimentalDropVertConnections(RCP<Matrix>& filteredA, Level& currentLevel);
227 bool recurMgOnFilteredA_ =
false;
232 #define MUELU_STRATIMIKOSSMOOTHER_SHORT
233 #endif // HAVE_MUELU_STRATIMIKOS
234 #endif // MUELU_STRATIMIKOSSMOOTHER_DECL_HPP
MueLu::DefaultLocalOrdinal LocalOrdinal
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal