43 #ifndef THYRA_DEFAULT_BLOCKED_LINEAR_OP_DECL_HPP 44 #define THYRA_DEFAULT_BLOCKED_LINEAR_OP_DECL_HPP 47 #include "Thyra_PhysicallyBlockedLinearOpBase.hpp" 48 #include "Thyra_ProductVectorSpaceBase.hpp" 49 #include "Thyra_RowStatLinearOpBase.hpp" 50 #include "Thyra_ScaledLinearOpBase.hpp" 51 #include "Teuchos_ConstNonconstObjectContainer.hpp" 86 template<
class Scalar>
109 const int numRowBlocks,
const int numColBlocks
122 const int i,
const int j,
127 const int i,
const int j
141 Teuchos::RCP<const ProductVectorSpaceBase<Scalar> >
144 Teuchos::RCP<const ProductVectorSpaceBase<Scalar> >
151 Teuchos::RCP<LinearOpBase<Scalar> >
154 Teuchos::RCP<const LinearOpBase<Scalar> >
155 getBlock(
const int i,
const int j)
const;
163 Teuchos::RCP< const VectorSpaceBase<Scalar> >
range()
const;
165 Teuchos::RCP< const VectorSpaceBase<Scalar> >
domain()
const;
167 Teuchos::RCP<const LinearOpBase<Scalar> >
clone()
const;
187 Teuchos::FancyOStream &out,
188 const Teuchos::EVerbosityLevel verbLevel
219 const RowStatLinearOpBaseUtils::ERowStat rowStat)
const;
223 const RowStatLinearOpBaseUtils::ERowStat rowStat,
255 typedef Teuchos::ConstNonconstObjectContainer<LinearOpBase<Scalar> > CNCLO;
256 typedef Teuchos::Array<Teuchos::RCP<const VectorSpaceBase<Scalar> > > vec_array_t;
258 template<
class Scalar2>
260 BlockEntry() : i(-1), j(-1) {}
261 BlockEntry(
const int i_in,
const int j_in,
const CNCLO &block_in )
262 :i(i_in),j(j_in),block(block_in)
272 Teuchos::RCP<const ProductVectorSpaceBase<Scalar> > productRange_;
273 Teuchos::RCP<const ProductVectorSpaceBase<Scalar> > productDomain_;
274 Teuchos::RCP<const DefaultProductVectorSpace<Scalar> > defaultProductRange_;
275 Teuchos::RCP<const DefaultProductVectorSpace<Scalar> > defaultProductDomain_;
279 std::vector<CNCLO> Ops_;
281 vec_array_t rangeBlocks_;
282 vec_array_t domainBlocks_;
283 std::vector<BlockEntry<Scalar> > Ops_stack_;
284 bool blockFillIsActive_;
289 void resetStorage(
const int numRowBlocks,
const int numColBlocks );
290 void assertBlockFillIsActive(
bool)
const;
291 void assertBlockRowCol(
const int i,
const int j)
const;
295 template<
class LinearOpType>
297 const int i,
const int j,
298 const Teuchos::RCP<LinearOpType> &block
300 void adjustBlockSpaces();
313 template<
class Scalar>
314 RCP<DefaultBlockedLinearOp<Scalar> > defaultBlockedLinearOp();
321 template<
class Scalar>
322 Teuchos::RCP<const LinearOpBase<Scalar> >
325 const std::string &label =
"" 333 template<
class Scalar>
334 Teuchos::RCP<const LinearOpBase<Scalar> >
338 const std::string &label =
"" 346 template<
class Scalar>
347 Teuchos::RCP<const LinearOpBase<Scalar> >
351 const std::string &label =
"" 359 template<
class Scalar>
360 Teuchos::RCP<const LinearOpBase<Scalar> >
366 const std::string &label =
"" 374 template<
class Scalar>
375 Teuchos::RCP<LinearOpBase<Scalar> >
378 const std::string &label =
"" 386 template<
class Scalar>
387 Teuchos::RCP<LinearOpBase<Scalar> >
391 const std::string &label =
"" 399 template<
class Scalar>
400 Teuchos::RCP<LinearOpBase<Scalar> >
404 const std::string &label =
"" 412 template<
class Scalar>
413 Teuchos::RCP<LinearOpBase<Scalar> >
419 const std::string &label =
"" 426 #endif // THYRA_DEFAULT_BLOCKED_LINEAR_OP_DECL_HPP virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
Teuchos::RCP< const LinearOpBase< Scalar > > getBlock(const int i, const int j) const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Prints the details about the constituent linear operators.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
std::string description() const
Prints just the name DefaultBlockedLinearOp along with the overall dimensions and the number of const...
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > productRange() const
bool blockIsConst(const int i, const int j) const
virtual bool supportsScaleRightImpl() const
bool blockExists(const int i, const int j) const
bool opSupportedImpl(EOpTransp M_trans) const
Returns true only if all constituent operators support M_trans.
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
virtual bool supportsScaleLeftImpl() const
void setNonconstBlock(const int i, const int j, const Teuchos::RCP< LinearOpBase< Scalar > > &block)
Interface for a collection of column vectors called a multi-vector.
Teuchos::RCP< const VectorSpaceBase< Scalar > > range() const
bool blockFillIsActive() const
Base interface for physically blocked linear operators.
Abstract interface for finite-dimensional dense vectors.
Teuchos::RCP< const LinearOpBase< Scalar > > clone() const
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > productDomain() const
Base class for all linear operators.
Applies left or right sclaing to the linear operator.
bool acceptsBlock(const int i, const int j) const
virtual void scaleLeftImpl(const VectorBase< Scalar > &row_scaling)
virtual void scaleRightImpl(const VectorBase< Scalar > &col_scaling)
Interface for exxtracting row statistics as a VectorBase from a supporting LinearOpBase object...
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Teuchos::Ptr< VectorBase< Scalar > > &rowStatVec) const
Teuchos::RCP< const VectorSpaceBase< Scalar > > domain() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstBlock(const int i, const int j)
void setBlock(const int i, const int j, const Teuchos::RCP< const LinearOpBase< Scalar > > &block)
Concrete composite LinearOpBase subclass that creates single linear operator object out of a set of c...