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()