43 #ifndef THYRA_TPETRA_VECTOR_SPACE_HPP 44 #define THYRA_TPETRA_VECTOR_SPACE_HPP 56 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
57 RCP<TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> >
60 const RCP<this_t> vs(
new this_t);
61 vs->weakSelfPtr_ = vs.create_weak();
66 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
68 const RCP<
const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > &tpetraMap
72 tpetraMap_ = tpetraMap;
73 this->updateState(tpetraMap->getGlobalNumElements(),
74 !tpetraMap->isDistributed());
81 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
82 RCP<VectorBase<Scalar> >
85 return tpetraVector<Scalar>(
86 weakSelfPtr_.create_strong().getConst(),
88 new Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node>(tpetraMap_,
false)
94 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
95 RCP< MultiVectorBase<Scalar> >
98 return tpetraMultiVector<Scalar>(
99 weakSelfPtr_.create_strong().getConst(),
100 tpetraVectorSpace<Scalar>(
101 Tpetra::createLocalMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(
102 numMembers, tpetraMap_->getComm(), tpetraMap_->getNode()
106 new Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>(
107 tpetraMap_, numMembers,
false)
115 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
117 const Range1D& rng_in,
const EViewType viewType,
const EStrideType strideType
120 const Range1D rng = full_range(rng_in,0,this->dim()-1);
121 const Ordinal l_localOffset = this->localOffset();
123 const Ordinal myLocalSubDim = tpetraMap_.is_null () ?
124 static_cast<Ordinal> (0) : tpetraMap_->getNodeNumElements ();
126 return ( l_localOffset<=rng.lbound() && rng.ubound()<l_localOffset+myLocalSubDim );
130 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
131 RCP< const VectorSpaceBase<Scalar> >
134 return tpetraVectorSpace<Scalar>(tpetraMap_);
139 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
141 const MultiVectorBase<Scalar> &X,
const MultiVectorBase<Scalar> &Y,
142 const ArrayView<Scalar> &scalarProds_out)
const 145 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> TpetraMV;
146 RCP<const TpetraMV> tX = TOVE::getConstTpetraMultiVector(Teuchos::rcpFromRef(X)),
147 tY = TOVE::getConstTpetraMultiVector(Teuchos::rcpFromRef(Y));
148 tX->dot(*tY, scalarProds_out);
154 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
155 RCP<const Teuchos::Comm<Ordinal> >
162 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
165 return tpetraMap_.is_null () ?
static_cast<Ordinal> (0) :
166 static_cast<Ordinal> (tpetraMap_->getNodeNumElements ());
172 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
183 #endif // THYRA_TPETRA_VECTOR_SPACE_HPP RCP< VectorBase< Scalar > > createMember() const
RCP< const VectorSpaceBase< Scalar > > clone() const
Concrete implementation of an SPMD vector space for Tpetra.
RCP< const Teuchos::Comm< Ordinal > > getComm() const
static RCP< TpetraVectorSpace< Scalar, LocalOrdinal, GlobalOrdinal, Node > > create()
Create with weak ownership to self.
void initialize(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &tpetraMap)
Initialize a serial space.
RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const
Ordinal localSubDim() const
bool hasInCoreView(const Range1D &rng, const EViewType viewType, const EStrideType strideType) const
Returns true if all the elements in rng are in this process.
void scalarProdsImpl(const MultiVectorBase< Scalar > &X, const MultiVectorBase< Scalar > &Y, const ArrayView< Scalar > &scalarProds_out) const
RCP< const Teuchos::Comm< Ordinal > > convertTpetraToThyraComm(const RCP< const Teuchos::Comm< int > > &tpetraComm)
Given an Tpetra Teuchos::Comm<int> object, return an equivalent Teuchos::Comm<Ordinal> object...