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_SERIAL_BASE_DECL_HPP
00030 #define THYRA_VECTOR_SERIAL_BASE_DECL_HPP
00031
00032 #include "Thyra_VectorDefaultBase.hpp"
00033
00034 namespace Thyra {
00035
00054 template<class Scalar>
00055 class SerialVectorBase : virtual public VectorDefaultBase<Scalar> {
00056 public:
00057
00059 using VectorDefaultBase<Scalar>::describe;
00061 using VectorDefaultBase<Scalar>::applyOp;
00062
00065
00067 SerialVectorBase();
00068
00070
00073
00095 virtual void getData( Scalar** values, Index* stride ) = 0;
00096
00113 virtual void commitData( Scalar** values ) = 0;
00114
00116
00119
00147 virtual void getData( const Scalar** values, Index* stride ) const;
00148
00171 virtual void freeData( const Scalar** values ) const;
00172
00174
00177
00187 void applyOp(
00188 const RTOpPack::RTOpT<Scalar> &op
00189 ,const int num_vecs
00190 ,const VectorBase<Scalar>* vecs[]
00191 ,const int num_targ_vecs
00192 ,VectorBase<Scalar>* targ_vecs[]
00193 ,RTOpPack::ReductTarget *reduct_obj
00194 ,const Index first_ele
00195 ,const Index sub_dim
00196 ,const Index global_offset
00197 ) const;
00199 void getSubVector( const Range1D& rng, RTOpPack::SubVectorT<Scalar>* sub_vec ) const;
00201 void freeSubVector( RTOpPack::SubVectorT<Scalar>* sub_vec ) const;
00203 void getSubVector( const Range1D& rng, RTOpPack::MutableSubVectorT<Scalar>* sub_vec );
00205 void commitSubVector( RTOpPack::MutableSubVectorT<Scalar>* sub_vec );
00207 void setSubVector( const RTOpPack::SparseSubVectorT<Scalar>& sub_vec );
00208
00210
00211 private:
00212
00213
00214
00215
00216 mutable bool in_applyOp_;
00217
00218 };
00219
00220 }
00221
00222 #endif // THYRA_VECTOR_SERIAL_BASE_DECL_HPP