Thyra_BelosLinearOpWithSolveFactoryDecl.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  MaxIters_name;
00042   static const int          MaxIters_default;
00044   static const std::string  MaxRestarts_name;
00046   static const int          MaxRestarts_default;
00048   static const std::string  BlockSize_name;
00050   static const int          BlockSize_default;
00052   static const std::string  AdjustableBlockSize_name;
00054   static const bool         AdjustableBlockSize_default;
00056   static const std::string  DefaultRelResNorm_name;
00058   static const MagnitudeType DefaultRelResNorm_default;
00060   static const std::string  GMRES_name;
00062   static const std::string  GMRES_MaxNumberOfKrylovVectors_name;
00064   static const int          GMRES_MaxNumberOfKrylovVectors_default;
00066   static const std::string  GMRES_Variant_name;
00068   static const std::string  GMRES_Variant_default;
00070   static const std::string  Outputter_name;
00072   static const std::string  Outputter_OutputFrequency_name;
00074   static const int          Outputter_OutputFrequency_default;
00076   static const std::string  Outputter_OutputMaxResOnly_name;
00078   static const bool         Outputter_OutputMaxResOnly_default;
00079 
00081 
00084 
00086   BelosLinearOpWithSolveFactory();
00087 
00089   BelosLinearOpWithSolveFactory(
00090     const Teuchos::RefCountPtr<PreconditionerFactoryBase<Scalar> >  &precFactory
00091     );
00092 
00094 
00098   bool acceptsPreconditionerFactory() const;
00100   void setPreconditionerFactory(
00101     const Teuchos::RefCountPtr<PreconditionerFactoryBase<Scalar> >  &precFactory
00102     ,const std::string                                              &precFactoryName
00103     );
00105   Teuchos::RefCountPtr<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory() const;
00107   void unsetPreconditionerFactory(
00108     Teuchos::RefCountPtr<PreconditionerFactoryBase<Scalar> >  *precFactory
00109     ,std::string                                              *precFactoryName
00110     );
00112   bool isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const;
00114   Teuchos::RefCountPtr<LinearOpWithSolveBase<Scalar> > createOp() const;
00116   void initializeOp(
00117     const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >    &fwdOpSrc
00118     ,LinearOpWithSolveBase<Scalar>                                   *Op
00119     ,const ESupportSolveUse                                          supportSolveUse
00120     ) const;
00122   void initializeAndReuseOp(
00123     const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >    &fwdOpSrc
00124     ,LinearOpWithSolveBase<Scalar>                                   *Op
00125     ) const;
00127   void uninitializeOp(
00128     LinearOpWithSolveBase<Scalar>                               *Op
00129     ,Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >    *fwdOpSrc
00130     ,Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >    *prec
00131     ,Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >    *approxFwdOpSrc
00132     ,ESupportSolveUse                                           *supportSolveUse
00133     ) const;
00135   bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
00137   void initializePreconditionedOp(
00138     const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00139     ,const Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >      &prec
00140     ,LinearOpWithSolveBase<Scalar>                                      *Op
00141     ,const ESupportSolveUse                                             supportSolveUse
00142     ) const;
00144   void initializeApproxPreconditionedOp(
00145     const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00146     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >      &approxFwdOpSrc
00147     ,LinearOpWithSolveBase<Scalar>                                      *Op
00148     ,const ESupportSolveUse                                             supportSolveUse
00149     ) const;
00151 
00154 
00156   void setParameterList(Teuchos::RefCountPtr<Teuchos::ParameterList> const& paramList);
00158   Teuchos::RefCountPtr<Teuchos::ParameterList> getParameterList();
00160   Teuchos::RefCountPtr<Teuchos::ParameterList> unsetParameterList();
00162   Teuchos::RefCountPtr<const Teuchos::ParameterList> getParameterList() const;
00164   Teuchos::RefCountPtr<const Teuchos::ParameterList> getValidParameters() const;
00165 
00167 
00170 
00172   std::string description() const;
00173 
00175 
00176 private:
00177 
00178   // /////////////////////////
00179   // Private data members
00180 
00181   Teuchos::RefCountPtr<PreconditionerFactoryBase<Scalar> >  precFactory_;
00182   std::string                                               precFactoryName_;
00183   Teuchos::RefCountPtr<Teuchos::ParameterList>              thisValidParamList_;
00184   Teuchos::RefCountPtr<Teuchos::ParameterList>              paramList_;
00185   bool                                                      useGmres_;
00186 
00187   // /////////////////////////
00188   // Private member functions
00189 
00190   static Teuchos::RefCountPtr<const Teuchos::ParameterList> generateAndGetValidParameters();
00191 
00192   void updateThisValidParamList();
00193 
00194   void initializeOpImpl(
00195     const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >       &fwdOpSrc
00196     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >      &approxFwdOpSrc
00197     ,const Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >      &prec
00198     ,const bool                                                         reusePrec
00199     ,LinearOpWithSolveBase<Scalar>                                      *Op
00200     ,const ESupportSolveUse                                             supportSolveUse
00201     ) const;
00202 
00203 };
00204 
00206 
00207 } // namespace Thyra
00208 
00209 #endif // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP

Generated on Thu Sep 18 12:30:22 2008 for Belos Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1