HLIBpro  1.2
Public Member Functions | List of all members
TSparseMatrix Class Reference

Class for a sparse matrix stored in compressed row storage format.

#include <TSparseMatrix.hh>

Inheritance diagram for TSparseMatrix:
TMatrix TLockable TTypeInfo

Public Member Functions

 TSparseMatrix (const size_t anrows, const size_t ancols)
 construct sparse matrix of size anrows × ancols
 TSparseMatrix (const TBlockCluster *bct=NULL)
 construct sparse matrix with size defined by block cluster bct
virtual void set_cluster (const TBlockCluster *bct)
 set block cluster of matrix
virtual void set_size (const size_t nrows, const size_t ncols)
 directly set dimension of matrix
void init (const size_t nnz)
 initialise CRS data for nnz non-zero entries
size_t rows () const
 return number of rows in matrix
size_t cols () const
 return number of columns in matrix
size_t n_non_zero () const
 return number of non-zero elements
virtual void to_real ()
 convert coefficients to real valued representation (if possible)
virtual void to_complex ()
 convert coefficients to complex valued representation
virtual real entry (const idx_t i, const idx_t j) const
 return matrix coefficient a_ij (real valued)
virtual const complex centry (const idx_t i, const idx_t j) const
 return matrix coefficient a_ij (complex valued)
virtual void set_entry (const idx_t i, const idx_t j, const real c)
 set matrix coefficient a_ij if existent (real valued)
virtual void set_entry (const idx_t i, const idx_t j, const complex c)
 set matrix coefficient a_ij if existent (complex valued)
virtual void add_entry (const idx_t i, const idx_t j, const real c)
 add c to matrix coefficient a_ij if existent (real valued)
virtual void add_entry (const idx_t i, const idx_t j, const complex c)
 add c to matrix coefficient a_ij if existent (complex valued)
virtual bool has_entry (const idx_t i, const idx_t j) const
 return true if entry (i, j) exists
void sort_entries ()
 sort matrix coefficients per row with respect to column
void copy_crs (const unsigned int nrows, const unsigned int ncols, const unsigned int nnonzero, const int *rowptr, const int *colind, const real *coeffs)
 copy CRS data into local matrix (real valued)
void copy_ccrs (const unsigned int nrows, const unsigned int ncols, const unsigned int nnonzero, const int *rowptr, const int *colind, const complex *coeffs)
 copy CRS data into local matrix (complex valued)
idx_t rowptr (const idx_t i) const
 return i'th row pointer (constant)
idx_t & rowptr (const idx_t i)
 return i'th row pointer
idx_t colind (const idx_t i) const
 return i'th column index (constant)
idx_t & colind (const idx_t i)
 return i'th column index
real coeff (const idx_t i) const
 return i'th coefficient (real valued, constant)
real & coeff (const idx_t i)
 return i'th coefficient (real valued)
const complex ccoeff (const idx_t i) const
 return i'th coefficient (complex valued, constant)
complex & ccoeff (const idx_t i)
 return i'th coefficient (complex valued)
void permute (const TPermutation &rowperm, const TPermutation &colperm)
bool test_symmetry ()
 return true if matrix is symmetric (really check data)
size_t avg_entries_per_row () const
 compute average number of entries per row
size_t max_entries_per_row () const
 compute maximal number of entries per row
bool has_diag_zero (const real eps=0.0)
 return true if matrix contains zero or elements < ε on diagonal
bool is_diag_dom (const bool weak=false)
 return true if S is (weakly) diagonally dominant
real diag_dom_factor ()
 return factor α, such that S + α·I is diagonally dominant (this = S)
void check_matrix () const
 perform some tests on the matrix (for debugging)
virtual void scale (const real alpha)
 compute this ≔ α·this
virtual void mul_vec (const real alpha, const TVector *x, const real beta, TVector *y, const matop_t op=MATOP_NORM) const
 compute y ≔ β·y + α·op(M)·x, with M = this
virtual void add (const real alpha, const TMatrix *matrix)
 compute this ≔ this + α · matrix
virtual void transpose ()
 transpose matrix
virtual void conjugate ()
 conjugate matrix coefficients
virtual void cscale (const complex alpha)
 compute this ≔ α·this
virtual void cmul_vec (const complex alpha, const TVector *x, const complex beta, TVector *y, const matop_t op=MATOP_NORM) const
 compute y ≔ β·y + α·op(M)·x, with M = this
virtual void cadd (const complex a, const TMatrix *matrix)
 compute this ≔ this + α · matrix
virtual void truncate (const TTruncAcc &)
 truncate matrix to given accuracy (NOT YET IMPLEMENTED)
TSparseMatrix * restrict (const TIndexSet &rowis, const TIndexSet &colis) const
 restrict sparse matrix to block index set rowis × colis
TSparseMatrix * restrict (const TIndexSet &rowis, const TPermutation *rowperm, const TIndexSet &colis, const TPermutation *colperm, TSparseMatrix *S=NULL) const
virtual void print (const uint ofs=0) const
 print matrix to stdout
virtual void read (TByteStream &s)
 read data from stream s and copy to matrix
virtual void build (TByteStream &s)
 use data from stream s to build matrix
