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 SingleRhsLinearOpBase<Scalar>::apply;
00073 using MultiVectorDefaultBase<Scalar>::describe;
00075 using MultiVectorDefaultBase<Scalar>::applyOp;
00077 using MultiVectorDefaultBase<Scalar>::col;
00078
00081
00082 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > range() const;
00084 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > domain() const;
00086
00089
00090 Teuchos::RefCountPtr<VectorBase<Scalar> > col(Index j);
00092 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > clone_mv() const;
00094 Teuchos::RefCountPtr<const MultiVectorBase<Scalar> > subView( const Range1D& col_rng ) const;
00096 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView( const Range1D& col_rng );
00098 Teuchos::RefCountPtr<const MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] ) const;
00100 Teuchos::RefCountPtr<MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] );
00102 void getSubMultiVector(
00103 const Range1D &rowRng
00104 ,const Range1D &colRng
00105 ,RTOpPack::SubMultiVectorT<Scalar> *sub_mv
00106 ) const;
00108 void freeSubMultiVector( RTOpPack::SubMultiVectorT<Scalar>* sub_mv ) const;
00110 void getSubMultiVector(
00111 const Range1D &rowRng
00112 ,const Range1D &colRng
00113 ,RTOpPack::MutableSubMultiVectorT<Scalar> *sub_mv
00114 );
00116 void commitSubMultiVector( RTOpPack::MutableSubMultiVectorT<Scalar>* sub_mv );
00118
00119 protected:
00120
00123
00128 bool opSupported(ETransp M_trans) const;
00129
00131 void apply(
00132 const ETransp M_trans
00133 ,const VectorBase<Scalar> &x
00134 ,VectorBase<Scalar> *y
00135 ,const Scalar alpha
00136 ,const Scalar beta
00137 ) const;
00138
00140
00141 private:
00142
00143
00144
00145
00146 Teuchos::RefCountPtr<VectorSpaceBase<Scalar> > domain_;
00147
00148
00149
00150
00151 void validateColRng( const Range1D &rowRng ) const;
00152 void validateColIndexes( const int numCols, const int cols[] ) const;
00153
00154 };
00155
00156 }
00157
00158 #endif // THYRA_VECTOR_DEFAULT_BASE_DECL_HPP