MOOCHO (Single Doxygen Collection) Version of the Day
AbstractLinAlgPack_COOMatrixWithPartitionedView.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines