1 #ifndef MUELU_CREATE_TPETRA_PRECONDITIONER_HPP 2 #define MUELU_CREATE_TPETRA_PRECONDITIONER_HPP 8 #include <Tpetra_Operator.hpp> 9 #include <Tpetra_RowMatrix.hpp> 11 #include <Tpetra_Experimental_BlockCrsMatrix.hpp> 19 #include <MueLu_Hierarchy.hpp> 21 #include <MueLu_MLParameterListInterpreter.hpp> 22 #include <MueLu_ParameterListInterpreter.hpp> 23 #include <MueLu_TpetraOperator.hpp> 25 #include <MueLu_Utilities.hpp> 26 #include <MueLu_HierarchyUtils.hpp> 29 #if defined(HAVE_MUELU_AMGX) 32 #include "cuda_runtime.h" 46 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
53 typedef LocalOrdinal
LO;
54 typedef GlobalOrdinal
GO;
62 typedef Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> crs_matrix_type;
63 typedef Tpetra::Experimental::BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> block_crs_matrix_type;
65 #if defined(HAVE_MUELU_AMGX) 66 std::string externalMG =
"use external multigrid package";
67 if (inParamList.
isParameter(externalMG) && inParamList.
get<std::string>(externalMG) ==
"amgx"){
78 if (crsA != Teuchos::null)
79 A = TpetraCrs_To_XpetraMatrix<SC,LO,GO,NO>(crsA);
80 else if (bcrsA != Teuchos::null) {
110 RCP<Hierarchy> H = MueLu::CreateXpetraPreconditioner<SC,LO,GO,NO>(A,inParamList,inParamList);
124 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
128 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
129 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
132 typedef LocalOrdinal
LO;
133 typedef GlobalOrdinal
GO;
143 if (inCoords != Teuchos::null) {
146 if (inNullspace != Teuchos::null) {
150 return CreateTpetraPreconditioner<SC,LO,GO,NO>(inA,inParamList,inParamList);
166 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
171 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
172 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
175 return CreateTpetraPreconditioner<Scalar, LocalOrdinal, GlobalOrdinal, Node>(opMat, inParamList, inCoords, inNullspace);
190 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
194 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
195 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
199 return CreateTpetraPreconditioner<Scalar, LocalOrdinal, GlobalOrdinal, Node>(opMat, paramList, inCoords, inNullspace);
215 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
219 const std::string& xmlFileName,
220 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
221 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
227 return CreateTpetraPreconditioner<Scalar, LocalOrdinal, GlobalOrdinal, Node>(opMat, paramList, inCoords, inNullspace);
241 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
244 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
245 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
248 return CreateTpetraPreconditioner<Scalar, LocalOrdinal, GlobalOrdinal, Node>(inA, paramList, inCoords, inNullspace);
263 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
266 const std::string& xmlFileName,
267 const Teuchos::RCP<Tpetra::MultiVector<double, LocalOrdinal, GlobalOrdinal, Node>>& inCoords = Teuchos::null,
268 const Teuchos::RCP<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& inNullspace = Teuchos::null)
272 return CreateTpetraPreconditioner<Scalar, LocalOrdinal, GlobalOrdinal, Node>(inA, paramList, inCoords, inNullspace);
283 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
287 typedef LocalOrdinal
LO;
288 typedef GlobalOrdinal
GO;
292 typedef MueLu ::Hierarchy<SC,LO,GO,NO>
Hierarchy;
295 RCP<Matrix> A = TpetraCrs_To_XpetraMatrix<SC,LO,GO,NO>(inA);
297 MueLu::ReuseXpetraPreconditioner<SC,LO,GO,NO>(A, H);
302 #endif //ifndef MUELU_CREATE_TPETRA_PRECONDITIONER_HPP
Various adapters that will create a MueLu preconditioner that is an Xpetra::Matrix.
T & get(const std::string &name, T def_value)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Namespace for MueLu classes and methods.
RCP< MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetHierarchy() const
Direct access to the underlying MueLu::Hierarchy.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< MueLu::TpetraOperator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > CreateTpetraPreconditioner(const Teuchos::RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &inA, Teuchos::ParameterList &inParamList, Teuchos::ParameterList &dummyList)
Helper function to create a MueLu or AMGX preconditioner that can be used by Tpetra.Given a Tpetra::Operator, this function returns a constructed MueLu preconditioner.
Wraps an existing MueLu::Hierarchy as a Tpetra::Operator.
bool isParameter(const std::string &name) const
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
void ReuseTpetraPreconditioner(const Teuchos::RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &inA, MueLu::TpetraOperator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op)
Helper function to reuse an existing MueLu preconditioner.
Exception throws to report errors in the internal logical of the program.
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Adapter for AmgX library from Nvidia.