10#ifndef Thyra_ReuseLinearOpWithSolveFactory_hpp
11#define Thyra_ReuseLinearOpWithSolveFactory_hpp
13#include "Thyra_LinearOpWithSolveFactoryBase.hpp"
21template <
class Scalar>
98 const std::string &precFactoryName);
107 std::string *precFactoryName);
109 virtual bool isCompatible(
const LinearOpSourceBase<Scalar> &fwdOpSrc)
const;
111 virtual RCP<LinearOpWithSolveBase<Scalar> >
createOp()
const;
114 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
116 const ESupportSolveUse supportSolveUse)
const;
119 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
124 RCP<
const LinearOpSourceBase<Scalar> > *fwdOpSrc,
126 RCP<
const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
127 ESupportSolveUse *supportSolveUse)
const;
130 const EPreconditionerInputType precOpType)
const;
133 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
136 const ESupportSolveUse supportSolveUse)
const;
139 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
140 const RCP<
const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
142 const ESupportSolveUse supportSolveUse)
const;
155 typedef Teuchos::ConstNonconstObjectContainer<
160 RCP<PreconditionerBase<Scalar> >
prec_;
167template <
class Scalar>
168RCP<ReuseLinearOpWithSolveFactory<Scalar> >
173 RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
175 rlowsf->nonconstInitialize(lowsf, prec);
183template <
class Scalar>
188 RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
190 rlowsf->initialize(lowsf, prec);
196template <
class Scalar>
202 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
203 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
205 lowsf_.initialize(lowsf);
209template <
class Scalar>
215 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
216 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
218 lowsf_.initialize(lowsf);
222template <
class Scalar>
223RCP<LinearOpWithSolveFactoryBase<Scalar> >
226 return lowsf_.getNonconstObj();
229template <
class Scalar>
230RCP<const LinearOpWithSolveFactoryBase<Scalar> >
233 return lowsf_.getConstObj();
236template <
class Scalar>
237RCP<PreconditionerBase<Scalar> >
243template <
class Scalar>
244RCP<const PreconditionerBase<Scalar> >
252template <
class Scalar>
255 std::ostringstream oss;
256 oss << this->Teuchos::Describable::description() <<
"{"
258 if (!is_null(lowsf_.getConstObj()))
259 oss << lowsf_.getConstObj()->description();
265 oss << prec_->description();
274template <
class Scalar>
276 RCP<ParameterList>
const ¶mList)
278 lowsf_.getNonconstObj()->setParameterList(paramList);
281template <
class Scalar>
285 return lowsf_.getNonconstObj()->getNonconstParameterList();
288template <
class Scalar>
291 return lowsf_.getNonconstObj()->unsetParameterList();
294template <
class Scalar>
295RCP<const ParameterList>
298 return lowsf_.getConstObj()->getParameterList();
301template <
class Scalar>
302RCP<const ParameterList>
305 return lowsf_.getConstObj()->getValidParameters();
310template <
class Scalar>
316template <
class Scalar>
324template <
class Scalar>
325RCP<PreconditionerFactoryBase<Scalar> >
328 return Thyra::reusePreconditionerFactory<Scalar>(prec_);
331template <
class Scalar>
339template <
class Scalar>
341 const LinearOpSourceBase<Scalar> &fwdOpSrc)
const
343 return lowsf_.getConstObj()->isCompatible(fwdOpSrc);
346template <
class Scalar>
347RCP<LinearOpWithSolveBase<Scalar> >
350 return lowsf_.getConstObj()->createOp();
353template <
class Scalar>
355 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
357 const ESupportSolveUse supportSolveUse)
const
359 lowsf_.getConstObj()->initializeOp(fwdOpSrc, Op, supportSolveUse);
362template <
class Scalar>
364 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
367 lowsf_.getConstObj()->initializeAndReuseOp(fwdOpSrc, Op);
370template <
class Scalar>
373 RCP<
const LinearOpSourceBase<Scalar> > *fwdOpSrc,
375 RCP<
const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
376 ESupportSolveUse *supportSolveUse)
const
378 lowsf_.getConstObj()->uninitializeOp(Op, fwdOpSrc, prec, approxFwdOpSrc,
382template <
class Scalar>
384 const EPreconditionerInputType precOpType)
const
386 return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
389template <
class Scalar>
391 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
394 const ESupportSolveUse supportSolveUse)
const
396 lowsf_.getConstObj()->initializePreconditionedOp(fwdOpSrc, prec, Op,
400template <
class Scalar>
402 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
403 const RCP<
const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
405 const ESupportSolveUse supportSolveUse)
const
407 lowsf_.getConstObj()->initializeApproxPreconditionedOp(
408 fwdOpSrc, approxFwdOpSrc, Op, supportSolveUse);
413template <
class Scalar>
416 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
417 lowsf_.getConstObj()->setOStream(this->getOStream());
A LinearOpWithSolveFactory that is designed to reuse an already created/initialized preconditioner.
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
RCP< const ParameterList > getParameterList() const
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
void initialize(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Initialize given a single const LOWSFB object.
void nonconstInitialize(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Initialize given a single non-const LOWSFB object.
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
virtual bool acceptsPreconditionerFactory() const
returns false.
void setParameterList(RCP< ParameterList > const ¶mList)
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.
RCP< ReuseLinearOpWithSolveFactory< Scalar > > reuseLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor.
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
std::string description() const
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< ParameterList > getNonconstParameterList()
RCP< ReuseLinearOpWithSolveFactory< Scalar > > nonconstReuseLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor.
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< const ParameterList > getValidParameters() const
ReuseLinearOpWithSolveFactory()
Construct to uninitialized.
Teuchos::ConstNonconstObjectContainer< LinearOpWithSolveFactoryBase< Scalar > > LOWSF_t
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< PreconditionerBase< Scalar > > prec_
RCP< PreconditionerBase< Scalar > > getUnderlyingPreconditioner()
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
RCP< ParameterList > unsetParameterList()