42 #ifndef THYRA_MULTI_VECTOR_BASE_DECL_HPP 43 #define THYRA_MULTI_VECTOR_BASE_DECL_HPP 45 #include "Thyra_LinearOpBase_decl.hpp" 46 #include "Thyra_RowStatLinearOpBase.hpp" 47 #include "Thyra_ScaledLinearOpBase.hpp" 48 #include "RTOpPack_RTOpT.hpp" 492 template<
class Scalar>
499 #ifdef THYRA_INJECT_USING_DECLARATIONS 544 RCP<const MultiVectorBase<Scalar> >
554 RCP<MultiVectorBase<Scalar> >
562 RCP<const MultiVectorBase<Scalar> >
563 subView(
const ArrayView<const int> &cols )
const 570 RCP<MultiVectorBase<Scalar> >
587 const ArrayView<
const Ptr<RTOpPack::ReductTarget> > &reduct_objs,
588 const Ordinal primary_global_offset
592 reduct_objs, primary_global_offset);
604 const Ptr<RTOpPack::ReductTarget> &reduct_obj,
605 const Ordinal primary_global_offset
609 reduct_obj, primary_global_offset);
670 virtual RCP<MultiVectorBase<Scalar> >
clone_mv()
const = 0;
678 RCP<const LinearOpBase<Scalar> >
clone()
const;
761 virtual RCP<const MultiVectorBase<Scalar> >
788 virtual RCP<MultiVectorBase<Scalar> >
815 virtual RCP<const MultiVectorBase<Scalar> >
842 virtual RCP<MultiVectorBase<Scalar> >
870 const ArrayView<
const Ptr<RTOpPack::ReductTarget> > &reduct_objs,
871 const Ordinal primary_global_offset
899 const Ptr<RTOpPack::ReductTarget> &reduct_obj,
900 const Ordinal primary_global_offset
1112 const RowStatLinearOpBaseUtils::ERowStat rowStat)
const;
1116 const RowStatLinearOpBaseUtils::ERowStat rowStat,
1167 template<
class Scalar>
1173 const ArrayView<
const Ptr<RTOpPack::ReductTarget> > &reduct_objs,
1174 const Ordinal primary_global_offset = 0
1177 if(multi_vecs.size())
1178 multi_vecs[0]->applyOp(primary_op, multi_vecs, targ_multi_vecs,
1179 reduct_objs, primary_global_offset);
1180 else if(targ_multi_vecs.size())
1181 targ_multi_vecs[0]->applyOp(primary_op, multi_vecs, targ_multi_vecs,
1182 reduct_objs, primary_global_offset);
1193 template<
class Scalar>
1200 const Ptr<RTOpPack::ReductTarget> &reduct_obj,
1201 const Ordinal primary_global_offset = 0
1204 if(multi_vecs.size())
1205 multi_vecs[0]->applyOp(primary_op, secondary_op, multi_vecs, targ_multi_vecs,
1206 reduct_obj, primary_global_offset);
1207 else if(targ_multi_vecs.size())
1208 targ_multi_vecs[0]->applyOp(primary_op, secondary_op, multi_vecs, targ_multi_vecs,
1209 reduct_obj, primary_global_offset);
1216 #endif // THYRA_MULTI_VECTOR_BASE_DECL_HPP void absColSum(const Teuchos::Ptr< Thyra::VectorBase< Scalar > > &output) const
RCP< MultiVectorBase< Scalar > > subView(const ArrayView< const int > &cols)
nonconstNonContigSubViewImpl().
void absRowSum(const Teuchos::Ptr< Thyra::VectorBase< Scalar > > &output) const
void commitDetachedView(RTOpPack::SubMultiVectorView< Scalar > *sub_mv)
Calls commitNonconstDetachedMultiVectorViewImpl().
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Ptr< VectorBase< Scalar > > &rowStatVec) const
virtual RCP< const MultiVectorBase< Scalar > > contigSubViewImpl(const Range1D &colRng) const =0
Return a non-changeable sub-view of a contiguous set of columns of the this multi-vector.
virtual RCP< MultiVectorBase< Scalar > > nonconstContigSubViewImpl(const Range1D &colRng)=0
Return a changeable sub-view of a contiguous set of columns of the this multi-vector.
void acquireDetachedView(const Range1D &rowRng, const Range1D &colRng, RTOpPack::SubMultiVectorView< Scalar > *sub_mv)
Calls acquireNonconstDetachedMultiVectorViewImpl().
virtual void scaleLeftImpl(const VectorBase< Scalar > &row_scaling)
virtual void assignImpl(Scalar alpha)=0
Virtual implementation for NVI assign().
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
virtual bool supportsScaleRightImpl() const
RCP< const MultiVectorBase< Scalar > > subView(const Range1D &colRng) const
Calls contigSubViewImpl().
void acquireDetachedView(const Range1D &rowRng, const Range1D &colRng, RTOpPack::ConstSubMultiVectorView< Scalar > *sub_mv) const
Calls acquireDetachedMultiVectorViewImpl().
virtual void releaseDetachedMultiVectorViewImpl(RTOpPack::ConstSubMultiVectorView< Scalar > *sub_mv) const =0
Free a non-changeable explicit view of a sub-multi-vector.
virtual RCP< VectorBase< Scalar > > nonconstColImpl(Ordinal j)=0
Return a changeable view of a constituent column vector.
Teuchos::Ordinal Ordinal
Type for the dimension of a vector space. `*.
Interface for a collection of column vectors called a multi-vector.
RCP< const VectorBase< Scalar > > col(Ordinal j) const
Calls colImpl().
RCP< VectorBase< Scalar > > col(Ordinal j)
Calls nonconstColImpl().
Abstract interface for finite-dimensional dense vectors.
virtual bool supportsScaleLeftImpl() const
Base class for all linear operators.
void applyOp(const RTOpPack::RTOpT< Scalar > &primary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const ArrayView< const Ptr< RTOpPack::ReductTarget > > &reduct_objs, const Ordinal primary_global_offset) const
Calls mvMultiReductApplyOpImpl().
Applies left or right sclaing to the linear operator.
void assign(Scalar alpha)
V = alpha.
void applyOp(const RTOpPack::RTOpT< Scalar > &primary_op, const RTOpPack::RTOpT< Scalar > &secondary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const Ptr< RTOpPack::ReductTarget > &reduct_obj, const Ordinal primary_global_offset=0)
Apply a reduction/transformation operator column by column and reduce the intermediate reduction obje...
void applyOp(const RTOpPack::RTOpT< Scalar > &primary_op, const RTOpPack::RTOpT< Scalar > &secondary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const Ptr< RTOpPack::ReductTarget > &reduct_obj, const Ordinal primary_global_offset) const
mvSingleReductApplyOpImpl().
virtual void acquireNonconstDetachedMultiVectorViewImpl(const Range1D &rowRng, const Range1D &colRng, RTOpPack::SubMultiVectorView< Scalar > *sub_mv)=0
Get a changeable explicit view of a sub-multi-vector.
virtual RCP< const MultiVectorBase< Scalar > > nonContigSubViewImpl(const ArrayView< const int > &cols) const =0
Return a non-changeable sub-view of a non-contiguous set of columns of this multi-vector.
virtual RCP< MultiVectorBase< Scalar > > nonconstNonContigSubViewImpl(const ArrayView< const int > &cols)=0
Return a changeable sub-view of a non-contiguous set of columns of this multi-vector.
Interface for exxtracting row statistics as a VectorBase from a supporting LinearOpBase object...
virtual void mvSingleReductApplyOpImpl(const RTOpPack::RTOpT< Scalar > &primary_op, const RTOpPack::RTOpT< Scalar > &secondary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const Ptr< RTOpPack::ReductTarget > &reduct_obj, const Ordinal primary_global_offset) const =0
Apply a reduction/transformation operator column by column and reduce the intermediate reduction obje...
virtual void scaleRightImpl(const VectorBase< Scalar > &col_scaling)
virtual void acquireDetachedMultiVectorViewImpl(const Range1D &rowRng, const Range1D &colRng, RTOpPack::ConstSubMultiVectorView< Scalar > *sub_mv) const =0
Get a non-changeable explicit view of a sub-multi-vector.
virtual RCP< const VectorBase< Scalar > > colImpl(Ordinal j) const
Return a non-changeable view of a constituent column vector.
virtual void commitNonconstDetachedMultiVectorViewImpl(RTOpPack::SubMultiVectorView< Scalar > *sub_mv)=0
Commit changes for a changeable explicit view of a sub-multi-vector.
virtual RCP< MultiVectorBase< Scalar > > clone_mv() const =0
Clone the multi-vector object (if supported).
virtual void mvMultiReductApplyOpImpl(const RTOpPack::RTOpT< Scalar > &primary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const ArrayView< const Ptr< RTOpPack::ReductTarget > > &reduct_objs, const Ordinal primary_global_offset) const =0
Apply a reduction/transformation operator column by column and return an array of the reduction objec...
RCP< const LinearOpBase< Scalar > > clone() const
This function is simply overridden to return this->clone_mv().
void releaseDetachedView(RTOpPack::ConstSubMultiVectorView< Scalar > *sub_mv) const
Calls releaseDetachedMultiVectorViewImpl().
RCP< MultiVectorBase< Scalar > > subView(const Range1D &colRng)
Calls nonconstContigSubViewImpl().
void applyOp(const RTOpPack::RTOpT< Scalar > &primary_op, const ArrayView< const Ptr< const MultiVectorBase< Scalar > > > &multi_vecs, const ArrayView< const Ptr< MultiVectorBase< Scalar > > > &targ_multi_vecs, const ArrayView< const Ptr< RTOpPack::ReductTarget > > &reduct_objs, const Ordinal primary_global_offset=0)
Apply a reduction/transformation operator column by column and return an array of the reduction objec...
RCP< const MultiVectorBase< Scalar > > subView(const ArrayView< const int > &cols) const
nonContigSubViewImpl().