00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SELDON_FILE_MATRIX_ARRAY_COMPLEX_SPARSE_HXX
00023
00024 namespace Seldon
00025 {
00026
00028
00035 template <class T, class Prop, class Storage,
00036 class Allocator = SELDON_DEFAULT_ALLOCATOR<T> >
00037 class Matrix_ArrayComplexSparse
00038 {
00039
00040 public:
00041 typedef typename Allocator::value_type value_type;
00042 typedef typename Allocator::pointer pointer;
00043 typedef typename Allocator::const_pointer const_pointer;
00044 typedef typename Allocator::reference reference;
00045 typedef typename Allocator::const_reference const_reference;
00046 typedef complex<T> entry_type;
00047 typedef complex<T> access_type;
00048 typedef complex<T> const_access_type;
00049
00050
00051 protected:
00053 int m_;
00055 int n_;
00057 Vector<Vector<T, VectSparse, Allocator>, VectFull,
00058 NewAlloc<Vector<T, VectSparse, Allocator> > > val_real_;
00060 Vector<Vector<T, VectSparse, Allocator>, VectFull,
00061 NewAlloc<Vector<T, VectSparse, Allocator> > > val_imag_;
00062
00063
00064 public:
00065
00066 Matrix_ArrayComplexSparse();
00067 Matrix_ArrayComplexSparse(int i, int j);
00068
00069
00070 ~Matrix_ArrayComplexSparse();
00071 void Clear();
00072
00073
00074 void Reallocate(int i, int j);
00075 void Resize(int i, int j);
00076
00077
00078 int GetM() const;
00079 int GetN() const;
00080 int GetM(const SeldonTranspose& status) const;
00081 int GetN(const SeldonTranspose& status) const;
00082 int GetRealNonZeros() const;
00083 int GetImagNonZeros() const;
00084 int GetRealDataSize() const;
00085 int GetImagDataSize() const;
00086 int GetDataSize() const;
00087 int* GetRealInd(int i) const;
00088 int* GetImagInd(int i) const;
00089 T* GetRealData(int i) const;
00090 T* GetImagData(int i) const;
00091 Vector<T, VectSparse, Allocator>* GetRealData() const;
00092 Vector<T, VectSparse, Allocator>* GetImagData() const;
00093
00094
00095 complex<T> operator() (int i, int j) const;
00096 complex<T>& Val(int i, int j);
00097 const complex<T>& Val(int i, int j) const;
00098 complex<T>& Get(int i, int j);
00099 const complex<T>& Get(int i, int j) const;
00100
00101 T& ValReal(int i, int j);
00102 const T& ValReal(int i, int j) const;
00103 T& ValImag(int i, int j);
00104 const T& ValImag(int i, int j) const;
00105 T& GetReal(int i, int j);
00106 const T& GetReal(int i, int j) const;
00107 T& GetImag(int i, int j);
00108 const T& GetImag(int i, int j) const;
00109
00110 void Set(int i, int j, const complex<T>& x);
00111
00112 const T& ValueReal(int num_row,int i) const;
00113 T& ValueReal(int num_row,int i);
00114 int IndexReal(int num_row,int i) const;
00115 int& IndexReal(int num_row,int i);
00116 const T& ValueImag(int num_row,int i) const;
00117 T& ValueImag(int num_row,int i);
00118 int IndexImag(int num_row,int i) const;
00119 int& IndexImag(int num_row,int i);
00120
00121 void SetRealData(int, int, Vector<T, VectSparse, Allocator>*);
00122 void SetImagData(int, int, Vector<T, VectSparse, Allocator>*);
00123 void SetRealData(int, int, T*, int*);
00124 void SetImagData(int, int, T*, int*);
00125 void NullifyReal(int i);
00126 void NullifyImag(int i);
00127 void NullifyReal();
00128 void NullifyImag();
00129
00130
00131 void Print() const;
00132 void Write(string FileName) const;
00133 void Write(ostream& FileStream) const;
00134 void WriteText(string FileName) const;
00135 void WriteText(ostream& FileStream) const;
00136 void Read(string FileName);
00137 void Read(istream& FileStream);
00138 void ReadText(string FileName);
00139 void ReadText(istream& FileStream);
00140
00141 void Assemble();
00142 template<class T0>
00143 void RemoveSmallEntry(const T0& epsilon);
00144
00145 void SetIdentity();
00146 void Zero();
00147 void Fill();
00148 template <class T0>
00149 void Fill(const complex<T0>& x);
00150 template <class T0>
00151 Matrix_ArrayComplexSparse<T, Prop, Storage, Allocator>& operator=
00152 (const complex<T0>& x);
00153 void FillRand();
00154
00155 };
00156
00157
00159 template <class T, class Prop, class Allocator>
00160 class Matrix<T, Prop, ArrayColComplexSparse, Allocator> :
00161 public Matrix_ArrayComplexSparse<T, Prop, ArrayColComplexSparse, Allocator>
00162 {
00163
00164 public:
00165 typedef typename Allocator::value_type value_type;
00166 typedef Prop property;
00167 typedef ArrayColComplexSparse storage;
00168 typedef Allocator allocator;
00169
00170 public:
00171 Matrix();
00172 Matrix(int i, int j);
00173
00174
00175 void ClearRealColumn(int i);
00176 void ClearImagColumn(int i);
00177 void ReallocateRealColumn(int i, int j);
00178 void ReallocateImagColumn(int i, int j);
00179 void ResizeRealColumn(int i, int j);
00180 void ResizeImagColumn(int i, int j);
00181 void SwapRealColumn(int i, int i_);
00182 void SwapImagColumn(int i, int i_);
00183 void ReplaceRealIndexColumn(int i, IVect& new_index);
00184 void ReplaceImagIndexColumn(int i, IVect& new_index);
00185
00186 int GetRealColumnSize(int i) const;
00187 int GetImagColumnSize(int i) const;
00188 void PrintRealColumn(int i) const;
00189 void PrintImagColumn(int i) const;
00190 void AssembleRealColumn(int i);
00191 void AssembleImagColumn(int i);
00192
00193 void AddInteraction(int i, int j, const complex<T>& val);
00194
00195 template<class Alloc1>
00196 void AddInteractionRow(int i, int nb, const IVect& col,
00197 const Vector<complex<T>, VectFull, Alloc1>& val);
00198 template<class Alloc1>
00199 void AddInteractionColumn(int i, int nb, const IVect& row,
00200 const Vector<complex<T>, VectFull,
00201 Alloc1>& val);
00202 };
00203
00204
00206 template <class T, class Prop, class Allocator>
00207 class Matrix<T, Prop, ArrayRowComplexSparse, Allocator> :
00208 public Matrix_ArrayComplexSparse<T, Prop, ArrayRowComplexSparse, Allocator>
00209 {
00210
00211 public:
00212 typedef typename Allocator::value_type value_type;
00213 typedef Prop property;
00214 typedef ArrayRowComplexSparse storage;
00215 typedef Allocator allocator;
00216
00217 public:
00218 Matrix();
00219 Matrix(int i, int j);
00220
00221
00222 void ClearRealRow(int i);
00223 void ClearImagRow(int i);
00224 void ReallocateRealRow(int i, int j);
00225 void ReallocateImagRow(int i, int j);
00226 void ResizeRealRow(int i, int j);
00227 void ResizeImagRow(int i, int j);
00228 void SwapRealRow(int i, int i_);
00229 void SwapImagRow(int i, int i_);
00230 void ReplaceRealIndexRow(int i, IVect& new_index);
00231 void ReplaceImagIndexRow(int i, IVect& new_index);
00232
00233 int GetRealRowSize(int i) const;
00234 int GetImagRowSize(int i) const;
00235 void PrintRealRow(int i) const;
00236 void PrintImagRow(int i) const;
00237 void AssembleRealRow(int i);
00238 void AssembleImagRow(int i);
00239
00240 void AddInteraction(int i, int j, const complex<T>& val);
00241
00242 template<class Alloc1>
00243 void AddInteractionRow(int i, int nb, const IVect& col,
00244 const Vector<complex<T>, VectFull, Alloc1>& val);
00245 template<class Alloc1>
00246 void AddInteractionColumn(int i, int nb, const IVect& row,
00247 const Vector<complex<T>, VectFull,
00248 Alloc1>& val);
00249 };
00250
00251
00253 template <class T, class Prop, class Allocator>
00254 class Matrix<T, Prop, ArrayColSymComplexSparse, Allocator>:
00255 public Matrix_ArrayComplexSparse<T, Prop, ArrayColSymComplexSparse, Allocator>
00256 {
00257
00258 public:
00259 typedef typename Allocator::value_type value_type;
00260 typedef Prop property;
00261 typedef ArrayColSymComplexSparse storage;
00262 typedef Allocator allocator;
00263
00264 public:
00265 Matrix();
00266 Matrix(int i, int j);
00267
00268 complex<T> operator() (int i, int j) const;
00269
00270 T& ValReal(int i, int j);
00271 const T& ValReal(int i, int j) const;
00272 T& ValImag(int i, int j);
00273 const T& ValImag(int i, int j) const;
00274 T& GetReal(int i, int j);
00275 const T& GetReal(int i, int j) const;
00276 T& GetImag(int i, int j);
00277 const T& GetImag(int i, int j) const;
00278
00279 void Set(int i, int j, const complex<T>& x);
00280
00281
00282 void ClearRealColumn(int i);
00283 void ClearImagColumn(int i);
00284 void ReallocateRealColumn(int i, int j);
00285 void ReallocateImagColumn(int i, int j);
00286 void ResizeRealColumn(int i, int j);
00287 void ResizeImagColumn(int i, int j);
00288 void SwapRealColumn(int i, int i_);
00289 void SwapImagColumn(int i, int i_);
00290 void ReplaceRealIndexColumn(int i, IVect& new_index);
00291 void ReplaceImagIndexColumn(int i, IVect& new_index);
00292
00293 int GetRealColumnSize(int i) const;
00294 int GetImagColumnSize(int i) const;
00295 void PrintRealColumn(int i) const;
00296 void PrintImagColumn(int i) const;
00297 void AssembleRealColumn(int i);
00298 void AssembleImagColumn(int i);
00299
00300 void AddInteraction(int i, int j, const complex<T>& val);
00301
00302 template<class Alloc1>
00303 void AddInteractionRow(int i, int nb, const IVect& col,
00304 const Vector<complex<T>, VectFull, Alloc1>& val);
00305 template<class Alloc1>
00306 void AddInteractionColumn(int i, int nb, const IVect& row,
00307 const Vector<complex<T>, VectFull,
00308 Alloc1>& val);
00309 };
00310
00311
00313 template <class T, class Prop, class Allocator>
00314 class Matrix<T, Prop, ArrayRowSymComplexSparse, Allocator>:
00315 public Matrix_ArrayComplexSparse<T, Prop, ArrayRowSymComplexSparse, Allocator>
00316 {
00317
00318 public:
00319 typedef typename Allocator::value_type value_type;
00320 typedef Prop property;
00321 typedef ArrayRowSymComplexSparse storage;
00322 typedef Allocator allocator;
00323
00324 public:
00325 Matrix();
00326 Matrix(int i, int j);
00327
00328 complex<T> operator() (int i, int j) const;
00329
00330 T& ValReal(int i, int j);
00331 const T& ValReal(int i, int j) const;
00332 T& ValImag(int i, int j);
00333 const T& ValImag(int i, int j) const;
00334 T& GetReal(int i, int j);
00335 const T& GetReal(int i, int j) const;
00336 T& GetImag(int i, int j);
00337 const T& GetImag(int i, int j) const;
00338
00339 void Set(int i, int j, const complex<T>& x);
00340
00341
00342 void ClearRealRow(int i);
00343 void ClearImagRow(int i);
00344 void ReallocateRealRow(int i, int j);
00345 void ReallocateImagRow(int i, int j);
00346 void ResizeRealRow(int i, int j);
00347 void ResizeImagRow(int i, int j);
00348 void SwapRealRow(int i, int i_);
00349 void SwapImagRow(int i, int i_);
00350 void ReplaceRealIndexRow(int i, IVect& new_index);
00351 void ReplaceImagIndexRow(int i, IVect& new_index);
00352
00353 int GetRealRowSize(int i) const;
00354 int GetImagRowSize(int i) const;
00355 void PrintRealRow(int i) const;
00356 void PrintImagRow(int i) const;
00357 void AssembleRealRow(int i);
00358 void AssembleImagRow(int i);
00359
00360 void AddInteraction(int i, int j, const complex<T>& val);
00361
00362 template<class Alloc1>
00363 void AddInteractionRow(int i, int nb, const IVect& col,
00364 const Vector<complex<T>, VectFull, Alloc1>& val);
00365 template<class Alloc1>
00366 void AddInteractionColumn(int i, int nb, const IVect& row,
00367 const Vector<complex<T>, VectFull,
00368 Alloc1>& val);
00369 };
00370
00371
00372 }
00373
00374 #define SELDON_FILE_MATRIX_ARRAY_COMPLEX_SPARSE_HXX
00375 #endif