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"
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));
119template<
class Scalar>
120RCP<AdjointPreconditioner<Scalar> >
123 return Teuchos::rcp(
new AdjointPreconditioner<Scalar>());
130template<
class Scalar>
131RCP<AdjointPreconditioner<Scalar> >
133 const RCP<PreconditionerBase<Scalar> > &prec
136 RCP<AdjointPreconditioner<Scalar> >
137 aprec = Teuchos::rcp(
new AdjointPreconditioner<Scalar>());
138 aprec->nonconstInitialize(prec);
146template<
class Scalar>
147RCP<AdjointPreconditioner<Scalar> >
149 const RCP<
const PreconditionerBase<Scalar> > &prec
152 RCP<AdjointPreconditioner<Scalar> >
153 aprec = Teuchos::rcp(
new AdjointPreconditioner<Scalar>());
154 aprec->initialize(prec);
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.
AdjointPreconditioner()
Construct to uninitialized.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
bool isLeftPrecOpConst() const
RCP< PreconditionerBase< Scalar > > getNonconstPreconditioner()
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
bool isUnspecifiedPrecOpConst() const
RCP< AdjointPreconditioner< Scalar > > nonconstAdjointPreconditioner(const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
Teuchos::ConstNonconstObjectContainer< PreconditionerBase< Scalar > > CNPB
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner(const RCP< const PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner()
Nonmember constructor function.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
void initialize(const RCP< const PreconditionerBase< Scalar > > &prec)
bool isRightPrecOpConst() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
static void validateInitialize(const RCP< const PreconditionerBase< Scalar > > &prec)
RCP< const PreconditionerBase< Scalar > > getPreconditioner() const
void nonconstInitialize(const RCP< PreconditionerBase< Scalar > > &prec)