ParGeMSLR
dense_matrix.hpp
Go to the documentation of this file.
1 #ifndef PARGEMSLR_DENSE_MATRIX_H
2 #define PARGEMSLR_DENSE_MATRIX_H
3 
8 #include <iostream>
9 
10 #include "../utils/utils.hpp"
11 #include "../vectors/sequential_vector.hpp"
12 #include "matrix.hpp"
13 
14 namespace pargemslr
15 {
16 
21  template <typename T>
22  class DenseMatrixClass: public MatrixClass<T>
23  {
24  private:
25 
26  /* variables */
27 
32  SequentialVectorClass<T> _data_vec;
33 
38  int _nrows;
39 
44  int _ncols;
45 
50  int _ldim;
51 
52 
53  public:
54 
60 
67 
74 
82 
90 
95  virtual ~DenseMatrixClass();
96 
105  int Setup(int nrows, int ncols);
106 
116  int Setup(int nrows, int ncols, bool setzero);
117 
128  int Setup(int nrows, int ncols, int location, bool setzero);
129 
140  int SetupPtr( T* data, int nrows, int ncols, int ldim, int location);
141 
152  int SetupPtr(const DenseMatrixClass<T> &mat_in, int row_start, int col_start, int num_rows, int num_cols);
153 
165  int SubMatrix( int row_start, int col_start, int num_rows, int num_cols, int location, DenseMatrixClass<T> &mat_out);
166 
174  T& operator()( int row, int col);
175 
181  virtual int Clear();
182 
188  virtual int GetDataLocation() const;
189 
195  virtual int GetNumRowsLocal() const;
196 
202  virtual int GetNumColsLocal() const;
203 
209  virtual long int GetNumNonzeros() const;
210 
216  T* GetData() const;
217 
224 
231 
237  int GetLeadingDimension() const;
238 
244  bool IsHoldingData() const;
245 
251  virtual int Eye();
252 
258  int Rand();
259 
266  virtual int Fill(const T &v);
267 
274  virtual int MoveData( const int &location);
275 
282  virtual int Scale(const T &alpha);
283 
294  virtual int MatVec( char trans, const T &alpha, const VectorClass<T> &x, const T &beta, VectorClass<T> &y);
295 
307  virtual int MatVec( char trans, const T &alpha, const VectorClass<T> &x, const T &beta, const VectorClass<T> &y, VectorClass<T> &z);
308 
321  int MatMat( const T &alpha, const DenseMatrixClass<T> &A, char transa, const DenseMatrixClass<T> &B, char transb, const T &beta);
322 
328  int Invert();
329 
335  int InvertUpperTriangular();
336 
343  int Hess( DenseMatrixClass<T> &Q);
344 
353  int Hess( DenseMatrixClass<T> &Q, int start, int end);
354 
365 
378 
388 
399  int HessSchur( DenseMatrixClass<T> &Q, int start, int end, SequentialVectorClass<T> &w);
400 
411 
423  int Schur( DenseMatrixClass<T> &Q, int start, int end, SequentialVectorClass<T> &wr, SequentialVectorClass<T> &wi);
424 
433 
443  int Schur( DenseMatrixClass<T> &Q, int start, int end, SequentialVectorClass<T> &w);
444 
454 
463 
474 
484 
496 
506 
519 
530 
539  int Plot( int conditiona, int conditionb, int width);
540 
541  };
542 
547  template<> struct PargemslrIsComplex<DenseMatrixClass<complexs> > : public std::true_type {};
548  template<> struct PargemslrIsComplex<DenseMatrixClass<complexd> > : public std::true_type {};
549 
550 }
551 
552 #endif
pargemslr::DenseMatrixClass::MoveData
virtual int MoveData(const int &location)
Move the data to another memory location.
Definition: dense_matrix.cpp:536
pargemslr::DenseMatrixClass::HessSchur
int HessSchur(DenseMatrixClass< T > &Q, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi)
Transform this Hess matrix A into the schur form matrix U = Q^HAQ.
Definition: dense_matrix.cpp:591
pargemslr::DenseMatrixClass::Setup
int Setup(int nrows, int ncols)
Free the current matrix, and malloc memory to create a new matrix on the host.
Definition: dense_matrix.cpp:231
pargemslr::DenseMatrixClass
Class of dense matrix.
Definition: dense_matrix.hpp:23
pargemslr::DenseMatrixClass::operator=
DenseMatrixClass< T > & operator=(const DenseMatrixClass< T > &mat)
The = operator of DenseMatrixClass.
Definition: dense_matrix.cpp:62
pargemslr::DenseMatrixClass::~DenseMatrixClass
virtual ~DenseMatrixClass()
The destructor of DenseMatrixClass.
Definition: dense_matrix.cpp:97
pargemslr::DenseMatrixClass::MatMat
int MatMat(const T &alpha, const DenseMatrixClass< T > &A, char transa, const DenseMatrixClass< T > &B, char transb, const T &beta)
Dense Matrix-Matrix multiplication, C = alpha*transa(A)*transb(B)+beta*C where C is this matrix.
Definition: dense_matrix.cpp:526
pargemslr::DenseMatrixClass::GetNumNonzeros
virtual long int GetNumNonzeros() const
Get the number of nonzeros in this matrix.
Definition: dense_matrix.cpp:201
pargemslr::DenseMatrixClass::Rand
int Rand()
Create an random matrix, real value in between (0, 1), complex value real and imag part in between (0...
Definition: dense_matrix.cpp:437
pargemslr::DenseMatrixClass::OrdSchur
int OrdSchur(DenseMatrixClass< T > &Q, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi, vector_int &select)
Reorder the this real schur decomposition, puch selected eigenvalues to the leading part.
Definition: dense_matrix.cpp:789
pargemslr::DenseMatrixClass::operator()
T & operator()(int row, int col)
Get the reference of a value in the matrix based on the index.
Definition: dense_matrix.cpp:107
pargemslr::DenseMatrixClass::Hess
int Hess(DenseMatrixClass< T > &Q)
Transform this matrix A into hessenberg matrix Q^HAQ = Hess.
Definition: dense_matrix.cpp:569
pargemslr::DenseMatrixClass::Scale
virtual int Scale(const T &alpha)
Scale the current .
Definition: dense_matrix.cpp:404
pargemslr::DenseMatrixClass::MatVec
virtual int MatVec(char trans, const T &alpha, const VectorClass< T > &x, const T &beta, VectorClass< T > &y)
In place dense Matrix-Vector product ==> y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.
Definition: dense_matrix.cpp:494
pargemslr::DenseMatrixClass::GetNumColsLocal
virtual int GetNumColsLocal() const
Get the local number of columns of the matrix.
Definition: dense_matrix.cpp:191
pargemslr::VectorClass
The virtual class of real/complex vector class.
Definition: vector.hpp:126
pargemslr::SequentialVectorClass
The class of sequential real/complex vector.
Definition: structs.hpp:12
pargemslr::DenseMatrixClass::Eye
virtual int Eye()
Create an indentity matrix.
Definition: dense_matrix.cpp:471
pargemslr::DenseMatrixClass::SetupPtr
int SetupPtr(T *data, int nrows, int ncols, int ldim, int location)
Free the current matrix, and point the matrix to data.
Definition: dense_matrix.cpp:293
matrix.hpp
The virtual matrix classes.
pargemslr::DenseMatrixClass::Eig
int Eig(DenseMatrixClass< T > &QS, DenseMatrixClass< T > &QE, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi)
Compute the Schur decomposition of real dense matrix A, U = QS^HAQS, and the Eigen decomposition UQE ...
Definition: dense_matrix.cpp:767
pargemslr::ComplexValueClass
The template class complex.
Definition: complex.hpp:24
pargemslr::IntVectorClass< int >
pargemslr::DenseMatrixClass::Fill
virtual int Fill(const T &v)
Fill the matrix with constant value.
Definition: dense_matrix.cpp:371
pargemslr::DenseMatrixClass::GetLeadingDimension
int GetLeadingDimension() const
Get the leading dimension of the matrix.
Definition: dense_matrix.cpp:211
pargemslr::DenseMatrixClass::GetDataVector
SequentialVectorClass< T > & GetDataVector()
Get the reference to the data vector.
Definition: dense_matrix.cpp:151
pargemslr::DenseMatrixClass::Invert
int Invert()
Invert the matrix.
Definition: dense_matrix.cpp:547
pargemslr::DenseMatrixClass::GetData
T * GetData() const
Get the data pointer of the matrix.
Definition: dense_matrix.cpp:141
pargemslr::MatrixClass
The virtual class of all matrix classes.
Definition: matrix.hpp:23
pargemslr::DenseMatrixClass::Schur
int Schur(DenseMatrixClass< T > &Q, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi)
Transform this matrix A (real) into the schur form matrix U = Q^HAQ.
Definition: dense_matrix.cpp:627
pargemslr::DenseMatrixClass::GetDataLocation
virtual int GetDataLocation() const
Get the data location of the matrix.
Definition: dense_matrix.cpp:171
pargemslr::DenseMatrixClass::HessEig
int HessEig(DenseMatrixClass< T > &Q, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi)
Compute the Eigen decomposition of real dense hessenberg matrix A, AQ = QD. A is this matrix and is n...
Definition: dense_matrix.cpp:751
pargemslr::DenseMatrixClass::InvertUpperTriangular
int InvertUpperTriangular()
Invert the matrix. Only works when current matrix is upper triangular.
Definition: dense_matrix.cpp:558
pargemslr::DenseMatrixClass::Plot
int Plot(int conditiona, int conditionb, int width)
Plot the dense matrix to the terminal output. Function for testing purpose.
Definition: dense_matrix.cpp:821
pargemslr::PargemslrIsComplex
Tell if a value is a complex value.
Definition: complex.hpp:684
pargemslr::DenseMatrixClass::DenseMatrixClass
DenseMatrixClass()
The constructor of DenseMatrixClass.
Definition: dense_matrix.cpp:20
pargemslr::DenseMatrixClass::Clear
virtual int Clear()
Free the current matrix.
Definition: dense_matrix.cpp:122
pargemslr::DenseMatrixClass::GetNumRowsLocal
virtual int GetNumRowsLocal() const
Get the local number of rows of the matrix.
Definition: dense_matrix.cpp:181
pargemslr::DenseMatrixClass::IsHoldingData
bool IsHoldingData() const
Check if the matrix holding its own data.
Definition: dense_matrix.cpp:221
pargemslr::DenseMatrixClass::OrdSchurClusters
int OrdSchurClusters(DenseMatrixClass< T > &Q, SequentialVectorClass< T > &wr, SequentialVectorClass< T > &wi, vector_int &clusters)
Reorder the this real schur decomposition, puch selected eigenvalues to the leading part.
Definition: dense_matrix.cpp:805
pargemslr::DenseMatrixClass::SubMatrix
int SubMatrix(int row_start, int col_start, int num_rows, int num_cols, int location, DenseMatrixClass< T > &mat_out)
Copy data to extract a submatrix of the current matrix.
Definition: dense_matrix.cpp:332