42 #ifndef THYRA_MULTI_VECTOR_BASE_HPP 43 #define THYRA_MULTI_VECTOR_BASE_HPP 45 #include "Thyra_MultiVectorBase_decl.hpp" 46 #include "Thyra_LinearOpBase.hpp" 47 #include "Thyra_VectorSpaceBase.hpp" 49 #include "Thyra_VectorBase.hpp" 50 #include "Thyra_VectorStdOps_decl.hpp" 58 template<
class Scalar>
59 RCP<const VectorBase<Scalar> >
69 template<
class Scalar>
70 RCP<const LinearOpBase<Scalar> >
73 return this->clone_mv();
78 template<
class Scalar>
83 case RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM:
84 case RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM:
85 case RowStatLinearOpBaseUtils::ROW_STAT_INV_COL_SUM:
86 case RowStatLinearOpBaseUtils::ROW_STAT_COL_SUM:
89 TEUCHOS_TEST_FOR_EXCEPT(
true);
92 TEUCHOS_UNREACHABLE_RETURN(
false);
95 template<
class Scalar>
101 case RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM:
102 absRowSum(rowStatVec);
103 ::Thyra::reciprocal<Scalar>(*rowStatVec,rowStatVec.ptr());
105 case RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM:
107 absRowSum(rowStatVec);
109 case RowStatLinearOpBaseUtils::ROW_STAT_INV_COL_SUM:
110 absColSum(rowStatVec);
111 ::Thyra::reciprocal<Scalar>(*rowStatVec,rowStatVec.ptr());
113 case RowStatLinearOpBaseUtils::ROW_STAT_COL_SUM:
115 absColSum(rowStatVec);
118 TEUCHOS_TEST_FOR_EXCEPT(
true);
124 template<
class Scalar>
131 template<
class Scalar>
138 template<
class Scalar>
143 for(
Ordinal i=0;i<this->domain()->dim();i++)
144 ::Thyra::ele_wise_scale<Scalar>(row_scaling,this->col(i).ptr());
147 template<
class Scalar>
154 RTOpPack::SubVectorView<Scalar> view;
157 Teuchos::ArrayRCP<const Scalar> col_scaling_vec = view.values();
160 TEUCHOS_ASSERT(this->domain()->dim()==col_scaling_vec.size());
162 for(
Ordinal i=0;i<this->domain()->dim();i++)
163 ::Thyra::scale<Scalar>(col_scaling_vec[i],this->col(i).ptr());
168 template<
class Scalar>
173 using Teuchos::ptrFromRef;
174 using Teuchos::tuple;
177 RCP<MultiVectorBase<Scalar> > abs_mv = createMembers(this->range(),this->domain());
178 for (
Ordinal i = 0; i < abs_mv->domain()->dim(); ++i)
179 abs_mv->col(i)->abs(*this->col(i));
182 RCP<VectorBase<Scalar> > ones = Thyra::createMember(this->domain());
183 ::Thyra::put_scalar<Scalar>(Teuchos::ScalarTraits<Scalar>::one(),ones.ptr());
187 template<
class Scalar>
191 using Teuchos::tuple;
192 using Teuchos::ptrInArg;
194 using Teuchos::Array;
195 using Teuchos::ArrayView;
197 RTOpPack::SubVectorView<Scalar> view;
199 Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> norms(view.values().size());
200 this->norms_1(norms());
201 for (
Ordinal i = 0; i < norms.size(); ++i)
202 view[i] = Teuchos::as<Scalar>(norms[i]);
203 output->commitDetachedView(&view);
210 #endif // THYRA_MULTI_VECTOR_BASE_HPP void absColSum(const Teuchos::Ptr< Thyra::VectorBase< Scalar > > &output) const
void acquireDetachedView(const Range1D &rng, RTOpPack::ConstSubVectorView< Scalar > *sub_vec) const
Calls acquireDetachedVectorViewImpl().
void absRowSum(const Teuchos::Ptr< Thyra::VectorBase< Scalar > > &output) const
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Ptr< VectorBase< Scalar > > &rowStatVec) const
Use the non-transposed operator.
virtual void scaleLeftImpl(const VectorBase< Scalar > &row_scaling)
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
virtual bool supportsScaleRightImpl() const
Teuchos::Ordinal Ordinal
Type for the dimension of a vector space. `*.
Interface for a collection of column vectors called a multi-vector.
Abstract interface for finite-dimensional dense vectors.
virtual bool supportsScaleLeftImpl() const
virtual void scaleRightImpl(const VectorBase< Scalar > &col_scaling)
virtual RCP< const VectorBase< Scalar > > colImpl(Ordinal j) const
Return a non-changeable view of a constituent column vector.
RCP< const LinearOpBase< Scalar > > clone() const
This function is simply overridden to return this->clone_mv().