Teko  Version of the Day
 All Classes Files Functions Variables Pages
Teko_StratimikosFactory.hpp
1 #ifndef __Teko_StratimikosFactory_hpp__
2 #define __Teko_StratimikosFactory_hpp__
3 
4 #include <vector>
5 
6 #include "Thyra_PreconditionerFactoryBase.hpp"
7 #include "Teuchos_StandardCompositionMacros.hpp"
8 
9 #include "Teko_RequestHandler.hpp"
10 #include "Teko_InverseLibrary.hpp"
11 #include "Teko_InverseFactory.hpp"
12 
13 #ifdef TEKO_HAVE_EPETRA
14 #include "Thyra_EpetraOperatorViewExtractorBase.hpp"
15 #include "Epetra_Operator.h"
16 #endif
17 
18 namespace Teko {
19 
24 class StratimikosFactory : public Thyra::PreconditionerFactoryBase<double> {
25  public:
28 
31 
32  StratimikosFactory(const Teuchos::RCP<Teko::RequestHandler> &rh);
33  StratimikosFactory(const Teuchos::RCP<Stratimikos::DefaultLinearSolverBuilder> &builder,
34  const Teuchos::RCP<Teko::RequestHandler> &rh);
35 
36 #ifdef TEKO_HAVE_EPETRA
37 
45  STANDARD_COMPOSITION_MEMBERS(Thyra::EpetraOperatorViewExtractorBase, epetraFwdOpViewExtractor);
46 #endif
47 
49 
52 
54  bool isCompatible(const Thyra::LinearOpSourceBase<double> &fwdOp) const;
56  bool applySupportsConj(Thyra::EConj conj) const;
58  bool applyTransposeSupportsConj(Thyra::EConj conj) const;
60  Teuchos::RCP<Thyra::PreconditionerBase<double> > createPrec() const;
62  void initializePrec(const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
63  Thyra::PreconditionerBase<double> *prec,
64  const Thyra::ESupportSolveUse supportSolveUse) const;
66  void uninitializePrec(Thyra::PreconditionerBase<double> *prec,
67  Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > *fwdOp,
68  Thyra::ESupportSolveUse *supportSolveUse) const;
69 
71 
74 
76  void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const &paramList);
78  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
80  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
82  Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
84  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
86 
89 
91  std::string description() const;
92 
93  // ToDo: Add an override of describe(...) to give more detail!
94 
96 
99  void initializePrec_Thyra(const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
100  Thyra::PreconditionerBase<double> *prec,
101  const Thyra::ESupportSolveUse supportSolveUse) const;
102 
103 #ifdef TEKO_HAVE_EPETRA
104 
106  void initializePrec_Epetra(const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
107  Thyra::PreconditionerBase<double> *prec,
108  const Thyra::ESupportSolveUse supportSolveUse) const;
109 #endif
110 
113  void setRequestHandler(const Teuchos::RCP<Teko::RequestHandler> &rh) { reqHandler_ = rh; }
114 
117  Teuchos::RCP<Teko::RequestHandler> getRequestHandler() const { return reqHandler_; }
118 
120  const std::vector<int> &getDecomposition() const { return decomp_; }
121 
122  private:
123 #ifdef TEKO_HAVE_EPETRA
124 
136  Teuchos::RCP<Epetra_Operator> buildWrappedEpetraOperator(
137  const Teuchos::RCP<const Epetra_Operator> &Jac,
138  const Teuchos::RCP<Epetra_Operator> &wrapInput, std::ostream &out) const;
139 
148  void buildStridedVectors(const Epetra_Operator &Jac, const std::vector<int> &decomp,
149  std::vector<std::vector<int> > &vars) const;
150 #endif // TEKO_HAVE_EPETRA
151 
152  Teuchos::RCP<Teuchos::ParameterList> paramList_;
153 
154  mutable Teuchos::RCP<Teko::InverseLibrary> invLib_;
155  mutable Teuchos::RCP<Teko::InverseFactory> invFactory_;
156  Teuchos::RCP<Teko::RequestHandler> reqHandler_;
157  mutable std::vector<int> decomp_;
158  Teuchos::RCP<Stratimikos::DefaultLinearSolverBuilder>
159  builder_; // builder to use for default solvers
160 };
161 
169 void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder &builder,
170  const std::string &stratName = "Teko");
171 
179 void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder &builder,
180  const Teuchos::RCP<Teko::RequestHandler> &rh,
181  const std::string &stratName = "Teko");
182 
183 } // namespace Teko
184 
185 #endif
bool applySupportsConj(Thyra::EConj conj) const
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
void setRequestHandler(const Teuchos::RCP< Teko::RequestHandler > &rh)
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
void initializePrec(const Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > &fwdOp, Thyra::PreconditionerBase< double > *prec, const Thyra::ESupportSolveUse supportSolveUse) const
void uninitializePrec(Thyra::PreconditionerBase< double > *prec, Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > *fwdOp, Thyra::ESupportSolveUse *supportSolveUse) const
const std::vector< int > & getDecomposition() const
Get the decomposition vector in use by this factory.
bool applyTransposeSupportsConj(Thyra::EConj conj) const
Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
void initializePrec_Thyra(const Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > &fwdOp, Thyra::PreconditionerBase< double > *prec, const Thyra::ESupportSolveUse supportSolveUse) const
bool isCompatible(const Thyra::LinearOpSourceBase< double > &fwdOp) const
Teuchos::RCP< Thyra::PreconditionerBase< double > > createPrec() const
Concrete preconditioner factory subclass based on ML.
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const &paramList)
Teuchos::RCP< Teko::RequestHandler > getRequestHandler() const