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 namespace Thyra {
00035
00052 template<class Scalar>
00053 class DefaultSpmdMultiVector : virtual public SpmdMultiVectorBase<Scalar> {
00054 public:
00055
00057 using SpmdMultiVectorBase<Scalar>::subView;
00059 using SpmdMultiVectorBase<Scalar>::col;
00060
00063
00065 DefaultSpmdMultiVector();
00066
00068 DefaultSpmdMultiVector(
00069 const Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace
00070 ,const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00071 );
00072
00074 DefaultSpmdMultiVector(
00075 const Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace
00076 ,const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00077 ,const Teuchos::RefCountPtr<Scalar> &localValues
00078 ,const Index leadingDim
00079 );
00080
00097 void initialize(
00098 const Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace
00099 ,const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00100 );
00101
00128 void initialize(
00129 const Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > &spmdRangeSpace
00130 ,const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &domainSpace
00131 ,const Teuchos::RefCountPtr<Scalar> &localValues
00132 ,const Index leadingDim
00133 );
00134
00140 void uninitialize(
00141 Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > *spmdRangeSpace = NULL
00142 ,Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > *domainSpace = NULL
00143 ,Teuchos::RefCountPtr<Scalar> *localValues = NULL
00144 ,Index *leadingDim = NULL
00145 );
00146
00148
00152 std::string description() const;
00154
00158 Teuchos::RefCountPtr< const ScalarProdVectorSpaceBase<Scalar> >
00159 domainScalarProdVecSpc() const;
00161
00165 Teuchos::RefCountPtr<VectorBase<Scalar> > col(Index j);
00167 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView( const Range1D& col_rng );
00169 Teuchos::RefCountPtr<const MultiVectorBase<Scalar> > subView(
00170 const int numCols, const int cols[]
00171 ) const;
00173 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView(
00174 const int numCols, const int cols[]
00175 );
00177
00180
00182 Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > spmdSpace() const;
00184 void getLocalData( Scalar **localValues, Index *leadingDim );
00186 void commitLocalData( Scalar *localValues );
00188 void getLocalData( const Scalar **localValues, Index *leadingDim ) const;
00190 void freeLocalData( const Scalar *localValues ) const;
00192
00193 private:
00194
00195
00196
00197
00198 Teuchos::RefCountPtr<const SpmdVectorSpaceBase<Scalar> > spmdRangeSpace_;
00199 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > domainSpace_;
00200 Teuchos::RefCountPtr<Scalar> localValues_;
00201 Index leadingDim_;
00202
00203
00204
00205
00206 Teuchos::RefCountPtr<Scalar> createContiguousCopy(
00207 const int numCols, const int cols[]
00208 ) const;
00209
00210 };
00211
00212 }
00213
00214 #endif // THYRA_Spmd_MULTI_VECTOR_STD_DECL_HPP