9 #ifndef Thyra_AdjointPreconditioner_hpp
10 #define Thyra_AdjointPreconditioner_hpp
12 #include "Thyra_PreconditionerBase.hpp"
13 #include "Teuchos_ConstNonconstObjectContainer.hpp"
14 #include "Thyra_DefaultScaledAdjointLinearOp.hpp"
21 template<
class Scalar>
33 const RCP<PreconditionerBase<Scalar> > &prec) {
39 const RCP<
const PreconditionerBase<Scalar> > &prec) {
44 RCP<PreconditionerBase<Scalar> >
47 RCP<const PreconditionerBase<Scalar> >
60 {
return prec_.getConstObj()->isLeftPrecOpConst(); }
63 {
return nonconstAdjoint(
prec_.getNonconstObj()->getNonconstLeftPrecOp()); }
66 {
return adjoint(
prec_.getConstObj()->getLeftPrecOp()); }
69 {
return prec_.getConstObj()->isRightPrecOpConst(); }
72 {
return nonconstAdjoint(
prec_.getNonconstObj()->getNonconstRightPrecOp()); }
75 {
return adjoint(
prec_.getConstObj()->getRightPrecOp()); }
78 {
return prec_.getConstObj()->isUnspecifiedPrecOpConst(); }
81 {
return nonconstAdjoint(
82 prec_.getNonconstObj()->getNonconstUnspecifiedPrecOp()); }
85 {
return adjoint(
prec_.getNonconstObj()->getUnspecifiedPrecOp()); }
94 typedef Teuchos::ConstNonconstObjectContainer<PreconditionerBase<Scalar> >
CNPB;
105 const RCP<
const PreconditionerBase<Scalar> > &prec) {
107 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
117 template<
class Scalar>
118 RCP<AdjointPreconditioner<Scalar> >
128 template<
class Scalar>
129 RCP<AdjointPreconditioner<Scalar> >
131 const RCP<PreconditionerBase<Scalar> > &prec
134 RCP<AdjointPreconditioner<Scalar> >
136 aprec->nonconstInitialize(prec);
144 template<
class Scalar>
145 RCP<AdjointPreconditioner<Scalar> >
147 const RCP<
const PreconditionerBase<Scalar> > &prec
150 RCP<AdjointPreconditioner<Scalar> >
152 aprec->initialize(prec);