46#ifndef MUELU_STRATIMIKOSSMOOTHER_DECL_HPP
47#define MUELU_STRATIMIKOSSMOOTHER_DECL_HPP
49#include <Teuchos_ParameterList.hpp>
51#include <Xpetra_CrsMatrixWrap.hpp>
52#include <Xpetra_Matrix_fwd.hpp>
53#include <Xpetra_Matrix.hpp>
58#if defined(HAVE_MUELU_STRATIMIKOS) && defined(HAVE_MUELU_TPETRA) && defined(HAVE_MUELU_THYRA)
60#include <Tpetra_CrsMatrix.hpp>
65#include "MueLu_SmootherPrototype.hpp"
68#include <Thyra_LinearOpWithSolveBase.hpp>
83 template <class Scalar = SmootherPrototype<>::scalar_type,
87 class StratimikosSmoother :
public SmootherPrototype<Scalar,LocalOrdinal,GlobalOrdinal,Node> {
88#undef MUELU_STRATIMIKOSSMOOTHER_SHORT
107 template<
class Scalar2,
class LocalOrdinal2,
class GlobalOrdinal2,
class Node2>
108 friend class StratimikosSmoother;
111 StratimikosSmoother(
const std::string type,
const Teuchos::ParameterList& paramList = Teuchos::ParameterList()) {
112 TEUCHOS_TEST_FOR_EXCEPTION(
true, Exceptions::RuntimeError,
"Stratimikos only works for Scalar=double.")
116 virtual ~StratimikosSmoother() =
default;
120 void SetParameterList(
const Teuchos::ParameterList& paramList) {};
125 void DeclareInput(Level ¤tLevel)
const {};
137 void Setup(Level ¤tLevel) {};
147 void Apply(MultiVector& X,
const MultiVector& B,
bool InitialGuessIsZero =
false)
const {};
154 RCP<SmootherPrototype>
Copy()
const {
return Teuchos::null; };
162 std::string description()
const {
return std::string(
""); };
167 void print(Teuchos::FancyOStream &out,
const VerbLevel verbLevel = Default)
const {};
175 size_t getNodeSmootherComplexity()
const {
return Teuchos::OrdinalTraits<size_t>::invalid(); };
180 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
183#undef MUELU_STRATIMIKOSSMOOTHER_SHORT
186 StratimikosSmoother(
const std::string type,
const Teuchos::ParameterList& paramList = Teuchos::ParameterList());
189 virtual ~StratimikosSmoother() =
default;
193 void SetParameterList(
const Teuchos::ParameterList& paramList);
198 void DeclareInput(Level ¤tLevel)
const;
210 void Setup(Level ¤tLevel);
220 void Apply(MultiVector& X,
const MultiVector& B,
bool InitialGuessIsZero =
false)
const;
227 RCP<SmootherPrototype>
Copy()
const;
235 std::string description()
const;
240 void print(Teuchos::FancyOStream &out,
const VerbLevel verbLevel = Default)
const;
248 size_t getNodeSmootherComplexity()
const;
251 void SetupStratimikos (Level& currentLevel);
258 void ExperimentalDropVertConnections(RCP<Matrix> & filteredA, Level& currentLevel);
264 Teuchos::RCP<Thyra::LinearOpWithSolveBase<Scalar> > solver_;
269 bool recurMgOnFilteredA_ =
false;
274#define MUELU_STRATIMIKOSSMOOTHER_SHORT
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
GlobalOrdinal global_ordinal_type
LocalOrdinal local_ordinal_type
Namespace for MueLu classes and methods.