ParGeMSLR
coo_matrix.hpp
Go to the documentation of this file.
1 #ifndef PARGEMSLR_COO_MATRIX_H
2 #define PARGEMSLR_COO_MATRIX_H
3 
8 #include <iostream>
9 
10 #include "../utils/utils.hpp"
11 #include "../vectors/sequential_vector.hpp"
12 #include "matrix.hpp"
13 #include "csr_matrix.hpp"
14 
15 namespace pargemslr
16 {
17 
22  template <typename T>
23  class CooMatrixClass: public MatrixClass<T>
24  {
25  private:
26 
27  /* variables */
28 
33  IntVectorClass<int> _i_vec;
34 
39  IntVectorClass<int> _j_vec;
40 
46 
51  int _nrows;
52 
57  int _ncols;
58 
63  int _nnz;
64 
65  public:
66 
72 
79 
86 
94 
102 
108  virtual int Clear();
109 
114  virtual ~CooMatrixClass();
115 
123  int Setup(int nrows, int ncols);
124 
133  int Setup(int nrows, int ncols, int reserve);
134 
144  int Setup(int nrows, int ncols, int reserve, int location);
145 
151  virtual int GetDataLocation() const;
152 
158  virtual int GetNumRowsLocal() const;
159 
165  virtual int GetNumColsLocal() const;
166 
172  virtual long int GetNumNonzeros() const;
173 
179  int SetNumCols(int cols);
180 
186  int SetNumNonzeros();
187 
193  virtual int Eye();
194 
201  virtual int Fill(const T &v);
202 
209  virtual int Scale(const T &alpha);
210 
217  virtual int MoveData( const int &location);
218 
227  int PushBack( int row, int col, T v);
228 
234  int* GetI() const;
235 
241  int* GetJ() const;
242 
248  T* GetData() const;
249 
256 
262  const IntVectorClass<int>& GetIVector() const;
263 
270 
276  const IntVectorClass<int>& GetJVector() const;
277 
284 
291 
299  int ToCsr(int location, CsrMatrixClass<T> &csrmat_out);
300 
315  int Laplacian(int nx, int ny, int nz, T alphax, T alphay, T alphaz, T shift, bool rand_perturb = false);
316 
324  int Helmholtz(int n, T w);
325 
333  int ReadFromMMFile(const char *matfile, int idxin);
334 
345  int PlotPatternGnuPlot( const char *datafilename, int *rperm, int *cperm, int conditiona, int conditionb);
346 
347  };
348 
353  template<> struct PargemslrIsComplex<CooMatrixClass<complexs> > : public std::true_type {};
354  template<> struct PargemslrIsComplex<CooMatrixClass<complexd> > : public std::true_type {};
355 
356 }
357 
358 #endif
pargemslr::CooMatrixClass::GetNumNonzeros
virtual long int GetNumNonzeros() const
Get the number of nonzeros in this matrix.
Definition: coo_matrix.cpp:271
pargemslr::CooMatrixClass::Setup
int Setup(int nrows, int ncols)
Free the current matrix, and create the new matrix using the default reserved memory size on the host...
Definition: coo_matrix.cpp:140
pargemslr::CooMatrixClass::Laplacian
int Laplacian(int nx, int ny, int nz, T alphax, T alphay, T alphaz, T shift, bool rand_perturb=false)
Generate Laplacian matrix, 5-pt for 2D problem and 7-pt for 3D problem.
Definition: coo_matrix.cpp:519
csr_matrix.hpp
CSR matrix data structure.
pargemslr::CooMatrixClass::GetI
int * GetI() const
Get the I pointer of the matrix.
Definition: coo_matrix.cpp:313
pargemslr::CooMatrixClass::GetJVector
IntVectorClass< int > & GetJVector()
Get the reference to the J vector.
Definition: coo_matrix.cpp:363
pargemslr::CooMatrixClass::CooMatrixClass
CooMatrixClass()
The constructor of CooMatrixClass.
Definition: coo_matrix.cpp:24
pargemslr::CooMatrixClass::GetDataVector
SequentialVectorClass< T > & GetDataVector()
Get the reference to the data vector.
Definition: coo_matrix.cpp:384
pargemslr::CooMatrixClass::GetData
T * GetData() const
Get the data pointer of the matrix.
Definition: coo_matrix.cpp:333
pargemslr::CooMatrixClass::MoveData
virtual int MoveData(const int &location)
Move the data to another memory location.
Definition: coo_matrix.cpp:440
pargemslr::CooMatrixClass::ToCsr
int ToCsr(int location, CsrMatrixClass< T > &csrmat_out)
Convert the matrix to csr.
Definition: coo_matrix.cpp:479
pargemslr::CooMatrixClass::GetNumColsLocal
virtual int GetNumColsLocal() const
Get the local number of columns of the matrix.
Definition: coo_matrix.cpp:261
pargemslr::CooMatrixClass::PushBack
int PushBack(int row, int col, T v)
Insert value to the COO matrix.
Definition: coo_matrix.cpp:190
pargemslr::SequentialVectorClass
The class of sequential real/complex vector.
Definition: structs.hpp:12
pargemslr::CooMatrixClass
Class of COO matrices. Note that most coo matrix functions are not yet on the device.
Definition: coo_matrix.hpp:24
pargemslr::CooMatrixClass::operator=
CooMatrixClass< T > & operator=(const CooMatrixClass< T > &mat)
The = operator of CooMatrixClass.
Definition: coo_matrix.cpp:72
pargemslr::CooMatrixClass::~CooMatrixClass
virtual ~CooMatrixClass()
The destructor of CooMatrixClass.
Definition: coo_matrix.cpp:111
pargemslr::CooMatrixClass::Eye
virtual int Eye()
Create an indentity matrix.
Definition: coo_matrix.cpp:407
matrix.hpp
The virtual matrix classes.
pargemslr::CooMatrixClass::GetJ
int * GetJ() const
Get the J pointer of the matrix.
Definition: coo_matrix.cpp:323
pargemslr::ComplexValueClass
The template class complex.
Definition: complex.hpp:24
pargemslr::IntVectorClass< int >
pargemslr::CooMatrixClass::Clear
virtual int Clear()
Free the current matrix.
Definition: coo_matrix.cpp:121
pargemslr::MatrixClass
The virtual class of all matrix classes.
Definition: matrix.hpp:23
pargemslr::CooMatrixClass::Fill
virtual int Fill(const T &v)
Fill the matrix pattern with constant value.
Definition: coo_matrix.cpp:452
pargemslr::CooMatrixClass::SetNumNonzeros
int SetNumNonzeros()
Set the number of nonzeros in this matrix.
Definition: coo_matrix.cpp:281
pargemslr::CooMatrixClass::GetDataLocation
virtual int GetDataLocation() const
Get the data location of the matrix.
Definition: coo_matrix.cpp:228
pargemslr::CooMatrixClass::SetNumCols
int SetNumCols(int cols)
Set the number of cols in this matrix.
Definition: coo_matrix.cpp:299
pargemslr::CooMatrixClass::GetIVector
IntVectorClass< int > & GetIVector()
Get the reference to the I vector.
Definition: coo_matrix.cpp:343
pargemslr::CooMatrixClass::GetNumRowsLocal
virtual int GetNumRowsLocal() const
Get the local number of rows of the matrix.
Definition: coo_matrix.cpp:246
pargemslr::PargemslrIsComplex
Tell if a value is a complex value.
Definition: complex.hpp:684
pargemslr::CooMatrixClass::PlotPatternGnuPlot
int PlotPatternGnuPlot(const char *datafilename, int *rperm, int *cperm, int conditiona, int conditionb)
Plot the pattern of the csr matrix using gnuplot. Similar to spy in the MATLAB. Function for testing ...
Definition: coo_matrix.cpp:785
pargemslr::CsrMatrixClass
Class of CSR/CSC matrices.
Definition: structs.hpp:16
pargemslr::CooMatrixClass::ReadFromMMFile
int ReadFromMMFile(const char *matfile, int idxin)
Read matrix on the host memory, matrix market format.
Definition: coo_matrix.cpp:775
pargemslr::CooMatrixClass::Scale
virtual int Scale(const T &alpha)
Scale the matrix.
Definition: coo_matrix.cpp:466
pargemslr::CooMatrixClass::Helmholtz
int Helmholtz(int n, T w)
Generate 3D Helmholtz matrix with 7-pt on [0,1]^3. -\Delta u - w^2 u = f.
Definition: coo_matrix.cpp:647