46 #ifndef MUELU_SMOOTHERBASECLONER_HPP
47 #define MUELU_SMOOTHERBASECLONER_HPP
49 #include <Xpetra_MultiVector_fwd.hpp>
55 #if defined(HAVE_MUELU_IFPACK2)
56 #include "MueLu_Ifpack2Smoother.hpp"
58 #include "MueLu_TrilinosSmoother.hpp"
62 #ifdef HAVE_MUELU_DEPRECATED_CODE
63 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node1,
class Node2>
64 Teuchos::RCP<SmootherBase<Scalar,LocalOrdinal,GlobalOrdinal,Node2> >
66 clone (
const Teuchos::RCP<SmootherBase<Scalar,LocalOrdinal,GlobalOrdinal,Node1> >& SB,
67 const Teuchos::RCP<
const Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node2> >& cloneA,
68 const RCP<Node2>& node2)
70 #if defined(HAVE_MUELU_IFPACK2)
71 Teuchos::RCP<SmootherBase<Scalar, LocalOrdinal, GlobalOrdinal, Node2> > cloneSB;
72 Teuchos::RCP<TrilinosSmoother<Scalar, LocalOrdinal, GlobalOrdinal, Node1> > trilSmoother =
73 Teuchos::rcp_dynamic_cast<TrilinosSmoother<Scalar, LocalOrdinal, GlobalOrdinal, Node1> >(SB);
74 if (trilSmoother != Teuchos::null){
75 cloneSB = trilSmoother->clone (node2, cloneA);
79 Teuchos::RCP<Ifpack2Smoother<Scalar, LocalOrdinal, GlobalOrdinal, Node1> > ifSmoother =
80 Teuchos::rcp_dynamic_cast<Ifpack2Smoother<Scalar, LocalOrdinal, GlobalOrdinal, Node1> >(SB);
81 if (ifSmoother != Teuchos::null){
82 cloneSB = ifSmoother->clone(node2, cloneA);
87 TEUCHOS_TEST_FOR_EXCEPTION(
88 true, std::invalid_argument,
"MueLu::SmootherClone: "
89 "Invalid smoother type to clone (not TrilinosSmoother or Ifpack2 ) \"");
92 TEUCHOS_TEST_FOR_EXCEPTION(
93 true, std::invalid_argument,
"MueLu::SmootherClone: "
94 "clone() only available with IFPACK2 enabled.");
101 #define MUELU_SMOOTHERBASECLONER_SHORT
Namespace for MueLu classes and methods.