Teko Version of the Day
Teko_StratimikosFactory.hpp
00001 #ifndef __Teko_StratimikosFactory_hpp__
00002 #define __Teko_StratimikosFactory_hpp__
00003 
00004 #include <vector>
00005 
00006 #include "Thyra_PreconditionerFactoryBase.hpp"
00007 #include "Thyra_EpetraOperatorViewExtractorBase.hpp"
00008 #include "Teuchos_StandardCompositionMacros.hpp"
00009 
00010 #include "Teko_RequestHandler.hpp"
00011 #include "Teko_InverseLibrary.hpp"
00012 #include "Teko_InverseFactory.hpp"
00013 
00014 #include "Epetra_Operator.h"
00015 
00016 namespace Teko {
00017 
00022 class StratimikosFactory : public Thyra::PreconditionerFactoryBase<double> {
00023 public:
00024 
00027 
00029   StratimikosFactory();
00030 
00031   StratimikosFactory(const Teuchos::RCP<Teko::RequestHandler> & rh);
00032     
00041   STANDARD_COMPOSITION_MEMBERS(
00042     Thyra::EpetraOperatorViewExtractorBase, epetraFwdOpViewExtractor );
00043 
00045 
00048 
00050   bool isCompatible( const Thyra::LinearOpSourceBase<double> &fwdOp ) const;
00052   bool applySupportsConj(Thyra::EConj conj) const;
00054   bool applyTransposeSupportsConj(Thyra::EConj conj) const;
00056   Teuchos::RCP<Thyra::PreconditionerBase<double> > createPrec() const;
00058   void initializePrec(
00059     const Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > &fwdOp,
00060     Thyra::PreconditionerBase<double> *prec,
00061     const Thyra::ESupportSolveUse supportSolveUse
00062     ) const;
00064   void uninitializePrec(
00065     Thyra::PreconditionerBase<double> *prec
00066     ,Teuchos::RCP<const Thyra::LinearOpSourceBase<double> > *fwdOp
00067     ,Thyra::ESupportSolveUse *supportSolveUse
00068     ) const;
00069 
00071 
00074 
00076   void setParameterList(
00077     Teuchos::RCP<Teuchos::ParameterList> const& paramList);
00079   Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
00081   Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
00083   Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
00085   Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
00087 
00090 
00092   std::string description() const;
00093 
00094   // ToDo: Add an override of describe(...) to give more detail!
00095 
00097 
00100   void setRequestHandler(const Teuchos::RCP<Teko::RequestHandler> & rh)
00101   { reqHandler_ = rh; }
00102 
00105   Teuchos::RCP<Teko::RequestHandler> getRequestHandler() const 
00106   { return reqHandler_; }
00107 
00108 private:
00109 
00122   Teuchos::RCP<Epetra_Operator> buildWrappedEpetraOperator(
00123                                                      const Teuchos::RCP<const Epetra_Operator> & Jac,
00124                                                      const Teuchos::RCP<Epetra_Operator> & wrapInput,
00125                                                      std::ostream & out) const;
00126 
00127   Teuchos::RCP<Teuchos::ParameterList> paramList_;
00128 
00129   mutable Teuchos::RCP<Teko::InverseLibrary> invLib_;
00130   mutable Teuchos::RCP<Teko::InverseFactory> invFactory_;
00131   Teuchos::RCP<Teko::RequestHandler> reqHandler_;
00132   mutable std::vector<int> decomp_;
00133 };
00134 
00135 void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
00136                                const std::string & stratName="Teko");
00137 
00138 void addTekoToStratimikosBuilder(Stratimikos::DefaultLinearSolverBuilder & builder,
00139                                const Teuchos::RCP<Teko::RequestHandler> & rh,
00140                                const std::string & stratName="Teko");
00141 
00142 } // namespace Teko
00143 
00144 #endif 
 All Classes Files Functions Variables