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_MULTI_VECTOR_DEFAULT_BASE_DECL_HPP
00030 #define THYRA_MULTI_VECTOR_DEFAULT_BASE_DECL_HPP
00031
00032 #include "Thyra_MultiVectorBaseDecl.hpp"
00033 #include "Thyra_LinearOpDefaultBaseDecl.hpp"
00034
00035 namespace Thyra {
00036
00054 template<class Scalar>
00055 class MultiVectorDefaultBase
00056 : virtual public MultiVectorBase<Scalar>
00057 , virtual protected LinearOpDefaultBase<Scalar>
00058 {
00059 public:
00060
00062 using MultiVectorBase<Scalar>::col;
00064 using MultiVectorBase<Scalar>::subView;
00066 using LinearOpDefaultBase<Scalar>::describe;
00067
00071 Teuchos::RCP<const MultiVectorBase<Scalar> > subView( const Range1D& colRng ) const;
00073 Teuchos::RCP<MultiVectorBase<Scalar> > subView( const Range1D& colRng );
00075 Teuchos::RCP<const MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] ) const;
00077 Teuchos::RCP<MultiVectorBase<Scalar> > subView( const int numCols, const int cols[] );
00083 virtual void mvMultiReductApplyOpImpl(
00084 const RTOpPack::RTOpT<Scalar> &primary_op
00085 ,const int num_multi_vecs
00086 ,const MultiVectorBase<Scalar>*const multi_vecs[]
00087 ,const int num_targ_multi_vecs
00088 ,MultiVectorBase<Scalar>*const targ_multi_vecs[]
00089 ,RTOpPack::ReductTarget*const reduct_objs[]
00090 ,const Index primary_first_ele_offset
00091 ,const Index primary_sub_dim
00092 ,const Index primary_global_offset
00093 ,const Index secondary_first_ele_offset
00094 ,const Index secondary_sub_dim
00095 ) const;
00101 virtual void mvSingleReductApplyOpImpl(
00102 const RTOpPack::RTOpT<Scalar> &primary_op
00103 ,const RTOpPack::RTOpT<Scalar> &secondary_op
00104 ,const int num_multi_vecs
00105 ,const MultiVectorBase<Scalar>*const multi_vecs[]
00106 ,const int num_targ_multi_vecs
00107 ,MultiVectorBase<Scalar>*const targ_multi_vecs[]
00108 ,RTOpPack::ReductTarget *reduct_obj
00109 ,const Index primary_first_ele_offset
00110 ,const Index primary_sub_dim
00111 ,const Index primary_global_offset
00112 ,const Index secondary_first_ele_offset
00113 ,const Index secondary_sub_dim
00114 ) const;
00130 virtual void acquireDetachedMultiVectorViewImpl(
00131 const Range1D &rowRng,
00132 const Range1D &colRng,
00133 RTOpPack::ConstSubMultiVectorView<Scalar> *sub_mv
00134 ) const;
00141 virtual void releaseDetachedMultiVectorViewImpl(
00142 RTOpPack::ConstSubMultiVectorView<Scalar>* sub_mv
00143 ) const;
00159 virtual void acquireNonconstDetachedMultiVectorViewImpl(
00160 const Range1D &rowRng,
00161 const Range1D &colRng,
00162 RTOpPack::SubMultiVectorView<Scalar> *sub_mv
00163 );
00170 virtual void commitNonconstDetachedMultiVectorViewImpl(
00171 RTOpPack::SubMultiVectorView<Scalar>* sub_mv
00172 );
00181 virtual Teuchos::RCP<MultiVectorBase<Scalar> > clone_mv() const;
00183
00184 };
00185
00186 }
00187
00188 #endif // THYRA_MULTI_VECTOR_DEFAULT_BASE_DECL_HPP