AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects Version of the Day
AbstractLinAlgPack_VectorMutable.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //  
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //  
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00025 // 
00026 // ***********************************************************************
00027 // @HEADER
00028 
00029 #ifndef ALAP_VECTOR_MUTABLE_HPP
00030 #define ALAP_VECTOR_MUTABLE_HPP
00031 
00032 #include "AbstractLinAlgPack_Vector.hpp"
00033 
00034 namespace AbstractLinAlgPack {
00035 
00059 class VectorMutable : virtual public Vector
00060 {
00061 public:
00062 
00064   using Vector::get_sub_vector;
00066   using Vector::free_sub_vector;
00067 
00070 
00076   virtual VectorMutable& operator=(value_type alpha);
00077 
00083   virtual VectorMutable& operator=(const Vector& v);
00084 
00087   virtual VectorMutable& operator=(const VectorMutable& v);
00088 
00105   virtual void set_ele( index_type i, value_type val );
00106 
00138   virtual vec_mut_ptr_t sub_view( const Range1D& rng );
00139 
00142   vec_mut_ptr_t sub_view( const index_type& l, const index_type& u );
00143 
00148   virtual void zero();
00149 
00155   virtual void axpy( value_type alpha, const Vector& x );
00156 
00202   virtual void get_sub_vector( const Range1D& rng, RTOpPack::MutableSubVector* sub_vec );
00203 
00218   virtual void commit_sub_vector( RTOpPack::MutableSubVector* sub_vec );
00219 
00237   virtual void set_sub_vector( const RTOpPack::SparseSubVector& sub_vec );
00238 
00249   virtual void Vp_StMtV(
00250     value_type                       alpha
00251     ,const GenPermMatrixSlice        &P
00252     ,BLAS_Cpp::Transp                P_trans
00253     ,const Vector                    &x
00254     ,value_type                      beta
00255     );
00256 
00258 
00261 
00269   vec_ptr_t sub_view( const Range1D& rng ) const;
00270 
00272 
00273 }; // end class VectorMutable
00274 
00275 inline
00277 void Vp_StMtV(
00278   VectorMutable                    *y 
00279   ,value_type                      alpha
00280   ,const GenPermMatrixSlice        &P
00281   ,BLAS_Cpp::Transp                P_trans
00282   ,const Vector                    &x
00283   ,value_type                      beta = 1.0
00284   )
00285 {
00286   y->Vp_StMtV(alpha,P,P_trans,x,beta);
00287 }
00288 
00289 // ////////////////////////////////////////////////
00290 // Inline members
00291 
00292 inline
00293 VectorMutable::vec_mut_ptr_t
00294 VectorMutable::sub_view( const index_type& l, const index_type& u )
00295 {
00296   return this->sub_view(Range1D(l,u));
00297 }
00298 
00299 } // end namespace AbstractLinAlgPack
00300 
00301 #endif  // ALAP_VECTOR_MUTABLE_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends