00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_Spmd_MULTI_VECTOR_STD_DECL_HPP
00030 #define THYRA_Spmd_MULTI_VECTOR_STD_DECL_HPP
00031
00032 #include "Thyra_SpmdMultiVectorBaseDecl.hpp"
00033
00034
00035 namespace Thyra {
00036
00037
00054 template<class Scalar>
00055 class DefaultSpmdMultiVector : virtual public SpmdMultiVectorBase<Scalar> {
00056 public:
00057
00060
00062 DefaultSpmdMultiVector();
00063
00065 DefaultSpmdMultiVector(
00066 const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace,
00067 const RCP<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00068 );
00069
00071 DefaultSpmdMultiVector(
00072 const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace,
00073 const RCP<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace,
00074 const ArrayRCP<Scalar> &localValues,
00075 const Index leadingDim
00076 );
00077
00094 void initialize(
00095 const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace,
00096 const RCP<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00097 );
00098
00125 void initialize(
00126 const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace,
00127 const RCP<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace,
00128 const ArrayRCP<Scalar> &localValues,
00129 const Index leadingDim
00130 );
00131
00137 void uninitialize(
00138 RCP<const SpmdVectorSpaceBase<Scalar> > *spmdRangeSpace = NULL,
00139 RCP<const ScalarProdVectorSpaceBase<Scalar> > *domainSpace = NULL,
00140 ArrayRCP<Scalar> *localValues = NULL,
00141 Index *leadingDim = NULL
00142 );
00143
00145
00149 RCP< const ScalarProdVectorSpaceBase<Scalar> >
00150 domainScalarProdVecSpc() const;
00152
00156 RCP<VectorBase<Scalar> > nonconstColImpl(Index j);
00158 RCP<MultiVectorBase<Scalar> >
00159 nonconstContigSubViewImpl( const Range1D& colRng );
00161 RCP<const MultiVectorBase<Scalar> >
00162 nonContigSubViewImpl( const ArrayView<const int> &cols ) const;
00164 RCP<MultiVectorBase<Scalar> >
00165 nonconstNonContigSubViewImpl( const ArrayView<const int> &cols );
00167
00170
00172 RCP<const SpmdVectorSpaceBase<Scalar> > spmdSpace() const;
00174 void getLocalData( Scalar **localValues, Index *leadingDim );
00176 void commitLocalData( Scalar *localValues );
00178 void getLocalData( const Scalar **localValues, Index *leadingDim ) const;
00180 void freeLocalData( const Scalar *localValues ) const;
00182
00183 private:
00184
00185
00186
00187
00188 RCP<const SpmdVectorSpaceBase<Scalar> > spmdRangeSpace_;
00189 RCP<const ScalarProdVectorSpaceBase<Scalar> > domainSpace_;
00190 ArrayRCP<Scalar> localValues_;
00191 Index leadingDim_;
00192
00193
00194
00195
00196 ArrayRCP<Scalar> createContiguousCopy(
00197 const ArrayView<const int> &cols
00198 ) const;
00199
00200 };
00201
00202
00203 }
00204
00205
00206 #endif // THYRA_Spmd_MULTI_VECTOR_STD_DECL_HPP