10#ifndef THYRA_DEFAULT_SPMD_VECTOR_SPACE_DEF_HPP
11#define THYRA_DEFAULT_SPMD_VECTOR_SPACE_DEF_HPP
13#include "Thyra_DefaultSpmdVectorSpace_decl.hpp"
14#include "Thyra_SpmdVectorSpaceDefaultBase.hpp"
15#include "Thyra_VectorSpaceFactoryBase.hpp"
16#include "Thyra_DefaultSpmdMultiVector.hpp"
17#include "Thyra_DefaultSpmdVector.hpp"
18#include "Teuchos_CommHelpers.hpp"
39 this->
initialize(Teuchos::null, dim_in, dim_in);
46 const Ordinal localSubDim_in,
const Ordinal globalDim,
47 const bool isLocallyReplicated_in
54 localSubDim_ = localSubDim_in;
55 if (! comm.is_null ()) {
56 numProc_ = comm->getSize ();
57 procRank_ = comm->getRank ();
63 this->
updateState(globalDim, isLocallyReplicated_in);
70 comm_ = Teuchos::null;
84 values = Teuchos::arcp<Scalar>(localSubDim_);
87 weakSelfPtr_.create_strong(),
101 weakSelfPtr_.create_strong(),
103 this->smallVecSpcFcty()->createVecSpc(numMembers),
true
110template<
class Scalar>
121 weakSelfPtr_.create_strong(),
122 Teuchos::arcp(raw_v.
values().get(),0,raw_v.
subDim(),
false),
129template<
class Scalar>
140 weakSelfPtr_.create_strong(),
141 Teuchos::arcp(
const_cast<Scalar*
>(raw_v.
values().get()),0,raw_v.
subDim(),
false),
148template<
class Scalar>
159 weakSelfPtr_.create_strong(),
161 this->smallVecSpcFcty()->createVecSpc(raw_mv.
numSubCols()),
true),
169template<
class Scalar>
180 weakSelfPtr_.create_strong(),
182 this->smallVecSpcFcty()->createVecSpc(raw_mv.
numSubCols()),
true),
184 const_cast<Scalar*
>(raw_mv.
values().get()),
192template<
class Scalar>
197 const Range1D rng = full_range(rng_in,0,this->
dim()-1);
199 return ( l_localOffset<=rng.
lbound() && rng.
ubound()<l_localOffset+localSubDim_ );
203template<
class Scalar>
215template<
class Scalar>
223template<
class Scalar>
233template<
class Scalar>
234DefaultSpmdVectorSpace<Scalar>::DefaultSpmdVectorSpace()
235 :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)