|
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 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef COO_MATRIX_WITH_PARTITIONED_VIEW_H 00043 #define COO_MATRIX_WITH_PARTITIONED_VIEW_H 00044 00045 #include "AbstractLinAlgPack_COOMatrixClass.hpp" 00046 #include "AbstractLinAlgPack_COOMatrixPartitionedViewClass.hpp" 00047 00048 namespace AbstractLinAlgPack { 00049 00066 class COOMatrixWithPartitionedView { 00067 public: 00068 00069 // ///////////////////////////////////////////////////////////// 00072 00074 typedef COOMatrixPartitionedView<indice_type,value_type> partitioned_view_type; 00076 typedef partitioned_view_type::partition_type partition_type; 00078 typedef partitioned_view_type::EPartitionOrder EPartitionOrder; 00079 00081 00083 size_type rows() const { 00084 return coom_view_.is_initialized() ? coom_view_.rows() : coom_.rows(); 00085 } 00086 00088 size_type cols() const { 00089 return coom_view_.is_initialized() ? coom_view_.cols() : coom_.cols(); 00090 } 00091 00093 COOMatrixWithPartitionedView& operator=(const COOMatrixWithPartitionedView& m) { 00094 coom_ = m.coom_; 00095 coom_view_.bind(coom_view_); 00096 return *this; 00097 } 00098 00103 COOMatrixWithPartitionedView& operator=(const COOMatrix& m) { 00104 coom_ = m; 00105 coom_view_.free(); 00106 return *this; 00107 } 00108 00109 // ///////////////////////////////////////////////////////////// 00115 00120 void resize(size_type rows, size_type cols, size_type nz) { 00121 coom_view_.free(); 00122 coom_.resize(rows,cols,nz); 00123 } 00124 00129 value_type* val() { 00130 return coom_.val(); 00131 } 00136 indice_type* ivect() { 00137 coom_view_.free(); 00138 return coom_.ivect(); 00139 } 00144 indice_type* jvect() { 00145 coom_view_.free(); 00146 return coom_.jvect(); 00147 } 00148 00153 void initialize(std::istream& istrm) { 00154 coom_view_.free(); 00155 coom_.initialize(istrm); 00156 } 00157 00159 00161 const COOMatrix& coom() const { 00162 return coom_; 00163 } 00164 00165 // //////////////////////////////////////////////////////////////// 00168 00174 void create_view( 00175 const size_type row_perm[] 00176 , const size_type col_perm[] 00177 , const size_type num_row_part 00178 , const size_type row_part[] 00179 , const size_type num_col_part 00180 , const size_type col_part[] 00181 , const EPartitionOrder partition_order ) 00182 { 00183 coom_view_.create_view(coom_.rows(),coom_.cols(),coom_.nz(),coom_.val(),coom_.const_ivect() 00184 ,coom_.const_jvect(),row_perm,col_perm,num_row_part,row_part,num_col_part,col_part 00185 ,partition_order); 00186 } 00187 00189 partition_type partition(size_type overall_p) { 00190 return coom_view_.partition(overall_p); 00191 } 00192 00194 partition_type partition(size_type row_p, size_type col_p) { 00195 return coom_view_.partition(row_p, col_p); 00196 } 00197 00199 partition_type partition(Range1D rng_overall_p) { 00200 return coom_view_.partition(rng_overall_p); 00201 } 00202 00204 00206 const partitioned_view_type& coom_view() const { 00207 return coom_view_; 00208 } 00209 00210 00211 private: 00212 COOMatrix coom_; 00213 partitioned_view_type coom_view_; 00214 00215 00216 }; // end class COOMatrixWithPartitionedView 00217 00218 00219 } // end namespace AbstractLinAlgPack 00220 00221 #endif // COO_MATRIX_WITH_PARTITIONED_VIEW_H
1.7.6.1