HermesCommon  3.0
Hermes::Algebra::SparseMatrix< Scalar > Class Template Referenceabstract

General (abstract) sparse matrix representation in Hermes. More...

#include <matrix.h>

+ Inheritance diagram for Hermes::Algebra::SparseMatrix< Scalar >:

Classes

struct  Page
 Structure for storing indices in sparse matrix. More...
 

Public Member Functions

 SparseMatrix (unsigned int size)
 
virtual void prealloc (unsigned int n)
 
virtual void free ()
 free the memory associated with stiffness matrix
 
virtual void pre_add_ij (unsigned int row, unsigned int col)
 
virtual void finish ()
 Finish manipulation with matrix (called before solving)
 
virtual void add_sparse_matrix (SparseMatrix< Scalar > *mat)
 
virtual void add_sparse_to_diagonal_blocks (int num_stages, SparseMatrix< Scalar > *mat)
 
virtual void add_as_block (unsigned int i, unsigned int j, SparseMatrix< Scalar > *mat)
 
virtual int get_num_row_entries (unsigned int row) const
 
virtual void extract_row_copy (unsigned int row, unsigned int len, unsigned int &n_entries, double *vals, unsigned int *idxs) const
 
virtual int get_num_col_entries (unsigned int col) const
 
virtual void extract_col_copy (unsigned int col, unsigned int len, unsigned int &n_entries, double *vals, unsigned int *idxs) const
 
virtual SparseMatrix< Scalar > * duplicate () const
 Duplicate sparse matrix (including allocation).
 
virtual double get_fill_in () const =0
 Get fill-in.
 
virtual unsigned int get_nnz () const
 
- Public Member Functions inherited from Hermes::Algebra::Matrix< Scalar >
 Matrix (unsigned int size=0)
 
virtual void alloc ()=0
 allocate the memory for stiffness matrix
 
virtual Scalar get (unsigned int m, unsigned int n) const =0
 
virtual void zero ()=0
 Zero the matrix.
 
virtual void set_row_zero (unsigned int n)
 
virtual void add (unsigned int m, unsigned int n, Scalar v)=0
 
virtual void add (unsigned int m, unsigned int n, Scalar *mat, int *rows, int *cols, const int size)
 
virtual void add_to_diagonal (Scalar v)
 Add a number to each diagonal entry.
 
virtual void multiply_with_vector (Scalar *vector_in, Scalar *&vector_out, bool vector_out_initialized=false) const
 Multiply with a vector.
 
virtual void multiply_with_Scalar (Scalar value)
 Multiply with a Scalar.
 
virtual unsigned int get_size () const
 
template<>
void add (unsigned int m, unsigned int n, double *mat, int *rows, int *cols, const int size)
 
template<>
void add (unsigned int m, unsigned int n, std::complex< double > *mat, int *rows, int *cols, const int size)
 
- Public Member Functions inherited from Hermes::Mixins::Loggable
 Loggable (bool verbose_output=false, callbackFn verbose_callback=NULL, bool add_newline=true)
 
void set_file_output_only (bool onOff)
 
void set_timestamps (bool onOff)
 Sets the addition of a time stamp on each line in the log file. By default it is on.
 
void set_erase_on_beginning (bool onOff)
 Sets the logFile being always erased before logging.
 
void set_logFile_name (const char *filename)
 
void set_logFile_name (std::string filename)
 
void info (const char *msg,...) const
 
void info_if (bool cond, const char *msg,...) const
 
void warn (const char *msg,...) const
 
void warn_if (bool cond, const char *msg,...) const
 
void error (const char *msg,...) const
 
void error_if (bool cond, const char *msg,...) const
 
virtual void set_verbose_output (bool to_set)
 
bool get_verbose_output () const
 Returns the current value of verbose_output;.
 
virtual void set_verbose_callback (callbackFn callback)
 
callbackFn get_verbose_callback () const
 Returns the current value of verbose_callback;.
 
- Public Member Functions inherited from Hermes::Algebra::Mixins::MatrixRhsImportExport< Scalar >
virtual void export_to_file (const char *filename, const char *var_name, Algebra::MatrixExportFormat fmt, char *number_format="%lf")=0
 
void export_to_file (std::string filename, const char *var_name, Algebra::MatrixExportFormat fmt, char *number_format="%lf")
 
void export_to_file (std::string filename, std::string var_name, Algebra::MatrixExportFormat fmt, char *number_format="%lf")
 
virtual void import_from_file (const char *filename, const char *var_name, Algebra::MatrixExportFormat fmt)
 
void import_from_file (std::string filename, const char *var_name, Algebra::MatrixExportFormat fmt)
 
void import_from_file (std::string filename, std::string var_name, Algebra::MatrixExportFormat fmt)
 

Protected Member Functions

int sort_and_store_indices (Page *page, int *buffer, int *max)
 
int get_num_indices ()
 
- Protected Member Functions inherited from Hermes::Mixins::Loggable
void hermes_fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream) const
 
void hermes_fread (void *ptr, size_t size, size_t nitems, FILE *stream) const
 

Protected Attributes

Pagepages
 array of pages with indices array. Each field of arra contains pages for one column
 
Page ** next_pages
 
- Protected Attributes inherited from Hermes::Algebra::Matrix< Scalar >
unsigned int size
 matrix size
 

Static Protected Attributes

static const int PAGE_SIZE = 100
 

Additional Inherited Members

- Static Public Member Functions inherited from Hermes::Mixins::Loggable
static void set_static_logFile_name (const char *filename)
 
static void set_static_logFile_name (std::string filename)
 
- Public Attributes inherited from Hermes::Mixins::Loggable
char * logFileName
 Logfile name.
 
