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