|
AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects Version of the Day
|
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
1.7.4