54 #define CLASS_MEMBER_PTRS \
55 const VectorMutableDense *_this = this; \
56 const DVectorSlice *_v; \
57 const release_resource_ptr_t *_v_release; \
58 const VectorSpaceSerial *_space;
60 #define CLASS_MEMBER_PTRS
63 namespace AbstractLinAlgPack {
89 namespace rcp = MemMngPack;
90 namespace rmp = MemMngPack;
96 new rmp::ReleaseResource_ref_count_ptr<DVector>(
125 ,
const size_t num_vecs,
const Vector* vecs[]
127 ,RTOpPack::ReductTarget *reduct_obj
134 "VectorMutableDense::apply_op(...)"
135 ,op,num_vecs,vecs,num_targ_vecs,targ_vecs,reduct_obj,first_ele_in,sub_dim_in,global_offset_in
139 op,num_vecs,vecs,num_targ_vecs,targ_vecs,reduct_obj
140 ,first_ele_in,sub_dim_in,global_offset_in
160 const Range1D rng = RangePack::full_range(rng_in,1,this_dim);
162 rng.
ubound() > this_dim, std::out_of_range
163 ,
"VectorMutableDense::get_sub_vector(...) : Error, "
165 "is not in the range [1,this->dim()] = [1," << this_dim <<
"]!" );
226 namespace rcp = MemMngPack;
228 const Range1D rng = RangePack::full_range( rng_in, 1, this_dim );
231 rng.
ubound() > this_dim, std::out_of_range
232 ,
"VectorMutableDense::sub_view(...) : Error, "
234 "is not in the range [1,this->dim()] = [1," << this_dim <<
"]!" );
236 if( rng ==
Range1D(1,this_dim) )
247 const Range1D rng = RangePack::full_range(rng_in,1,this_dim);
250 rng.
ubound() > this_dim, std::out_of_range
251 ,
"VectorMutableDense::get_sub_vector(...) : Error, "
253 "is not in the range [1,this->dim()] = [1," << this_dim <<
"]!" );
DVector "Adaptor" subclass for DenseLinAlgPack::DVectorSlice or DenseLinAlgPack::DVector objects...
virtual void set_sub_vector(const RTOpPack::SparseSubVector &sub_vec)
Set a specific sub-vector.
Abstract interface for immutable, finite dimensional, coordinate vectors {abstract}.
RTOp_index_type index_type
size_type dim() const
Returns the number of elements of the VectorSliceTmpl.
#define CLASS_MEMBER_PTRS
const VectorSpace & space() const
RTOp_value_type value_type
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Index size() const
Return the size of the range (ubound() - lbound() + 1)
Teuchos::RCP< const Vector > vec_ptr_t
Index ubound() const
Return upper bound of the range.
vec_mut_ptr_t sub_view(const Range1D &rng)
void commit_sub_vector(RTOpPack::MutableSubVector *sub_vec)
void apply_op(const RTOpPack::RTOp &op, const size_t num_vecs, const Vector *vecs[], const size_t num_targ_vecs, VectorMutable *targ_vecs[], RTOpPack::ReductTarget *reduct_obj, const index_type first_ele, const index_type sub_dim, const index_type global_offset) const
Teuchos::RCP< VectorMutable > vec_mut_ptr_t
VectorMutableDense(const size_type dim=0)
Calls this->initialize(dim).
value_type * raw_ptr()
Return a pointer to the address of the first memory location of underlying array. ...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
. One-based subregion index range class.
VectorMutable & operator=(value_type alpha)
virtual void has_changed() const
Must be called by any vector subclass that modifies this vector object!
RTOpT< RTOp_value_type > RTOp
RTOp_index_type size_type
Abstract interface for objects that represent a space for mutable coordinate vectors.
Extract a constant DenseLinAlgPack::DVectorSlice view of a Vector object.
void set_sub_vector(const RTOpPack::SparseSubVector &sub_vec)
void initialize(const size_type dim)
Call this->initialize(v,v_release) with an allocated DenseLinAlgPack::DVector object.
void Vp_StMtV(VectorMutable *v_lhs, value_type alpha, const MatrixOp &M_rhs1, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2, value_type beta=1.0)
v_lhs = alpha * op(M_rhs1) * v_rhs2 + beta * v_lhs (BLAS xGEMV)
release_resource_ptr_t v_release_
void bind(VectorSliceTmpl< value_type > vs)
Bind to the view of another VectorSliceTmpl.
void set_ele(index_type i, value_type val)
Index lbound() const
Return lower bound of the range.
void initialize(size_type dim)
Initialize given the dimension of the vector space.
virtual VectorMutable & operator=(value_type alpha)
Assign the elements of this vector to a scalar.
void initialize(Teuchos_Ordinal globalOffset, Teuchos_Ordinal subDim, Scalar *values, ptrdiff_t stride)
DenseLinAlgPack::VectorTmpl< value_type > DVector
difference_type stride() const
Return the distance (+,-) (in units of elements) between adjacent elements in the underlying array...
Abstract interface for mutable coordinate vectors {abstract}.
void Vp_StMtV(value_type alpha, const GenPermMatrixSlice &P, BLAS_Cpp::Transp P_trans, const Vector &x, value_type beta)
SparseSubVectorT< RTOp_value_type > SparseSubVector
void apply_op_serial(const RTOpPack::RTOp &op, const size_t num_vecs, const Vector *vecs[], const size_t num_targ_vecs, VectorMutable *targ_vecs[], RTOpPack::ReductTarget *reduct_obj, const index_type first_ele, const index_type sub_dim, const index_type global_offset) const
Class for a mutable sub-vector.
void apply_op_validate_input(const char func_name[], const RTOpPack::RTOp &op, const size_t num_vecs, const Vector *vecs[], const size_t num_targ_vecs, VectorMutable *targ_vecs[], RTOpPack::ReductTarget *reduct_obj, const index_type first_ele, const index_type sub_dim, const index_type global_offset)
Validate the inputs to apply_op().
void get_sub_vector(const Range1D &rng, RTOpPack::SubVector *sub_vec) const
void initialize(Teuchos_Ordinal globalOffset, Teuchos_Ordinal subDim, const Scalar *values, ptrdiff_t stride)
RangePack::Range1D Range1D
Class for a non-mutable sub-vector.
void free_sub_vector(RTOpPack::SubVector *sub_vec) const
value_type get_ele(index_type i) const
Concrete matrix type to represent general permutation (mapping) matrices.