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_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00030 #define THYRA_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00031
00032
00033 #include "Thyra_LinearOpWithSolveBaseDecl.hpp"
00034
00035
00036 namespace Thyra {
00037
00038
00047 template<class Scalar>
00048 class DelayedLinearOpWithSolveFactory
00049 : virtual public LinearOpWithSolveFactoryBase<Scalar>
00050 {
00051 public:
00052
00055
00057 DelayedLinearOpWithSolveFactory(
00058 const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00059 );
00060
00062 RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
00063
00065 RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
00066
00068
00071
00073 std::string description() const;
00074
00076
00079
00081 void setParameterList(RCP<ParameterList> const& paramList);
00083 RCP<ParameterList> getParameterList();
00085 RCP<ParameterList> unsetParameterList();
00087 RCP<const ParameterList> getParameterList() const;
00089 RCP<const ParameterList> getValidParameters() const;
00090
00092
00095
00097 virtual bool acceptsPreconditionerFactory() const;
00098
00100 virtual void setPreconditionerFactory(
00101 const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
00102 const std::string &precFactoryName
00103 );
00104
00106 virtual RCP<PreconditionerFactoryBase<Scalar> >
00107 getPreconditionerFactory() const;
00108
00110 virtual void unsetPreconditionerFactory(
00111 RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
00112 std::string *precFactoryName
00113 );
00114
00116 virtual bool isCompatible(
00117 const LinearOpSourceBase<Scalar> &fwdOpSrc
00118 ) const;
00119
00121 virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
00122
00124 virtual void initializeOp(
00125 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00126 LinearOpWithSolveBase<Scalar> *Op,
00127 const ESupportSolveUse supportSolveUse
00128 ) const;
00129
00131 virtual void initializeAndReuseOp(
00132 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00133 LinearOpWithSolveBase<Scalar> *Op
00134 ) const;
00135
00137 virtual void uninitializeOp(
00138 LinearOpWithSolveBase<Scalar> *Op,
00139 RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
00140 RCP<const PreconditionerBase<Scalar> > *prec,
00141 RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
00142 ESupportSolveUse *supportSolveUse
00143 ) const;
00144
00146 virtual bool supportsPreconditionerInputType(
00147 const EPreconditionerInputType precOpType
00148 ) const;
00149
00151 virtual void initializePreconditionedOp(
00152 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00153 const RCP<const PreconditionerBase<Scalar> > &prec,
00154 LinearOpWithSolveBase<Scalar> *Op,
00155 const ESupportSolveUse supportSolveUse
00156 ) const;
00157
00159 virtual void initializeApproxPreconditionedOp(
00160 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00161 const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
00162 LinearOpWithSolveBase<Scalar> *Op,
00163 const ESupportSolveUse supportSolveUse
00164 ) const;
00165
00167
00168 protected:
00169
00172
00174 void informUpdatedVerbosityState() const;
00175
00177
00178 private:
00179
00180 RCP<LinearOpWithSolveFactoryBase<Scalar> > lowsf_;
00181
00182
00183 DelayedLinearOpWithSolveFactory();
00184
00185 };
00186
00187
00188 }
00189
00190
00191 #endif // THYRA_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP