42#ifndef THYRA_DEFAULT_SPMD_VECTOR_SPACE_DEF_HPP
43#define THYRA_DEFAULT_SPMD_VECTOR_SPACE_DEF_HPP
45#include "Thyra_DefaultSpmdVectorSpace_decl.hpp"
46#include "Thyra_SpmdVectorSpaceDefaultBase.hpp"
47#include "Thyra_VectorSpaceFactoryBase.hpp"
48#include "Thyra_DefaultSpmdMultiVector.hpp"
49#include "Thyra_DefaultSpmdVector.hpp"
50#include "Teuchos_CommHelpers.hpp"
71 this->
initialize(Teuchos::null, dim_in, dim_in);
78 const Ordinal localSubDim_in,
const Ordinal globalDim,
79 const bool isLocallyReplicated_in
86 localSubDim_ = localSubDim_in;
87 if (! comm.is_null ()) {
88 numProc_ = comm->getSize ();
89 procRank_ = comm->getRank ();
95 this->
updateState(globalDim, isLocallyReplicated_in);
102 comm_ = Teuchos::null;
110template<
class Scalar>
116 values = Teuchos::arcp<Scalar>(localSubDim_);
119 weakSelfPtr_.create_strong(),
127template<
class Scalar>
133 weakSelfPtr_.create_strong(),
135 this->smallVecSpcFcty()->createVecSpc(numMembers),
true
142template<
class Scalar>
153 weakSelfPtr_.create_strong(),
154 Teuchos::arcp(raw_v.
values().get(),0,raw_v.
subDim(),
false),
161template<
class Scalar>
172 weakSelfPtr_.create_strong(),
173 Teuchos::arcp(
const_cast<Scalar*
>(raw_v.
values().get()),0,raw_v.
subDim(),
false),
180template<
class Scalar>
191 weakSelfPtr_.create_strong(),
193 this->smallVecSpcFcty()->createVecSpc(raw_mv.
numSubCols()),
true),
201template<
class Scalar>
212 weakSelfPtr_.create_strong(),
214 this->smallVecSpcFcty()->createVecSpc(raw_mv.
numSubCols()),
true),
216 const_cast<Scalar*
>(raw_mv.
values().get()),
224template<
class Scalar>
229 const Range1D rng = full_range(rng_in,0,this->
dim()-1);
231 return ( l_localOffset<=rng.
lbound() && rng.
ubound()<l_localOffset+localSubDim_ );
235template<
class Scalar>
247template<
class Scalar>
255template<
class Scalar>
265template<
class Scalar>
266DefaultSpmdVectorSpace<Scalar>::DefaultSpmdVectorSpace()
267 :localSubDim_(-1), numProc_(-1), procRank_(-1)
const ArrayRCP< const Scalar > values() const
Ordinal leadingDim() const
Ordinal numSubCols() const
const ArrayRCP< const Scalar > values() const
const ArrayRCP< Scalar > values() const
const ArrayRCP< Scalar > values() const
RCP< T > create_weak() const
Efficient concrete implementation subclass for SPMD multi-vectors.
RCP< const Teuchos::Comm< Ordinal > > getComm() 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.
RCP< DefaultSpmdVectorSpace< Scalar > > defaultSpmdVectorSpace()
Nonmember consturctor that creats an uninitialized vector space.
RCP< MultiVectorBase< Scalar > > createMembers(int numMembers) const
Ordinal localSubDim() const
static RCP< DefaultSpmdVectorSpace< Scalar > > create()
Create with weak ownership to self.
RCP< const VectorSpaceBase< Scalar > > clone() const
RCP< MultiVectorBase< Scalar > > createMembersView(const RTOpPack::SubMultiVectorView< Scalar > &raw_mv) const
void initialize(const Ordinal dim)
Initialize a serial space.
RCP< VectorBase< Scalar > > createMemberView(const RTOpPack::SubVectorView< Scalar > &raw_v) const
RCP< VectorBase< Scalar > > createMember() const
void uninitialize()
Set to an uninitialized state.
Efficient concrete implementation subclass for SPMD vectors.
virtual void updateState(const Ordinal globalDim, const bool isLocallyReplicated=false)
This function must be called whenever the state of this changes and some internal state must be updat...
Ordinal localOffset() const
bool isLocallyReplicated() const
Returns true if vector space is locally replicated space.
Ordinal dim() const
Returns the sum of the local number of elements on every process.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
EStrideType
Determine if data is unit stride or non-unit stride.
EViewType
Determines if a view is a direct view of data or a detached copy of data.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)