10#ifndef Thyra_MultiVectorPreconditioner_hpp
11#define Thyra_MultiVectorPreconditioner_hpp
13#include "Thyra_PreconditionerBase.hpp"
14#include "Teuchos_ConstNonconstObjectContainer.hpp"
16#include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
23template <
class Scalar>
34 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
36 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
46 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
48 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
59 return prec_.getNonconstObj();
64 return prec_.getConstObj();
81 return prec_.getConstObj()->isLeftPrecOpConst();
86 return nonconstMultiVectorLinearOp(
93 return multiVectorLinearOp(
prec_.getConstObj()->getLeftPrecOp(),
99 return prec_.getConstObj()->isRightPrecOpConst();
104 return nonconstMultiVectorLinearOp(
111 return multiVectorLinearOp(
prec_.getConstObj()->getRightPrecOp(),
117 return prec_.getConstObj()->isUnspecifiedPrecOpConst();
122 return nonconstMultiVectorLinearOp(
129 return multiVectorLinearOp(
prec_.getNonconstObj()->getUnspecifiedPrecOp(),
139 typedef Teuchos::ConstNonconstObjectContainer<PreconditionerBase<Scalar> >
154 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
156 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
160 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
161 TEUCHOS_TEST_FOR_EXCEPT(is_null(multiVecRange));
162 TEUCHOS_TEST_FOR_EXCEPT(is_null(multiVecDomain));
163 TEUCHOS_TEST_FOR_EXCEPT(multiVecRange->numBlocks() !=
164 multiVecDomain->numBlocks());
168 (void)multiVecDomain;
177template <
class Scalar>
187template <
class Scalar>
190 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
192 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
195 RCP<MultiVectorPreconditioner<Scalar> > mvprec =
197 mvprec->nonconstInitialize(prec, multiVecRange, multiVecDomain);
205template <
class Scalar>
208 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
210 const RCP<
const DefaultMultiVectorProductVectorSpace<Scalar> >
213 RCP<MultiVectorPreconditioner<Scalar> > mvprec =
215 mvprec->initialize(prec, multiVecRange, multiVecDomain);
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
RCP< MultiVectorPreconditioner< Scalar > > multiVectorPreconditioner(const RCP< const PreconditionerBase< Scalar > > &prec, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor function.
Teuchos::ConstNonconstObjectContainer< PreconditionerBase< Scalar > > CNPB
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecDomain_
bool isRightPrecOpConst() const
static void validateInitialize(const RCP< const PreconditionerBase< Scalar > > &prec, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
RCP< const PreconditionerBase< Scalar > > getPreconditioner() const
void initialize(const RCP< const PreconditionerBase< Scalar > > &prec, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
void nonconstInitialize(const RCP< PreconditionerBase< Scalar > > &prec, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
bool isLeftPrecOpConst() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
bool isUnspecifiedPrecOpConst() const
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
RCP< MultiVectorPreconditioner< Scalar > > nonconstMultiVectorPreconditioner(const RCP< PreconditionerBase< Scalar > > &prec, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor function.
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecRange_
MultiVectorPreconditioner()
Construct to uninitialized.
RCP< MultiVectorPreconditioner< Scalar > > multiVectorPreconditioner()
Nonmember constructor function.
RCP< PreconditionerBase< Scalar > > getNonconstPreconditioner()