47 #ifndef __Teko_BlockUpperTriInverseOp_hpp__
48 #define __Teko_BlockUpperTriInverseOp_hpp__
51 #include "Teko_BlockImplicitLinearOp.hpp"
97 virtual void implicitApply(
const BlockedMultiVector &x, BlockedMultiVector &y,
98 const double alpha = 1.0,
const double beta = 0.0)
const;
113 virtual void implicitApply(
const Thyra::EOpTransp M_trans,
const BlockedMultiVector &x,
114 BlockedMultiVector &y,
const double alpha = 1.0,
115 const double beta = 0.0)
const;
118 virtual void describe(Teuchos::FancyOStream &out_arg,
119 const Teuchos::EVerbosityLevel verbLevel)
const;
123 const BlockedLinearOp
U_;
126 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<double> >
128 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<double> >
132 mutable BlockedMultiVector srcScrap_;
133 mutable BlockedMultiVector dstScrap_;
141 inline LinearOp createBlockUpperTriInverseOp(BlockedLinearOp &U,
142 const std::vector<LinearOp> &invDiag) {
146 inline LinearOp createBlockUpperTriInverseOp(BlockedLinearOp &U,
147 const std::vector<LinearOp> &invDiag,
148 const std::string &str) {
149 Teuchos::RCP<Thyra::LinearOpBase<double> > result =
150 Teuchos::rcp(
new BlockUpperTriInverseOp(U, invDiag));
151 result->setObjectLabel(str);
virtual VectorSpace domain() const
Domain space of this operator.
std::vector< LinearOp > invDiag_
(Approximate) Inverses of the diagonal operators
virtual VectorSpace range() const
Range space of this operator.
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< double > > productRange_
Range vector space.
virtual void implicitApply(const BlockedMultiVector &x, BlockedMultiVector &y, const double alpha=1.0, const double beta=0.0) const
Perform a matrix vector multiply with this operator.
const BlockedLinearOp U_
operator
A virtual class that simplifies the construction of custom operators.
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< double > > productDomain_
Domain vector space.
This linear operator computes the inverse of a upper triangular matrix.