10#ifndef Thyra_AdjointPreconditionerFactory_hpp
11#define Thyra_AdjointPreconditionerFactory_hpp
13#include "Thyra_PreconditionerFactoryBase.hpp"
14#include "Teuchos_ConstNonconstObjectContainer.hpp"
15#include "Thyra_DefaultScaledAdjointLinearOp.hpp"
23template <
class Scalar>
63 std::ostringstream oss;
64 oss << this->Teuchos::Describable::description() <<
"{"
67 oss <<
prec_fac_.getConstObj()->description();
82 prec_fac_.getNonconstObj()->setParameterList(paramList);
87 return prec_fac_.getNonconstObj()->getNonconstParameterList();
92 return prec_fac_.getNonconstObj()->unsetParameterList();
97 return prec_fac_.getConstObj()->getParameterList();
102 return prec_fac_.getConstObj()->getValidParameters();
114 return prec_fac_.getConstObj()->isCompatible(fwdOpSrc);
119 return nonconstAdjointPreconditioner(
prec_fac_.getConstObj()->createPrec());
123 const RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
125 const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED)
const
127 using Teuchos::dyn_cast;
128 using Teuchos::rcp_dynamic_cast;
130 typedef DefaultScaledAdjointLinearOp<Scalar> ALO;
132 const RCP<const ALO> alo =
133 rcp_dynamic_cast<const ALO>(fwdOpSrc->getOp().assert_not_null());
134 AP &ap = dyn_cast<AP>(*precOp);
136 defaultLinearOpSource<Scalar>(alo->getOp()),
137 ap.getNonconstPreconditioner().get(), supportSolveUse);
141 RCP<
const LinearOpSourceBase<Scalar> > *fwdOpSrc = NULL,
142 ESupportSolveUse *supportSolveUse = NULL)
const
144 using Teuchos::dyn_cast;
147 TEUCHOS_TEST_FOR_EXCEPT(0 == precOp);
150 AP &ap = dyn_cast<AP>(*precOp);
151 RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc;
152 prec_fac_.getConstObj()->uninitializePrec(
153 ap.getNonconstPreconditioner().get(), fwdOpSrc ? &inner_fwdOpSrc : NULL,
157 defaultLinearOpSource<Scalar>(adjoint(inner_fwdOpSrc->getOp()));
166 typedef Teuchos::ConstNonconstObjectContainer<
182 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec_fac));
193template <
class Scalar>
203template <
class Scalar>
207 RCP<AdjointPreconditionerFactory<Scalar> > afac =
209 afac->nonconstInitialize(prec_fac);
217template <
class Scalar>
221 RCP<AdjointPreconditionerFactory<Scalar> > afac =
223 afac->initialize(prec_fac);
Concrete PreconditionerFactoryBase subclass that wraps a preconditioner in AdjointPreconditioner.
void uninitializePrec(PreconditionerBase< Scalar > *precOp, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc=NULL, ESupportSolveUse *supportSolveUse=NULL) const
RCP< const ParameterList > getValidParameters() const
void nonconstInitialize(const RCP< PreconditionerFactoryBase< Scalar > > &prec_fac)
RCP< const ParameterList > getParameterList() const
RCP< AdjointPreconditionerFactory< Scalar > > adjointPreconditionerFactory(const RCP< const PreconditionerFactoryBase< Scalar > > &prec_fac)
Nonmember constructor function.
RCP< ParameterList > unsetParameterList()
Teuchos::ConstNonconstObjectContainer< PreconditionerFactoryBase< Scalar > > CNPFB
RCP< PreconditionerFactoryBase< Scalar > > getNonconstPreconditionerFactory()
RCP< PreconditionerBase< Scalar > > createPrec() const
void initializePrec(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, PreconditionerBase< Scalar > *precOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED) const
std::string description() const
AdjointPreconditionerFactory()
Construct to uninitialized.
RCP< ParameterList > getNonconstParameterList()
RCP< const PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
RCP< AdjointPreconditionerFactory< Scalar > > adjointPreconditionerFactory()
Nonmember constructor function.
RCP< AdjointPreconditionerFactory< Scalar > > nonconstAdjointPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &prec_fac)
Nonmember constructor function.
void setParameterList(RCP< ParameterList > const ¶mList)
bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
static void validateInitialize(const RCP< const PreconditionerFactoryBase< Scalar > > &prec_fac)
void initialize(const RCP< const PreconditionerFactoryBase< Scalar > > &prec_fac)
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.