Stratimikos Package Browser (Single Doxygen Collection) Version of the Day
Thyra_BelosLinearOpWithSolveFactory_decl.hpp
Go to the documentation of this file.
00001 
00002 #ifndef THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00003 #define THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00004 
00005 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00006 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00007 #include "Teuchos_StandardCompositionMacros.hpp"
00008 
00009 namespace Teuchos { class ParameterList; }
00010 
00011 namespace Thyra {
00012 
00020 template<class Scalar>
00021 class BelosLinearOpWithSolveFactory : public LinearOpWithSolveFactoryBase<Scalar> {
00022 public:
00023 
00028   typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType  MagnitudeType;
00029 
00031 
00034 
00036   static const std::string  SolverType_name;
00038   static const std::string  SolverType_default;
00040   static const std::string  SolverTypes_name;
00042   static const std::string  BlockGMRES_name;
00044   static const std::string  PseudoBlockGMRES_name;
00046   static const std::string  BlockCG_name;
00048   static const std::string  PseudoBlockCG_name;
00050   static const std::string  GCRODR_name;
00052   static const std::string  ConvergenceTestFrequency_name;
00053 
00055 
00058 
00060   BelosLinearOpWithSolveFactory();
00061 
00063   BelosLinearOpWithSolveFactory(
00064     const Teuchos::RCP<PreconditionerFactoryBase<Scalar> >      &precFactory
00065     );
00066 
00068 
00072   bool acceptsPreconditionerFactory() const;
00074   void setPreconditionerFactory(
00075     const Teuchos::RCP<PreconditionerFactoryBase<Scalar> >      &precFactory
00076     ,const std::string                                          &precFactoryName
00077     );
00079   Teuchos::RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory() const;
00081   void unsetPreconditionerFactory(
00082     Teuchos::RCP<PreconditionerFactoryBase<Scalar> >            *precFactory
00083     ,std::string                                                *precFactoryName
00084     );
00086   bool isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const;
00088   Teuchos::RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
00090   void initializeOp(
00091     const Teuchos::RCP<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00092     ,LinearOpWithSolveBase<Scalar>                              *Op
00093     ,const ESupportSolveUse                                     supportSolveUse
00094     ) const;
00096   void initializeAndReuseOp(
00097     const Teuchos::RCP<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00098     ,LinearOpWithSolveBase<Scalar>                              *Op
00099     ) const;
00101   void uninitializeOp(
00102     LinearOpWithSolveBase<Scalar>                               *Op
00103     ,Teuchos::RCP<const LinearOpSourceBase<Scalar> >            *fwdOpSrc
00104     ,Teuchos::RCP<const PreconditionerBase<Scalar> >            *prec
00105     ,Teuchos::RCP<const LinearOpSourceBase<Scalar> >            *approxFwdOpSrc
00106     ,ESupportSolveUse                                           *supportSolveUse
00107     ) const;
00109   bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
00111   void initializePreconditionedOp(
00112     const Teuchos::RCP<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00113     ,const Teuchos::RCP<const PreconditionerBase<Scalar> >      &prec
00114     ,LinearOpWithSolveBase<Scalar>                              *Op
00115     ,const ESupportSolveUse                                     supportSolveUse
00116     ) const;
00118   void initializeApproxPreconditionedOp(
00119     const Teuchos::RCP<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00120     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >      &approxFwdOpSrc
00121     ,LinearOpWithSolveBase<Scalar>                              *Op
00122     ,const ESupportSolveUse                                     supportSolveUse
00123     ) const;
00125 
00128 
00130   void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
00132   Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
00134   Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
00136   Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
00138   Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
00139 
00141 
00144 
00146   std::string description() const;
00147 
00149 
00150 private:
00151 
00152   // /////////////////////////
00153   // Private types
00154 
00155   enum ESolverType {
00156     SOLVER_TYPE_BLOCK_GMRES,
00157     SOLVER_TYPE_PSEUDO_BLOCK_GMRES,
00158     SOLVER_TYPE_BLOCK_CG,
00159     SOLVER_TYPE_PSEUDO_BLOCK_CG,
00160     SOLVER_TYPE_GCRODR
00161   };
00162 
00163   // /////////////////////////
00164   // Private data members
00165 
00166   Teuchos::RCP<PreconditionerFactoryBase<Scalar> >  precFactory_;
00167   std::string                                       precFactoryName_;
00168   Teuchos::RCP<Teuchos::ParameterList>              thisValidParamList_;
00169   Teuchos::RCP<Teuchos::ParameterList>              paramList_;
00170   ESolverType solverType_;
00171   int convergenceTestFrequency_;
00172 
00173   // /////////////////////////
00174   // Private member functions
00175 
00176   static Teuchos::RCP<const Teuchos::ParameterList> generateAndGetValidParameters();
00177 
00178   void updateThisValidParamList();
00179 
00180   void initializeOpImpl(
00181     const Teuchos::RCP<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00182     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >      &approxFwdOpSrc
00183     ,const Teuchos::RCP<const PreconditionerBase<Scalar> >      &prec
00184     ,const bool                                                 reusePrec
00185     ,LinearOpWithSolveBase<Scalar>                              *Op
00186     ,const ESupportSolveUse                                     supportSolveUse
00187     ) const;
00188 
00189 };
00190 
00192 
00193 } // namespace Thyra
00194 
00195 #endif // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines