MueLu Version of the Day
Loading...
Searching...
No Matches
Thyra_MueLuPreconditionerFactory_decl.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 THYRA_MUELU_PRECONDITIONER_FACTORY_DECL_HPP
11#define THYRA_MUELU_PRECONDITIONER_FACTORY_DECL_HPP
12
13#include <MueLu_ConfigDefs.hpp>
14
15#if defined(HAVE_MUELU_STRATIMIKOS) && defined(HAVE_MUELU_THYRA)
16
17// Stratimikos needs Thyra, so we don't need special guards for Thyra here
18#include "Thyra_DefaultPreconditioner.hpp"
19#include "Thyra_BlockedLinearOpBase.hpp"
20#include "Thyra_DiagonalLinearOpBase.hpp"
22#include "Thyra_TpetraLinearOp.hpp"
23#include "Thyra_TpetraThyraWrappers.hpp"
24
25#include "Teuchos_Ptr.hpp"
26#include "Teuchos_TestForException.hpp"
27#include "Teuchos_Assert.hpp"
28#include "Teuchos_Time.hpp"
29
30#include <Xpetra_CrsMatrixWrap.hpp>
31#include <Xpetra_CrsMatrix.hpp>
32#include <Xpetra_Matrix.hpp>
33#include <Xpetra_ThyraUtils.hpp>
34
35#include <MueLu_Hierarchy.hpp>
36#include <MueLu_HierarchyManager.hpp>
37#include <MueLu_HierarchyUtils.hpp>
38#include <MueLu_Utilities.hpp>
39#include <MueLu_ParameterListInterpreter.hpp>
40#include <MueLu_MasterList.hpp>
41#include <MueLu_XpetraOperator_decl.hpp> // todo fix me
43#include <MueLu_TpetraOperator.hpp>
44#include <Xpetra_TpetraHalfPrecisionOperator.hpp>
45
46#include "Thyra_PreconditionerFactoryBase.hpp"
47
48#include <Tpetra_KokkosCompat_DefaultNode.hpp>
49
50#include <list>
51
52namespace Thyra {
53
54using Teuchos::RCP;
55using Teuchos::rcp;
56
57template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
58struct Converters {
59 static bool replaceWithXpetra(ParameterList& paramList, std::string parameterName);
60};
61
67template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
68class MueLuPreconditionerFactory : public PreconditionerFactoryBase<Scalar> {
69 public:
72
74 MueLuPreconditionerFactory();
75
76 ~MueLuPreconditionerFactory();
78
81
83 bool isCompatible(const LinearOpSourceBase<Scalar>& fwdOp) const;
85 Teuchos::RCP<PreconditionerBase<Scalar> > createPrec() const;
87 void initializePrec(const Teuchos::RCP<const LinearOpSourceBase<Scalar> >& fwdOp,
88 PreconditionerBase<Scalar>* prec,
89 const ESupportSolveUse supportSolveUse) const;
91 void uninitializePrec(PreconditionerBase<Scalar>* prec,
92 Teuchos::RCP<const LinearOpSourceBase<Scalar> >* fwdOp,
93 ESupportSolveUse* supportSolveUse) const;
94
96
99
101 void setParameterList(const Teuchos::RCP<Teuchos::ParameterList>& paramList);
103 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
105 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
107 Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
109 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
111
114
116 std::string description() const;
117
118 // ToDo: Add an override of describe(...) to give more detail!
119
121
122 private:
123 // Teuchos::RCP<MueLu::Hierarchy<Scalar,LocalOrdinal,GlobalOrdinal,Node> > CreateXpetraPreconditioner(Teuchos::RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > op, const Teuchos::ParameterList& paramList, Teuchos::RCP<Xpetra::MultiVector<typename Teuchos::ScalarTraits<Scalar>::magnitudeType, LocalOrdinal, GlobalOrdinal, Node> > coords, Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > nullspace) const;
124
125 Teuchos::RCP<Teuchos::ParameterList> paramList_;
126};
127
128} // namespace Thyra
129
130#endif // #ifdef HAVE_MUELU_STRATIMIKOS
131
132#endif // THYRA_MUELU_PRECONDITIONER_FACTORY_DECL_HPP
Various adapters that will create a MueLu preconditioner that is an Xpetra::Matrix.
void getValidParameters(Teuchos::ParameterList &params)