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_LINEAR_OP_WITH_SOLVE_FACTORY_BASE_DECL_HPP
00030 #define THYRA_LINEAR_OP_WITH_SOLVE_FACTORY_BASE_DECL_HPP
00031
00032 #include "Thyra_LinearOpWithSolveBase.hpp"
00033 #include "Thyra_PreconditionerFactoryBase.hpp"
00034 #include "Teuchos_ParameterListAcceptor.hpp"
00035 #include "Teuchos_VerboseObject.hpp"
00036
00037
00038 namespace Thyra {
00039
00040
00390 template<class Scalar>
00391 class LinearOpWithSolveFactoryBase
00392 : virtual public Teuchos::Describable,
00393 virtual public Teuchos::VerboseObject<LinearOpWithSolveFactoryBase<Scalar> >,
00394 virtual public Teuchos::ParameterListAcceptor
00395 {
00396 public:
00397
00400
00405 virtual bool acceptsPreconditionerFactory() const;
00406
00428 virtual void setPreconditionerFactory(
00429 const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
00430 const std::string &precFactoryName
00431 );
00432
00437 virtual RCP<PreconditionerFactoryBase<Scalar> >
00438 getPreconditionerFactory() const;
00439
00448 virtual void unsetPreconditionerFactory(
00449 RCP<PreconditionerFactoryBase<Scalar> > *precFactory = NULL,
00450 std::string *precFactoryName = NULL
00451 );
00452
00454
00457
00461 virtual bool isCompatible(
00462 const LinearOpSourceBase<Scalar> &fwdOpSrc ) const = 0;
00463
00472 virtual RCP<LinearOpWithSolveBase<Scalar> >
00473 createOp() const = 0;
00474
00548 virtual void initializeOp(
00549 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00550 LinearOpWithSolveBase<Scalar> *Op,
00551 const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
00552 ) const = 0;
00553
00620 virtual void initializeAndReuseOp(
00621 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00622 LinearOpWithSolveBase<Scalar> *Op
00623 ) const;
00624
00684 virtual void uninitializeOp(
00685 LinearOpWithSolveBase<Scalar> *Op,
00686 RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc = NULL,
00687 RCP<const PreconditionerBase<Scalar> > *prec = NULL,
00688 RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc = NULL,
00689 ESupportSolveUse *supportSolveUse = NULL
00690 ) const = 0;
00691
00693
00696
00701 virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
00702
00820 virtual void initializePreconditionedOp(
00821 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00822 const RCP<const PreconditionerBase<Scalar> > &prec,
00823 LinearOpWithSolveBase<Scalar> *Op,
00824 const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
00825 ) const;
00826
00852 virtual void initializeApproxPreconditionedOp(
00853 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00854 const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
00855 LinearOpWithSolveBase<Scalar> *Op,
00856 const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
00857 ) const;
00858
00860
00861 };
00862
00863
00864 }
00865
00866
00867 #endif // THYRA_LINEAR_OP_WITH_SOLVE_FACTORY_BASE_DECL_HPP