Teko Version of the Day
Loading...
Searching...
No Matches
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
18namespace Teko {
19
24class StratimikosFactory : public Thyra::PreconditionerFactoryBase<double> {
25public:
26
29
32
33 StratimikosFactory(const Teuchos::RCP<Teko::RequestHandler> & rh);
34 StratimikosFactory(const Teuchos::RCP<Stratimikos::DefaultLinearSolverBuilder> & builder,
35 const Teuchos::RCP<Teko::RequestHandler> & rh);
36
37#ifdef TEKO_HAVE_EPETRA
46 STANDARD_COMPOSITION_MEMBERS(
47 Thyra::EpetraOperatorViewExtractorBase, epetraFwdOpViewExtractor );
48#endif
49
51
54
56 bool isCompatible( const Thyra::LinearOpSourceBase<double> &fwdOp ) const;
58 bool applySupportsConj(Thyra::EConj conj) const;
60 bool applyTransposeSupportsConj(Thyra::EConj conj) const;
62 Teuchos::RCP<Thyra::PreconditionerBase<double> > createPrec() const;
64 void initializePrec(
65 const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
66 Thyra::PreconditionerBase<double> *prec,
67 const Thyra::ESupportSolveUse supportSolveUse
68 ) const;
71 Thyra::PreconditionerBase<double> *prec
72 ,Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > *fwdOp
73 ,Thyra::ESupportSolveUse *supportSolveUse
74 ) const;
75
77
80
83 Teuchos::RCP<Teuchos::ParameterList> const& paramList);
85 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
87 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
89 Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
91 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
93
96
98 std::string description() const;
99
100 // ToDo: Add an override of describe(...) to give more detail!
101
103
107 const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
108 Thyra::PreconditionerBase<double> *prec,
109 const Thyra::ESupportSolveUse supportSolveUse
110 ) const;
111
112#ifdef TEKO_HAVE_EPETRA
115 void initializePrec_Epetra(
116 const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
117 Thyra::PreconditionerBase<double> *prec,
118 const Thyra::ESupportSolveUse supportSolveUse
119 ) const;
120#endif
121
124 void setRequestHandler(const Teuchos::RCP<Teko::RequestHandler> & rh)
125 { reqHandler_ = rh; }
126
129 Teuchos::RCP<Teko::RequestHandler> getRequestHandler() const
130 { return reqHandler_; }
131
133 const std::vector<int> & getDecomposition() const
134 { return decomp_; }
135
136private:
137
138#ifdef TEKO_HAVE_EPETRA
151 Teuchos::RCP<Epetra_Operator> buildWrappedEpetraOperator(
152 const Teuchos::RCP<const Epetra_Operator> & Jac,
153 const Teuchos::RCP<Epetra_Operator> & wrapInput,
154 std::ostream & out) const;
155
164 void buildStridedVectors(const Epetra_Operator & Jac,
165 const std::vector<int> & decomp,
166 std::vector<std::vector<int> > & vars) const;
167#endif // TEKO_HAVE_EPETRA
168
169 Teuchos::RCP<Teuchos::ParameterList> paramList_;
170
171 mutable Teuchos::RCP<Teko::InverseLibrary> invLib_;
172 mutable Teuchos::RCP<Teko::InverseFactory> invFactory_;
173 Teuchos::RCP<Teko::RequestHandler> reqHandler_;
174 mutable std::vector<int> decomp_;
175 Teuchos::RCP<Stratimikos::DefaultLinearSolverBuilder> builder_; // builder to use for default solvers
176};
177
185void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
186 const std::string & stratName="Teko");
187
195void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
196 const Teuchos::RCP<Teko::RequestHandler> & rh,
197 const std::string & stratName="Teko");
198
199} // namespace Teko
200
201#endif
Concrete preconditioner factory subclass based on ML.
void initializePrec(const Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > &fwdOp, Thyra::PreconditionerBase< double > *prec, const Thyra::ESupportSolveUse supportSolveUse) const
Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
Teuchos::RCP< Thyra::PreconditionerBase< double > > createPrec() const
bool isCompatible(const Thyra::LinearOpSourceBase< double > &fwdOp) const
bool applyTransposeSupportsConj(Thyra::EConj conj) const
bool applySupportsConj(Thyra::EConj conj) const
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const &paramList)
Teuchos::RCP< Teko::RequestHandler > getRequestHandler() const
void uninitializePrec(Thyra::PreconditionerBase< double > *prec, Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > *fwdOp, Thyra::ESupportSolveUse *supportSolveUse) const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
void setRequestHandler(const Teuchos::RCP< Teko::RequestHandler > &rh)
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
void initializePrec_Thyra(const Teuchos::RCP< const Thyra::LinearOpSourceBase< double > > &fwdOp, Thyra::PreconditionerBase< double > *prec, const Thyra::ESupportSolveUse supportSolveUse) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
const std::vector< int > & getDecomposition() const
Get the decomposition vector in use by this factory.