- Static Public Attributes inherited from Hermes::Mixins::Loggable
static char * staticLogFileName = nullptr
 

Detailed Description

template<typename Scalar>
class Hermes::Algebra::SparseMatrix< Scalar >

General (abstract) sparse matrix representation in Hermes.

Definition at line 34 of file algebra_mixins.h.

Constructor & Destructor Documentation

template<typename Scalar >
Hermes::Algebra::SparseMatrix< Scalar >::SparseMatrix ( unsigned int  size)

Constructor of sparse matrix

Parameters
[in]sizesize of matrix

Definition at line 129 of file matrix.cpp.

Member Function Documentation

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::add_as_block ( unsigned int  i,
unsigned int  j,
SparseMatrix< Scalar > *  mat 
)
virtual

Add matrix to specific position.

Parameters
[in]irow in target matrix coresponding with top row of added matrix
[in]jcolumn in target matrix coresponding with lef column of added matrix
[in]matadded matrix

Reimplemented in Hermes::Algebra::CSMatrix< Scalar >.

Definition at line 207 of file matrix.cpp.

Referenced by Hermes::Algebra::CSMatrix< Scalar >::add_as_block().

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::add_sparse_matrix ( SparseMatrix< Scalar > *  mat)
virtual

Add matrix

Parameters
matmatrix to add

Reimplemented in Hermes::Algebra::EpetraMatrix< Scalar >.

Definition at line 190 of file matrix.cpp.

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::add_sparse_to_diagonal_blocks ( int  num_stages,
SparseMatrix< Scalar > *  mat 
)
virtual

Add matrix to diagonal Matrices must be the same type of solver

Parameters
[in]num_stagesmatrix is added to num_stages positions. num_stages * size(added matrix) = size(target matrix)
[in]matadded matrix

Definition at line 196 of file matrix.cpp.

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::extract_col_copy ( unsigned int  col,
unsigned int  len,
unsigned int &  n_entries,
double *  vals,
unsigned int *  idxs 
) const
virtual

Extract the copy of a column

Parameters
[in]col- global column to extract
[in]len- length of 'vals' and 'idxs' arrays.
[out]n_entries- number of nonzero entries extracted.
[out]vals- extracted values for this column.
[out]idxs- extracted global row indices for the corresponding values.

Definition at line 183 of file matrix.cpp.

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::extract_row_copy ( unsigned int  row,
unsigned int  len,
unsigned int &  n_entries,
double *  vals,
unsigned int *  idxs 
) const
virtual

Extract the copy of a row

Parameters
[in]row- global row to extract
[in]len- length of 'vals' and 'idxs' arrays.
[out]n_entries- number of nonzero entries extracted.
[out]vals- extracted values for this row.
[out]idxs- extracted global column indices for the corresponding values.

Definition at line 170 of file matrix.cpp.

template<typename Scalar >
unsigned int Hermes::Algebra::SparseMatrix< Scalar >::get_nnz ( ) const
virtual

get number of nonzero numbers in matrix

Returns
number of nonzero numbers in matrix

Reimplemented in Hermes::Algebra::CSMatrix< Scalar >, and Hermes::Algebra::EpetraMatrix< Scalar >.

Definition at line 228 of file matrix.cpp.

template<typename Scalar >
int Hermes::Algebra::SparseMatrix< Scalar >::get_num_col_entries ( unsigned int  col) const
virtual

Return the number of entries in a specified column

Parameters
[in]col- index of the column
Returns
- the number of entries in the column 'col'

Definition at line 177 of file matrix.cpp.

template<typename Scalar >
int Hermes::Algebra::SparseMatrix< Scalar >::get_num_indices ( )
protected

get number of indices in all pages

Returns
number of indices

Definition at line 287 of file matrix.cpp.

template<typename Scalar >
int Hermes::Algebra::SparseMatrix< Scalar >::get_num_row_entries ( unsigned int  row) const
virtual

Return the number of entries in a specified row

Parameters
[in]row- index of the row
Returns
- the number of entries in the row 'row'

Definition at line 164 of file matrix.cpp.

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::pre_add_ij ( unsigned int  row,
unsigned int  col 
)
virtual

add indices of nonzero matrix element

Parameters
[in]row- row index
[in]col- column index

Reimplemented in Hermes::Algebra::CSRMatrix< Scalar >, and Hermes::Algebra::EpetraMatrix< Scalar >.

Definition at line 242 of file matrix.cpp.

template<typename Scalar >
void Hermes::Algebra::SparseMatrix< Scalar >::prealloc ( unsigned int  n)
virtual

prepare memory

Parameters
[in]n- number of unknowns

Reimplemented in Hermes::Algebra::EpetraMatrix< Scalar >.

Definition at line 235 of file matrix.cpp.

template<typename Scalar >
int Hermes::Algebra::SparseMatrix< Scalar >::sort_and_store_indices ( Page page,
int *  buffer,
int *  max 
)
protected

gather all pages in the buffer, delete them, sort buffer and remove duplicities

Parameters
[in]pagefirst page with indices
[out]bufferbuffer to which indices will be copied
[in]maxmaximum indices to be stored (probably)
Todo:
max parameter does nothing (not implemented)
Returns
number of indices

Definition at line 262 of file matrix.cpp.

Member Data Documentation

template<typename Scalar>
const int Hermes::Algebra::SparseMatrix< Scalar >::PAGE_SIZE = 100
staticprotected

Size of page (max number of indices stored in one page). DO NOT CHANGE, otherwise the data types in Page struct needs to be revisited.

Definition at line 188 of file matrix.h.


The documentation for this class was generated from the following files: