10 #ifndef THYRA_TPETRA_EUCLIDEAN_SCALAR_PROD_DEF_HPP
11 #define THYRA_TPETRA_EUCLIDEAN_SCALAR_PROD_DEF_HPP
21 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
23 const MultiVectorBase<Scalar>& X,
24 const MultiVectorBase<Scalar>& Y,
28 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> TMV;
39 X_tpetra->dot(*Y_tpetra, scalarProds_out);
41 EuclideanScalarProd<Scalar>::scalarProdsImpl(X, Y, scalarProds_out);
46 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
51 using Teuchos::rcp_dynamic_cast;
57 return tmv->getConstTpetraMultiVector();
62 return tv->getConstTpetraVector();
72 #endif // THYRA_EUCLIDEAN_SCALAR_PROD_DEF_HPP
Concrete implementation of Thyra::MultiVector in terms of Tpetra::MultiVector.
Concrete Thyra::SpmdVectorBase using Tpetra::Vector.
bool nonnull(const boost::shared_ptr< T > &p)
virtual void scalarProdsImpl(const MultiVectorBase< Scalar > &X, const MultiVectorBase< Scalar > &Y, const ArrayView< Scalar > &scalarProds) const
If X and Y are both Tpetra wrappers, computes the pair-wise scalar products directly with Tpetra call...
Teuchos::RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getConstTpetraMultiVector(const RCP< const MultiVectorBase< Scalar > > &mv) const