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" 52 #include "RTOpPack_TOpAbs.hpp" 53 #include "RTOpPack_ROpNorm1.hpp" 61 template<
class Scalar>
62 RCP<const VectorBase<Scalar> >
72 template<
class Scalar>
73 RCP<const LinearOpBase<Scalar> >
76 return this->clone_mv();
81 template<
class Scalar>
86 case RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM:
87 case RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM:
88 case RowStatLinearOpBaseUtils::ROW_STAT_INV_COL_SUM:
89 case RowStatLinearOpBaseUtils::ROW_STAT_COL_SUM:
93 TEUCHOS_TEST_FOR_EXCEPT(
true);
99 template<
class Scalar>
105 case RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM:
106 absRowSum(rowStatVec);
107 ::Thyra::reciprocal<Scalar>(*rowStatVec,rowStatVec.ptr());
109 case RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM:
111 absRowSum(rowStatVec);
113 case RowStatLinearOpBaseUtils::ROW_STAT_INV_COL_SUM:
114 absColSum(rowStatVec);
115 ::Thyra::reciprocal<Scalar>(*rowStatVec,rowStatVec.ptr());
117 case RowStatLinearOpBaseUtils::ROW_STAT_COL_SUM:
119 absColSum(rowStatVec);
122 TEUCHOS_TEST_FOR_EXCEPT(
true);
128 template<
class Scalar>
135 template<
class Scalar>
142 template<
class Scalar>
147 for(
Ordinal i=0;i<this->domain()->dim();i++)
148 ::Thyra::ele_wise_scale<Scalar>(row_scaling,this->col(i).ptr());
151 template<
class Scalar>
161 Teuchos::ArrayRCP<const Scalar> col_scaling_vec = view.
values();
164 TEUCHOS_ASSERT(this->domain()->dim()==col_scaling_vec.size());
166 for(
Ordinal i=0;i<this->domain()->dim();i++)
167 ::Thyra::scale<Scalar>(col_scaling_vec[i],this->col(i).ptr());
172 template<
class Scalar>
177 using Teuchos::ptrFromRef;
178 using Teuchos::tuple;
181 RTOpPack::TOpAbs<Scalar> abs_op;
182 RCP<MultiVectorBase<Scalar> > abs_mv = createMembers(this->range(),this->domain());
183 ::Thyra::applyOp<Scalar>( abs_op, tuple(ptrFromRef(*
this)), tuple(abs_mv.ptr()), Teuchos::null );
186 RCP<VectorBase<Scalar> > ones = Thyra::createMember(this->domain());
187 ::Thyra::put_scalar<Scalar>(Teuchos::ScalarTraits<Scalar>::one(),ones.ptr());
191 template<
class Scalar>
195 using Teuchos::tuple;
196 using Teuchos::ptrInArg;
198 using Teuchos::Array;
199 using Teuchos::ArrayView;
206 ArrayView<Scalar> norms = view.
values()();
207 RTOpPack::ROpNorm1<Scalar> op;
209 const int m = this->domain()->dim();
210 Array<RCP<RTOpPack::ReductTarget> > rcp_op_targs(m);
211 Array<Ptr<RTOpPack::ReductTarget> > op_targs(m);
212 for(
int kc = 0; kc < m; ++kc ) {
213 rcp_op_targs[kc] = op.reduct_obj_create();
214 op_targs[kc] = rcp_op_targs[kc].ptr();
216 ::Thyra::applyOp<Scalar>(op, tuple(ptrInArg(*
this)),
217 ArrayView<Ptr<MultiVectorBase<Scalar> > >(null),
219 for(
int kc = 0; kc < m; ++kc ) {
220 norms[kc] = op(*op_targs[kc]);
223 output->commitDetachedView(&view);
230 #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.
const ArrayRCP< Scalar > values() const
RCP< const LinearOpBase< Scalar > > clone() const
This function is simply overridden to return this->clone_mv().