VertexCFD  0.0-dev
VertexCFD_LinearSolvers_HyprePreconditionerFactory.hpp
1 #ifndef VERTEXCFD_LINEARSOLVERS_HYPREPRECONDITIONERFACTORY_HPP
2 #define VERTEXCFD_LINEARSOLVERS_HYPREPRECONDITIONERFACTORY_HPP
3 
4 #include <Ifpack2_Preconditioner.hpp>
5 
6 #include <Thyra_LinearOpWithSolveFactoryBase.hpp>
7 #include <Thyra_PreconditionerFactoryBase.hpp>
8 
9 #include <memory>
10 
11 namespace VertexCFD
12 {
13 namespace LinearSolvers
14 {
15 //---------------------------------------------------------------------------//
16 // Build a Hypre Preconditioner.
17 // This class allows for the construction of "custom" preconditioners that
18 // aren't supported through Trilinos.
19 //---------------------------------------------------------------------------//
21  : public Thyra::PreconditionerFactoryBase<double>
22 {
23  public:
24  // Determine if preconditioner is compatible with specified operator
25  bool isCompatible(
26  const Thyra::LinearOpSourceBase<double>& fwdOpSrc) const override;
27 
28  // Construct (but do not initialize) preconditioner
29  Teuchos::RCP<Thyra::PreconditionerBase<double>> createPrec() const override;
30 
31  // Initialize preconditioner
32  void initializePrec(
33  const Teuchos::RCP<const Thyra::LinearOpSourceBase<double>>& fwdOpSrc,
34  Thyra::PreconditionerBase<double>* precOp,
35  const Thyra::ESupportSolveUse supportSolveUse
36  = Thyra::SUPPORT_SOLVE_UNSPECIFIED) const override;
37 
38  void uninitializePrec(
39  Thyra::PreconditionerBase<double>* prec,
40  Teuchos::RCP<const Thyra::LinearOpSourceBase<double>>* fwdOpSrc = NULL,
41  Thyra::ESupportSolveUse* supportSolveUse = NULL) const override;
42 
43  //
44  // Teuchos::ParameterListAcceptor API
45  //
46  void setParameterList(
47  const Teuchos::RCP<Teuchos::ParameterList>& params) override;
48  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList() override;
49  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList() override;
50 
51  Teuchos::RCP<const Teuchos::ParameterList>
52  getValidParameters() const override;
53 
54  private:
55  Teuchos::RCP<Teuchos::ParameterList> _params;
56 
57  mutable Teuchos::RCP<Ifpack2::Preconditioner<>> _hypre;
58 };
59 
60 //---------------------------------------------------------------------------//
61 
62 } // namespace LinearSolvers
63 } // namespace VertexCFD
64 
65 #endif // VERTEXCFD_LINEARSOLVERS_HYPREPRECONDITIONERFACTORY_HPP
VertexCFD::LinearSolvers::HyprePreconditionerFactory
Definition: VertexCFD_LinearSolvers_HyprePreconditionerFactory.hpp:22
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23