Warning: this documentation for the development version is under construction.
00001 // Copyright (C) 2010 INRIA 00002 // Author(s): Marc Fragu 00003 // 00004 // This file is part of the linear-algebra library Seldon, 00005 // http://seldon.sourceforge.net/. 00006 // 00007 // Seldon is free software; you can redistribute it and/or modify it under the 00008 // terms of the GNU Lesser General Public License as published by the Free 00009 // Software Foundation; either version 2.1 of the License, or (at your option) 00010 // any later version. 00011 // 00012 // Seldon is distributed in the hope that it will be useful, but WITHOUT ANY 00013 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00014 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 00015 // more details. 00016 // 00017 // You should have received a copy of the GNU Lesser General Public License 00018 // along with Seldon. If not, see http://www.gnu.org/licenses/. 00019 00020 00021 #ifndef SELDON_FILE_MATRIX_COLLECTION_HXX 00022 00023 00024 #include "../share/Common.hxx" 00025 #include "../share/Properties.hxx" 00026 #include "../share/Storage.hxx" 00027 #include "../share/Errors.hxx" 00028 #include "../share/Allocator.hxx" 00029 00030 namespace Seldon 00031 { 00032 00033 00035 template <class T, class Prop, class Storage, 00036 class Allocator = NewAlloc<T> > 00037 class MatrixCollection: public Matrix_Base<T, Allocator> 00038 { 00039 // Typedef declaration. 00040 public: 00041 typedef typename T::value_type value_type; 00042 typedef typename T::pointer pointer; 00043 typedef typename T::const_pointer const_pointer; 00044 typedef typename T::reference reference; 00045 typedef typename T::const_reference const_reference; 00046 00047 typedef T matrix_type; 00048 typedef matrix_type* matrix_pointer; 00049 typedef const matrix_type* const_matrix_pointer; 00050 typedef matrix_type& matrix_reference; 00051 typedef const matrix_type& const_matrix_reference; 00052 00053 typedef Matrix<matrix_type, Prop, Storage, NewAlloc<T> > collection_type; 00054 typedef const collection_type const_collection_type; 00055 typedef collection_type& collection_reference; 00056 typedef const collection_type& const_collection_reference; 00057 00058 00059 // Attributes. 00060 protected: 00062 int nz_; 00064 int Mmatrix_; 00066 int Nmatrix_; 00068 Vector<int, VectFull, CallocAlloc<int> > Mlocal_; 00070 Vector<int, VectFull, CallocAlloc<int> > Mlocal_sum_; 00072 Vector<int, VectFull, CallocAlloc<int> > Nlocal_; 00074 Vector<int, VectFull, CallocAlloc<int> > Nlocal_sum_; 00075 00077 collection_type matrix_; 00078 00079 00080 // Methods. 00081 public: 00082 // Constructor. 00083 MatrixCollection(); 00084 MatrixCollection(int i, int j); 00085 MatrixCollection(const MatrixCollection<T, Prop, Storage, Allocator>& A); 00086 00087 // Destructor. 00088 ~MatrixCollection(); 00089 void Clear(); 00090 void Nullify(); 00091 void Nullify(int i, int j); 00092 00093 void Deallocate(); 00094 00095 // Basic methods. 00096 int GetM() const; 00097 int GetMmatrix() const; 00098 int GetM(int i) const; 00099 int GetN() const; 00100 int GetNmatrix() const; 00101 int GetN(int j) const; 00102 int GetSize() const; 00103 int GetDataSize() const; 00104 00105 // Memory management. 00106 void Reallocate(int i, int j); 00107 00108 // Management of the matrices. 00109 template <class T0, class Prop0, class Storage0, class Allocator0> 00110 void SetMatrix(int m, int n, 00111 const Matrix<T0, Prop0, Storage0, Allocator0>&); 00112 template <class T0, class Prop0, class Allocator0> 00113 void SetMatrix(int m, int n, 00114 const Matrix<T0, Prop0, RowSparse, Allocator0>&); 00115 00116 // Element access and affectation. 00117 matrix_reference GetMatrix(int i, int j); 00118 const_matrix_reference GetMatrix(int i, int j) const; 00119 00120 value_type operator() (int i, int j) const; 00121 00122 MatrixCollection<T, Prop, Storage, Allocator>& 00123 operator= (const MatrixCollection<T, Prop, Storage, Allocator>& A); 00124 void Copy(const MatrixCollection<T, Prop, Storage, Allocator>& A); 00125 00126 // Convenient functions. 00127 void Print() const; 00128 void Print(int m, int n) const; 00129 00130 // Input/output functions. 00131 void Write(string FileName, bool with_size) const; 00132 void Write(ostream& FileStream, bool with_size) const; 00133 void WriteText(string FileName) const; 00134 void WriteText(ostream& FileStream) const; 00135 00136 void Read(string FileName); 00137 void Read(istream& FileStream); 00138 }; 00139 00140 00142 template <class T, class Prop, class Allocator> 00143 class Matrix<T, Prop, ColMajorCollection, Allocator>: 00144 public MatrixCollection<T, Prop, ColMajor, Allocator> 00145 { 00146 // typedef declaration. 00147 public: 00148 typedef T value_type; 00149 typedef Prop property; 00150 typedef ColMajorCollection storage; 00151 typedef Allocator allocator; 00152 00153 public: 00154 Matrix(); 00155 Matrix(int i, int j); 00156 }; 00157 00158 00160 template <class T, class Prop, class Allocator> 00161 class Matrix<T, Prop, RowMajorCollection, Allocator>: 00162 public MatrixCollection<T, Prop, RowMajor, Allocator> 00163 { 00164 // typedef declaration. 00165 public: 00166 typedef T value_type; 00167 typedef Prop property; 00168 typedef RowMajorCollection storage; 00169 typedef Allocator allocator; 00170 00171 public: 00172 Matrix(); 00173 Matrix(int i, int j); 00174 }; 00175 00176 00178 template <class T, class Prop, class Allocator> 00179 class Matrix<T, Prop, ColSymPackedCollection, Allocator>: 00180 public MatrixCollection<T, Prop, ColSymPacked, Allocator> 00181 { 00182 // typedef declaration. 00183 public: 00184 typedef T value_type; 00185 typedef Prop property; 00186 typedef ColSymPackedCollection storage; 00187 typedef Allocator allocator; 00188 00189 public: 00190 Matrix(); 00191 Matrix(int i, int j); 00192 }; 00193 00194 00196 template <class T, class Prop, class Allocator> 00197 class Matrix<T, Prop, RowSymPackedCollection, Allocator>: 00198 public MatrixCollection<T, Prop, RowSymPacked, Allocator> 00199 { 00200 // typedef declaration. 00201 public: 00202 typedef T value_type; 00203 typedef Prop property; 00204 typedef RowSymPackedCollection storage; 00205 typedef Allocator allocator; 00206 00207 public: 00208 Matrix(); 00209 Matrix(int i, int j); 00210 }; 00211 00212 00213 00214 } // namespace Seldon. 00215 00216 00217 #define SELDON_FILE_MATRIX_COLLECTION_HXX 00218 #endif