virtual void write (TByteStream &s) const
 write data to stream s
virtual size_t bs_size () const
 returns size of object in bytestream
virtual TMatrix * create () const
 return matrix of same class (but no content)
virtual TMatrix * copy () const
 return copy of matrix
virtual void copy_to (TMatrix *A) const
 copy matrix into matrix A
virtual typeid_t type () const
 return type ID of matrix
virtual bool is_type (const typeid_t t) const
 return true if object is of type t
virtual size_t byte_size () const
 return size in bytes used by this object
virtual void check_data () const
 test data for invalid values, e.g. INF and NAN
virtual void print_pattern_hist (std::ostream &os) const
 print histogram for entries per row in GNUPLOT format
- Public Member Functions inherited from TMatrix
 TMatrix (const bool acomplex=false)
 construct zero sized matrix
 TMatrix (const TBlockCluster *c)
 construct matrix of size defined by block cluster c
 TMatrix (const TBlockIndexSet &bis)
 construct matrix of size defined by block cluster c
 TMatrix (const TMatrix &A)
 copy constructor
virtual ~TMatrix ()
 dtor
TIndexSet row_is () const
 return row index set
TIndexSet col_is () const
 return column index set
TBlockIndexSet block_is () const
 return block index set
virtual idx_t row_ofs () const
 return first index (number) in row
virtual idx_t col_ofs () const
 return first index (number) in column
virtual void set_ofs (const idx_t r, const idx_t c)
 set index set offsets
virtual void set_block_is (const TBlockIndexSet &is)
 set block index set of matrix
bool is_nonsym () const
 return true if matrix is unsymmetric
bool is_symmetric () const
 return true if matrix is symmetric
bool is_hermitian () const
 return true if matrix is hermitian
matform_t form () const
 return matrix format
void set_nonsym ()
 set matrix to be unsymmetric
void set_symmetric ()
 set matrix to be symmetric
void set_hermitian ()
 set matrix to be hermitian
virtual void set_form (const matform_t f)
 set matrix format
const TProcSet & procs () const
 return matrix processor set
uint nprocs () const
 return number of processors in local set
void set_procs (const TProcSet &ps)
 set processor set of matrix
virtual void copy_struct (const TMatrix *M)
bool is_real () const
 return true if matrix is real valued
bool is_complex () const
 return true if matrix is complex valued
void set_complex (const bool b, const bool force=false)
const TBlockCluster * cluster () const
 return corresponding block cluster of matrix
virtual TMatrix * mul_right (const real alpha, const TMatrix *B, const matop_t op_A, const matop_t op_B) const
 compute α·op(A)·op(B), with A = this
virtual TMatrix * mul_left (const real alpha, const TMatrix *A, const matop_t op_A, const matop_t op_B) const
 compute α·op(A)·op(B), with B = this
virtual void cscale (const complex alpha)
 compute this ≔ α·this
virtual void cadd (const complex alpha, const TMatrix *matrix)
 compute this ≔ this + α · matrix
virtual void cmul_vec (const complex alpha, const TVector *x, const complex beta, TVector *y, const matop_t op=MATOP_NORM) const
 compute y ≔ β·y + α·op(M)·x, with M = this
virtual TMatrix * cmul_right (const complex alpha, const TMatrix *B, const matop_t op_A, const matop_t op_B) const
 compute α·op(A)·op(B), with A = this
virtual TMatrix * cmul_left (const complex alpha, const TMatrix *A, const matop_t op_A, const matop_t op_B) const
 compute α·op(A)·op(B), with B = this
virtual size_t global_byte_size () const
virtual TMatrix * copy (const TTruncAcc &acc, const bool coarsen=false) const
 return copy of matrix with accuracy acc and optional coarsening
virtual void copy_to (TMatrix *A, const TTruncAcc &acc, const bool coarsen=false) const
 copy matrix into matrix A with accuracy acc and optional coarsening
virtual TVector * row_vector () const
 return appropriate row vector object for matrix
virtual TVector * col_vector () const
 return appropriate column vector object for matrix
virtual void sum (const TProcSet &p, const uint pid, const uint nparts, TByteStream *bs, const TTruncAcc &acc)
- Public Member Functions inherited from TLockable
TMutex & mutex ()
 give access to internal mutex
void lock ()
 lock local mutex of matrix
void unlock ()
 unlock local mutex of matrix
- Public Member Functions inherited from TTypeInfo
virtual String typestr () const
 return string representation of type

Member Function Documentation

void permute ( const TPermutation &  rowperm,
const TPermutation &  colperm 
)

permute entries in sparse matrix according to rowperm (for rows) and colperm (for columns)

TSparseMatrix* restrict ( const TIndexSet &  rowis,
const TPermutation *  rowperm,
const TIndexSet &  colis,
const TPermutation *  colperm,
TSparseMatrix *  S = NULL 
) const

restrict sparse matrix to block index set rowis × colis which is given in a different ordering

  • rowperm permutes the row indices to the local ordering of the sparse matrix, while colperm permutes the local column indices to the ordering of colis
  • the returned matrix has the same ordering as rowis and colis
  • if S ≠ NULL, it is assumed to be of correct size and will, upon return, contain the restricted matrix