42 #ifndef THYRA_MULTI_VECTOR_STD_OPS_DECL_HPP 43 #define THYRA_MULTI_VECTOR_STD_OPS_DECL_HPP 45 #include "Thyra_MultiVectorBase.hpp" 46 #include "RTOpPack_ROpNorm1.hpp" 47 #include "RTOpPack_ROpNorm2.hpp" 48 #include "RTOpPack_ROpNormInf.hpp" 63 template<
class Scalar>
64 void norms(
const MultiVectorBase<Scalar>& V,
65 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &norms );
81 template<
class Scalar,
class NormOp>
82 void reductions(
const MultiVectorBase<Scalar>& V,
const NormOp &op,
83 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &norms );
99 template<
class Scalar>
100 void norms_1(
const MultiVectorBase<Scalar>& V,
101 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &norms );
117 template<
class Scalar>
118 void norms_2(
const MultiVectorBase<Scalar>& V,
119 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &norms );
135 template<
class Scalar>
136 void norms_inf(
const MultiVectorBase<Scalar>& V,
137 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &norms );
144 template<
class Scalar>
145 Array<typename ScalarTraits<Scalar>::magnitudeType>
146 norms_inf(
const MultiVectorBase<Scalar>& V );
161 template<
class Scalar>
162 void dots(
const MultiVectorBase<Scalar>& V1,
const MultiVectorBase<Scalar>& V2,
163 const ArrayView<Scalar> &dots );
176 template<
class Scalar>
177 void sums(
const MultiVectorBase<Scalar>& V,
const ArrayView<Scalar> &sums );
184 template<
class Scalar>
185 typename ScalarTraits<Scalar>::magnitudeType
186 norm_1(
const MultiVectorBase<Scalar>& V );
196 template<
class Scalar>
197 void scale( Scalar alpha,
const Ptr<MultiVectorBase<Scalar> > &V );
204 template<
class Scalar>
205 void scaleUpdate(
const VectorBase<Scalar>& a,
const MultiVectorBase<Scalar>& U,
206 const Ptr<MultiVectorBase<Scalar> > &V );
212 template<
class Scalar>
213 void assign(
const Ptr<MultiVectorBase<Scalar> > &V, Scalar alpha );
219 template<
class Scalar>
220 void assign(
const Ptr<MultiVectorBase<Scalar> > &V,
221 const MultiVectorBase<Scalar>& U );
228 template<
class Scalar>
229 void update( Scalar alpha,
const MultiVectorBase<Scalar>& U,
230 const Ptr<MultiVectorBase<Scalar> > &V );
238 template<
class Scalar>
240 const ArrayView<const Scalar> &alpha,
242 const MultiVectorBase<Scalar>& U,
243 const Ptr<MultiVectorBase<Scalar> > &V
252 template<
class Scalar>
254 const MultiVectorBase<Scalar>& U,
255 const ArrayView<const Scalar> &alpha,
257 const Ptr<MultiVectorBase<Scalar> > &V
287 template<
class Scalar>
288 void linear_combination(
289 const ArrayView<const Scalar> &alpha,
290 const ArrayView<
const Ptr<
const MultiVectorBase<Scalar> > > &X,
292 const Ptr<MultiVectorBase<Scalar> > &Y
306 template<
class Scalar>
307 void randomize( Scalar l, Scalar u,
const Ptr<MultiVectorBase<Scalar> > &V );
315 template<
class Scalar>
316 void Vt_S(
const Ptr<MultiVectorBase<Scalar> > &Z,
const Scalar& alpha );
324 template<
class Scalar>
325 void Vp_S(
const Ptr<MultiVectorBase<Scalar> > &Z,
const Scalar& alpha );
333 template<
class Scalar>
334 void Vp_V(
const Ptr<MultiVectorBase<Scalar> > &Z,
335 const MultiVectorBase<Scalar>& X );
343 template<
class Scalar>
344 void V_VpV(
const Ptr<MultiVectorBase<Scalar> > &Z,
345 const MultiVectorBase<Scalar>& X,
const MultiVectorBase<Scalar>& Y );
353 template<
class Scalar>
354 void V_VmV(
const Ptr<MultiVectorBase<Scalar> > &Z,
355 const MultiVectorBase<Scalar>& X,
const MultiVectorBase<Scalar>& Y );
363 template<
class Scalar>
364 void V_StVpV(
const Ptr<MultiVectorBase<Scalar> > &Z,
const Scalar &alpha,
365 const MultiVectorBase<Scalar>& X,
const MultiVectorBase<Scalar>& Y );
375 template<
class Scalar>
377 void Thyra::norms_1(
const MultiVectorBase<Scalar>& V,
378 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &
norms )
380 reductions<Scalar>(V, RTOpPack::ROpNorm1<Scalar>(),
norms);
384 template<
class Scalar>
386 void Thyra::norms_2(
const MultiVectorBase<Scalar>& V,
387 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &
norms )
393 template<
class Scalar>
395 void Thyra::norms_inf(
const MultiVectorBase<Scalar>& V,
396 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &
norms )
398 reductions<Scalar>(V, RTOpPack::ROpNormInf<Scalar>(),
norms);
402 template<
class Scalar>
403 Teuchos::Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType>
404 Thyra::norms_inf(
const MultiVectorBase<Scalar>& V )
406 typedef typename ScalarTraits<Scalar>::magnitudeType ScalarMag;
407 Array<ScalarMag>
norms(V.domain()->dim());
408 Thyra::norms_inf<Scalar>(V,
norms());
417 template<
class Scalar,
class NormOp>
418 void Thyra::reductions(
const MultiVectorBase<Scalar>& V,
const NormOp &op,
419 const ArrayView<
typename ScalarTraits<Scalar>::magnitudeType> &
norms )
421 using Teuchos::tuple;
using Teuchos::ptrInArg;
using Teuchos::null;
422 const int m = V.domain()->dim();
423 Array<RCP<RTOpPack::ReductTarget> > rcp_op_targs(m);
424 Array<Ptr<RTOpPack::ReductTarget> > op_targs(m);
425 for(
int kc = 0; kc < m; ++kc ) {
426 rcp_op_targs[kc] = op.reduct_obj_create();
427 op_targs[kc] = rcp_op_targs[kc].ptr();
429 applyOp<Scalar>(op, tuple(ptrInArg(V)),
430 ArrayView<Ptr<MultiVectorBase<Scalar> > >(null),
432 for(
int kc = 0; kc < m; ++kc ) {
433 norms[kc] = op(*op_targs[kc]);
438 #endif // THYRA_MULTI_VECTOR_STD_OPS_DECL_HPP
void norms(const MultiVectorBase< Scalar > &V, const ArrayView< typename ScalarTraits< Scalar >::magnitudeType > &norms)
Column-wise multi-vector natural norm.