10#ifndef THYRA_DEFAULT_BLOCKED_LINEAR_OP_DECL_HPP
11#define THYRA_DEFAULT_BLOCKED_LINEAR_OP_DECL_HPP
14#include "Thyra_PhysicallyBlockedLinearOpBase.hpp"
15#include "Thyra_ProductVectorSpaceBase.hpp"
16#include "Thyra_RowStatLinearOpBase.hpp"
17#include "Thyra_ScaledLinearOpBase.hpp"
18#include "Teuchos_ConstNonconstObjectContainer.hpp"
25template<
class Scalar>
class DefaultProductVectorSpace;
76 const int numRowBlocks,
const int numColBlocks
89 const int i,
const int j,
94 const int i,
const int j
122 getBlock(
const int i,
const int j)
const;
186 const RowStatLinearOpBaseUtils::ERowStat rowStat)
const;
190 const RowStatLinearOpBaseUtils::ERowStat rowStat,
225 template<
class Scalar2>
227 BlockEntry() : i(-1), j(-1) {}
228 BlockEntry(
const int i_in,
const int j_in,
const CNCLO &block_in )
229 :i(i_in),j(j_in),block(block_in)
246 std::vector<CNCLO> Ops_;
250 std::vector<BlockEntry<Scalar> > Ops_stack_;
251 bool blockFillIsActive_;
256 void resetStorage(
const int numRowBlocks,
const int numColBlocks );
257 void assertBlockFillIsActive(
bool)
const;
258 void assertBlockRowCol(
const int i,
const int j)
const;
262 template<
class LinearOpType>
264 const int i,
const int j,
267 void adjustBlockSpaces();
280template<
class Scalar>
288template<
class Scalar>
292 const std::string &label =
""
300template<
class Scalar>
305 const std::string &label =
""
313template<
class Scalar>
318 const std::string &label =
""
326template<
class Scalar>
333 const std::string &label =
""
341template<
class Scalar>
345 const std::string &label =
""
353template<
class Scalar>
358 const std::string &label =
""
366template<
class Scalar>
371 const std::string &label =
""
379template<
class Scalar>
386 const std::string &label =
""
Concrete composite LinearOpBase subclass that creates single linear operator object out of a set of c...
Teuchos::RCP< const VectorSpaceBase< Scalar > > domain() const
bool blockIsConst(const int i, const int j) const
virtual void scaleRightImpl(const VectorBase< Scalar > &col_scaling)
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
Teuchos::RCP< LinearOpBase< Scalar > > nonconstBlock2x2(const Teuchos::RCP< LinearOpBase< Scalar > > &A00, const Teuchos::RCP< LinearOpBase< Scalar > > &A01, const Teuchos::RCP< LinearOpBase< Scalar > > &A10, const Teuchos::RCP< LinearOpBase< Scalar > > &A11, const std::string &label="")
Form an implicit block 2x2 linear operator [ A00, A01; A10, A11 ].
bool acceptsBlock(const int i, const int j) const
Teuchos::RCP< const VectorSpaceBase< Scalar > > range() const
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
virtual bool supportsScaleRightImpl() const
virtual bool supportsScaleLeftImpl() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstBlock(const int i, const int j)
Teuchos::RCP< const LinearOpBase< Scalar > > getBlock(const int i, const int j) const
bool blockExists(const int i, const int j) const
Teuchos::RCP< const LinearOpBase< Scalar > > block2x1(const Teuchos::RCP< const LinearOpBase< Scalar > > &A00, const Teuchos::RCP< const LinearOpBase< Scalar > > &A10, const std::string &label="")
Form an implicit block 2x1 linear operator [ A00; A10 ].
virtual void scaleLeftImpl(const VectorBase< Scalar > &row_scaling)
void setNonconstBlock(const int i, const int j, const Teuchos::RCP< LinearOpBase< Scalar > > &block)
Teuchos::RCP< LinearOpBase< Scalar > > nonconstBlock1x2(const Teuchos::RCP< LinearOpBase< Scalar > > &A00, const Teuchos::RCP< LinearOpBase< Scalar > > &A01, const std::string &label="")
Form an implicit block 1x2 linear operator [ A00, A01 ].
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > productDomain() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Prints the details about the constituent linear operators.
RCP< DefaultBlockedLinearOp< Scalar > > defaultBlockedLinearOp()
Nonmember default constructor.
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > productRange() const
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Teuchos::Ptr< VectorBase< Scalar > > &rowStatVec) const
void setBlock(const int i, const int j, const Teuchos::RCP< const LinearOpBase< Scalar > > &block)
std::string description() const
Prints just the name DefaultBlockedLinearOp along with the overall dimensions and the number of const...
Teuchos::RCP< const LinearOpBase< Scalar > > block1x2(const Teuchos::RCP< const LinearOpBase< Scalar > > &A00, const Teuchos::RCP< const LinearOpBase< Scalar > > &A01, const std::string &label="")
Form an implicit block 1x2 linear operator [ A00, A01 ].
Teuchos::RCP< LinearOpBase< Scalar > > nonconstBlock2x1(const Teuchos::RCP< LinearOpBase< Scalar > > &A00, const Teuchos::RCP< LinearOpBase< Scalar > > &A10, const std::string &label="")
Form an implicit block 2x1 linear operator [ A00; A10 ].
Teuchos::RCP< const LinearOpBase< Scalar > > block2x2(const Teuchos::RCP< const LinearOpBase< Scalar > > &A00, const Teuchos::RCP< const LinearOpBase< Scalar > > &A01, const Teuchos::RCP< const LinearOpBase< Scalar > > &A10, const Teuchos::RCP< const LinearOpBase< Scalar > > &A11, const std::string &label="")
Form an implicit block 2x2 linear operator [ A00, A01; A10, A11 ].
bool blockFillIsActive() const
Teuchos::RCP< const LinearOpBase< Scalar > > clone() const
bool opSupportedImpl(EOpTransp M_trans) const
Returns true only if all constituent operators support M_trans.
Teuchos::RCP< const LinearOpBase< Scalar > > block1x1(const Teuchos::RCP< const LinearOpBase< Scalar > > &A00, const std::string &label="")
Form an implicit block 1x1 linear operator [ A00 ].
Teuchos::RCP< LinearOpBase< Scalar > > nonconstBlock1x1(const Teuchos::RCP< LinearOpBase< Scalar > > &A00, const std::string &label="")
Form an implicit block 1x1 linear operator [ A00 ].
Base class for all linear operators.
Interface for a collection of column vectors called a multi-vector.
Base interface for physically blocked linear operators.
Interface for exxtracting row statistics as a VectorBase from a supporting LinearOpBase object.
Applies left or right sclaing to the linear operator.
Abstract interface for finite-dimensional dense vectors.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.