00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP
00030 #define THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP
00031
00032 #include "Thyra_SolveSupportTypes.hpp"
00033 #include "Thyra_LinearOpSourceBase.hpp"
00034 #include "Thyra_PreconditionerBase.hpp"
00035 #include "Teuchos_Describable.hpp"
00036 #include "Teuchos_ParameterListAcceptor.hpp"
00037 #include "Teuchos_VerboseObject.hpp"
00038
00039 namespace Thyra {
00040
00046 template <class RangeScalar, class DomainScalar = RangeScalar>
00047 class PreconditionerFactoryBase
00048 : virtual public Teuchos::Describable
00049 , virtual public Teuchos::ParameterListAcceptor
00050 , virtual public Teuchos::VerboseObject<PreconditionerFactoryBase<RangeScalar,DomainScalar> >
00051 {
00052 public:
00053
00056
00060 virtual bool isCompatible( const LinearOpSourceBase<RangeScalar,DomainScalar> &fwdOpSrc ) const = 0;
00061
00071 virtual Teuchos::RCP<PreconditionerBase<DomainScalar,RangeScalar> > createPrec() const = 0;
00072
00119 virtual void initializePrec(
00120 const Teuchos::RCP<const LinearOpSourceBase<RangeScalar,DomainScalar> > &fwdOpSrc
00121 ,PreconditionerBase<DomainScalar,RangeScalar> *precOp
00122 ,const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
00123 ) const = 0;
00124
00161 virtual void uninitializePrec(
00162 PreconditionerBase<DomainScalar,RangeScalar> *prec
00163 ,Teuchos::RCP<const LinearOpSourceBase<RangeScalar,DomainScalar> > *fwdOpSrc = NULL
00164 ,ESupportSolveUse *supportSolveUse = NULL
00165 ) const = 0;
00166
00168
00171
00177 virtual bool applySupportsConj(EConj conj) const;
00178
00184 virtual bool applyTransposeSupportsConj(EConj conj) const;
00185
00187
00188 };
00189
00190
00191
00192
00193
00194
00195
00196
00197 template <class RangeScalar, class DomainScalar>
00198 bool PreconditionerFactoryBase<RangeScalar,DomainScalar>::applySupportsConj(EConj conj) const
00199 {
00200 return true;
00201 }
00202
00203 template <class RangeScalar, class DomainScalar>
00204 bool PreconditionerFactoryBase<RangeScalar,DomainScalar>::applyTransposeSupportsConj(EConj conj) const
00205 {
00206 return false;
00207 }
00208
00209 }
00210
00211 #endif // THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP