9#ifndef Thyra_ReuseLinearOpWithSolveFactory_hpp
10#define Thyra_ReuseLinearOpWithSolveFactory_hpp
12#include "Thyra_LinearOpWithSolveFactoryBase.hpp"
102 const std::string &precFactoryName
106 virtual RCP<PreconditionerFactoryBase<Scalar> >
112 std::string *precFactoryName
116 const LinearOpSourceBase<Scalar> &fwdOpSrc
119 virtual RCP<LinearOpWithSolveBase<Scalar> >
createOp()
const;
122 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
124 const ESupportSolveUse supportSolveUse
128 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
134 RCP<
const LinearOpSourceBase<Scalar> > *fwdOpSrc,
136 RCP<
const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
137 ESupportSolveUse *supportSolveUse
141 const EPreconditionerInputType precOpType
145 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
148 const ESupportSolveUse supportSolveUse
152 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
153 const RCP<
const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
155 const ESupportSolveUse supportSolveUse
171 typedef Teuchos::ConstNonconstObjectContainer<LinearOpWithSolveFactoryBase<Scalar> >
LOWSF_t;
174 RCP< PreconditionerBase<Scalar> >
prec_;
182template<
class Scalar>
183RCP<ReuseLinearOpWithSolveFactory<Scalar> >
189 RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
191 rlowsf->nonconstInitialize(lowsf, prec);
199template<
class Scalar>
200RCP<ReuseLinearOpWithSolveFactory<Scalar> >
206 RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
208 rlowsf->initialize(lowsf, prec);
214template<
class Scalar>
223 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
224 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
226 lowsf_.initialize(lowsf);
230template<
class Scalar>
239 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
240 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
242 lowsf_.initialize(lowsf);
246template<
class Scalar>
247RCP<LinearOpWithSolveFactoryBase<Scalar> >
251 return lowsf_.getNonconstObj();
254template<
class Scalar>
255RCP<const LinearOpWithSolveFactoryBase<Scalar> >
259 return lowsf_.getConstObj();
262template<
class Scalar>
263RCP<PreconditionerBase<Scalar> >
270template<
class Scalar>
271RCP<const PreconditionerBase<Scalar> >
280template<
class Scalar>
285 std::ostringstream oss;
286 oss << this->Teuchos::Describable::description()
289 if (!is_null(lowsf_.getConstObj()))
290 oss << lowsf_.getConstObj()->description();
296 oss << prec_->description();
305template<
class Scalar>
309 RCP<ParameterList>
const& paramList
312 lowsf_.getNonconstObj()->setParameterList(paramList);
315template<
class Scalar>
320 return lowsf_.getNonconstObj()->getNonconstParameterList();
323template<
class Scalar>
328 return lowsf_.getNonconstObj()->unsetParameterList();
331template<
class Scalar>
332RCP<const ParameterList>
336 return lowsf_.getConstObj()->getParameterList();
339template<
class Scalar>
340RCP<const ParameterList>
344 return lowsf_.getConstObj()->getValidParameters();
349template<
class Scalar>
357template<
class Scalar>
367template<
class Scalar>
368RCP<PreconditionerFactoryBase<Scalar> >
372 return Thyra::reusePreconditionerFactory<Scalar>(prec_);
375template<
class Scalar>
384template<
class Scalar>
388 const LinearOpSourceBase<Scalar> &fwdOpSrc
391 return lowsf_.getConstObj()->isCompatible(fwdOpSrc);
394template<
class Scalar>
395RCP<LinearOpWithSolveBase<Scalar> >
399 return lowsf_.getConstObj()->createOp();
402template<
class Scalar>
406 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
408 const ESupportSolveUse supportSolveUse
411 lowsf_.getConstObj()->initializeOp(fwdOpSrc, Op, supportSolveUse);
414template<
class Scalar>
418 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
422 lowsf_.getConstObj()->initializeAndReuseOp(fwdOpSrc, Op);
425template<
class Scalar>
430 RCP<
const LinearOpSourceBase<Scalar> > *fwdOpSrc,
432 RCP<
const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
433 ESupportSolveUse *supportSolveUse
436 lowsf_.getConstObj()->uninitializeOp(Op, fwdOpSrc, prec, approxFwdOpSrc,
440template<
class Scalar>
444 const EPreconditionerInputType precOpType
447 return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
450template<
class Scalar>
454 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
457 const ESupportSolveUse supportSolveUse
460 lowsf_.getConstObj()->initializePreconditionedOp(fwdOpSrc, prec, Op,
464template<
class Scalar>
468 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
469 const RCP<
const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
471 const ESupportSolveUse supportSolveUse
474 lowsf_.getConstObj()->initializeApproxPreconditionedOp(fwdOpSrc,
482template<
class Scalar>
487 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
488 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.
Teuchos::ConstNonconstObjectContainer< LinearOpWithSolveFactoryBase< Scalar > > LOWSF_t
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
RCP< PreconditionerBase< Scalar > > prec_
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.
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< PreconditionerBase< Scalar > > getUnderlyingPreconditioner()
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
RCP< ParameterList > unsetParameterList()