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_VECTOR_DEFAULT_BASE_DECL_HPP
00030 #define THYRA_VECTOR_DEFAULT_BASE_DECL_HPP
00031
00032 #include "Thyra_VectorBaseDecl.hpp"
00033 #include "Thyra_MultiVectorDefaultBaseDecl.hpp"
00034 #include "Thyra_SingleRhsLinearOpBaseDecl.hpp"
00035
00036 namespace Thyra {
00037
00062 template<class Scalar>
00063 class VectorDefaultBase
00064 : virtual public VectorBase<Scalar>
00065 , virtual protected MultiVectorDefaultBase<Scalar>
00066 , virtual protected SingleRhsLinearOpBase<Scalar>
00067 {
00068 public:
00069
00071 using VectorBase<Scalar>::acquireDetachedView;
00073 using VectorBase<Scalar>::releaseDetachedView;
00075 using VectorBase<Scalar>::commitDetachedView;
00077 using MultiVectorDefaultBase<Scalar>::describe;
00079 using MultiVectorDefaultBase<Scalar>::applyOp;
00081 using MultiVectorDefaultBase<Scalar>::col;
00083 using SingleRhsLinearOpBase<Scalar>::apply;
00084
00087
00110 void describe(
00111 Teuchos::FancyOStream &out
00112 ,const Teuchos::EVerbosityLevel verbLevel
00113 ) const;
00114
00116
00119
00120 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > range() const;
00122 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > domain() const;
00124
00127
00128 Teuchos::RefCountPtr<VectorBase<Scalar> > col(Index j);
00130 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > clone_mv() const;
00132 Teuchos::RefCountPtr<const MultiVectorBase<Scalar> > subView( const Range1D& col_rng ) const;
00134 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView( const Range1D& col_rng );
00136 Teuchos::RefCountPtr<const MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] ) const;
00138 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] );
00140 void acquireDetachedView(
00141 const Range1D &rowRng
00142 ,const Range1D &colRng
00143 ,RTOpPack::ConstSubMultiVectorView<Scalar> *sub_mv
00144 ) const;
00146 void releaseDetachedView( RTOpPack::ConstSubMultiVectorView<Scalar>* sub_mv ) const;
00148 void acquireDetachedView(
00149 const Range1D &rowRng
00150 ,const Range1D &colRng
00151 ,RTOpPack::SubMultiVectorView<Scalar> *sub_mv
00152 );
00154 void commitDetachedView( RTOpPack::SubMultiVectorView<Scalar>* sub_mv );
00156
00159
00161 Teuchos::RefCountPtr<VectorBase<Scalar> > clone_v() const;
00176 virtual void acquireDetachedView( const Range1D& rng, RTOpPack::ConstSubVectorView<Scalar>* sub_vec ) const;
00184 virtual void releaseDetachedView( RTOpPack::ConstSubVectorView<Scalar>* sub_vec ) const;
00198 virtual void acquireDetachedView( const Range1D& rng, RTOpPack::SubVectorView<Scalar>* sub_vec );
00205 virtual void commitDetachedView( RTOpPack::SubVectorView<Scalar>* sub_vec );
00215 virtual void setSubVector( const RTOpPack::SparseSubVectorT<Scalar>& sub_vec );
00216
00218
00219 protected:
00220
00223
00228 bool opSupported(ETransp M_trans) const;
00229
00231 void apply(
00232 const ETransp M_trans
00233 ,const VectorBase<Scalar> &x
00234 ,VectorBase<Scalar> *y
00235 ,const Scalar alpha
00236 ,const Scalar beta
00237 ) const;
00238
00240
00241 private:
00242
00243
00244
00245
00246 Teuchos::RefCountPtr<VectorSpaceBase<Scalar> > domain_;
00247
00248
00249
00250
00251 void validateColRng( const Range1D &rowRng ) const;
00252 void validateColIndexes( const int numCols, const int cols[] ) const;
00253
00254 };
00255
00256 }
00257
00258 #endif // THYRA_VECTOR_DEFAULT_BASE_DECL_HPP