42#ifndef THYRA_SPMD_LOCAL_DATA_ACCESS_DEF_HPP
43#define THYRA_SPMD_LOCAL_DATA_ACCESS_DEF_HPP
46#include "Thyra_SpmdLocalDataAccess_decl.hpp"
47#include "Thyra_ProductVectorBase.hpp"
48#include "Thyra_ProductVectorSpaceBase.hpp"
49#include "Thyra_SpmdVectorBase.hpp"
50#include "Thyra_SpmdMultiVectorBase.hpp"
60 if (nonnull(spmd_v)) {
61 return spmd_v->getNonconstLocalSubVector();
66 !(p_v->productSpace()->numBlocks() == 1),
68 "Error, the function getNonconstLocalSubVectorView() can only return"
69 " a contiguous view of local SPMD data from a product vector with a single"
70 " block (which also must be able to give up a product view.");
71 return getNonconstLocalSubVectorView<Scalar>(p_v->getNonconstVectorBlock(0));
82 if (nonnull(spmd_v)) {
83 return spmd_v->getLocalSubVector();
88 !(p_v->productSpace()->numBlocks() == 1),
90 "Error, the function getLocalSubVectorView() can only return"
91 " a contiguous view of local SPMD data from a product vector with a single"
92 " block (which also must be able to give up a product view.");
93 return getLocalSubVectorView<Scalar>(p_v->getVectorBlock(0));
104 if (nonnull(spmd_mv)) {
105 return spmd_mv->getNonconstLocalSubMultiVector();
110 !(p_mv->productSpace()->numBlocks() == 1),
112 "Error, the function getNonconstLocalSubVectorView() can only return"
113 " a contiguous view of local SPMD data from a product vector with a single"
114 " block (which also must be able to give up a product view.");
115 return getNonconstLocalSubMultiVectorView<Scalar>(p_mv->getNonconstMultiVectorBlock(0));
119template<
class Scalar>
126 if (nonnull(spmd_mv)) {
127 return spmd_mv->getLocalSubMultiVector();
132 !(p_mv->productSpace()->numBlocks() == 1),
134 "Error, the function getLocalSubVectorView() can only return"
135 " a contiguous view of local SPMD data from a product vector with a single"
136 " block (which also must be able to give up a product view.");
137 return getLocalSubMultiVectorView<Scalar>(p_mv->getMultiVectorBlock(0));
146#define THYRA_SPMD_LOCAL_DATA_ACCESS_INSTANT(SCALAR) \
148 template RTOpPack::SubVectorView<SCALAR> \
149 getNonconstLocalSubVectorView(const RCP<VectorBase<SCALAR> > &vec); \
151 template RTOpPack::ConstSubVectorView<SCALAR> \
152 getLocalSubVectorView(const RCP<const VectorBase<SCALAR> > &vec); \
154 template RTOpPack::SubMultiVectorView<SCALAR> \
155 getNonconstLocalSubMultiVectorView(const RCP<MultiVectorBase<SCALAR> > &vec); \
157 template RTOpPack::ConstSubMultiVectorView<SCALAR> \
158 getLocalSubMultiVectorView(const RCP<const MultiVectorBase<SCALAR> > &vec); \
Interface for a collection of column vectors called a multi-vector.
Abstract interface for finite-dimensional dense vectors.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
RTOpPack::ConstSubMultiVectorView< Scalar > getLocalSubMultiVectorView(const RCP< const MultiVectorBase< Scalar > > &multivec)
Return a contiguous const semi-persisting view of the local process data of a MultiVectorBase object.
RTOpPack::SubVectorView< Scalar > getNonconstLocalSubVectorView(const RCP< VectorBase< Scalar > > &vec)
Return a contiguous non-const semi-persisting view of the local process data of a VectorBase object.
RTOpPack::SubMultiVectorView< Scalar > getNonconstLocalSubMultiVectorView(const RCP< MultiVectorBase< Scalar > > &multivec)
Return a contiguous non-const semi-persisting view of the local process data of a MultiVectorBase obj...
RTOpPack::ConstSubVectorView< Scalar > getLocalSubVectorView(const RCP< const VectorBase< Scalar > > &vec)
Return a contiguous const semi-persisting view of the local process data of a VectorBase object.
T_To & dyn_cast(T_From &from)