|
Stratimikos Package Browser (Single Doxygen Collection) Version of the Day
|
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
1.7.4