HLIBpro 3.1
Loading...
Searching...
No Matches
TDenseMatrix< T_value > Class Template Reference

Represent a dense matrix.

#include <TDenseMatrix.hh>

Inheritance diagram for TDenseMatrix< T_value >:
TMatrix< T_value > TLinearOperator< T_value > TLockable TTypeInfo

Public Member Functions

 TDenseMatrix ()
 construct zero sized matrix
 
 TDenseMatrix (const size_t n, const size_t m)
 construct matrix of size n × m
 
 TDenseMatrix (const TIndexSet &arow_is, const TIndexSet &acol_is)
 construct matrix with size defined by arow_is × acol_is
 
 TDenseMatrix (const TIndexSet &arow_is, const TIndexSet &acol_is, const BLAS::Matrix< value_t > &M)
 
 TDenseMatrix (const TIndexSet &arow_is, const TIndexSet &acol_is, BLAS::Matrix< value_t > &&M)
 
 TDenseMatrix (const TDenseMatrix< value_t > &mat)
 copy constructor
 
 TDenseMatrix (const TBlockCluster *bct)
 construct matrix with size defined by block cluster
 
virtual ~TDenseMatrix ()
 destructor
 
virtual size_t rows () const
 return number of rows
 
virtual size_t cols () const
 return number of columns
 
void set_size (const size_t n, const size_t m)
 set size of matrix to n × m
 
virtual void set_cluster (const TBlockCluster *c)
 set size as defined by block cluster c
 
virtual bool is_dense () const
 return true, if matrix is dense
 
BLAS::Matrix< value_t > & blas_mat ()
 return BLAS matrix
 
const BLAS::Matrix< value_t > & blas_mat () const
 return constant BLAS matrix
 
const TScalarVector< value_t > row (const idx_t i) const
 return row i as vector object
 
const TScalarVector< value_t > column (const idx_t i) const
 return column i as vector object
 
const BLAS::Vector< value_t > blas_row (const idx_t i) const
 return row i as BLAS vector
 
const BLAS::Vector< value_t > blas_col (const idx_t i) const
 return column i as BLAS vector
 
value_t * entry_ptr (const idx_t i, const idx_t j)
 return pointer to data starting at coefficient (i, j)
 
value_t entry (const idx_t i, const idx_t j) const
 return coefficient (i, j)
 
void set_entry (const idx_t i, const idx_t j, const value_t f)
 set coefficient (i, j) to f
 
void add_entry (const idx_t i, const idx_t j, const value_t f)
 add f to coefficient (i, j)
 
virtual void scale (const value_t f)
 compute this ≔ α·this
 
virtual void mul_vec (const value_t alpha, const TVector< value_t > *x, const value_t beta, TVector< value_t > *y, const matop_t op=apply_normal) const
 compute y ≔ α·op(this)·x + β·y
 
virtual void add (const value_t alpha, const TMatrix< value_t > *A)
 compute this = this + α·A without truncation
 
virtual TMatrix< value_t > * mul_right (const value_t alpha, const TMatrix< value_t > *B, const matop_t op_A, const matop_t op_B) const
 compute matrix product α·op_A(this)·op_B(B)
 
virtual TMatrix< value_t > * mul_left (const value_t alpha, const TMatrix< value_t > *A, const matop_t op_A, const matop_t op_B) const
 compute matrix product α·op_A(A)·op_B(this)
 
void add_block (const value_t alpha, const value_t beta, const TDenseMatrix< value_t > *M, const matop_t op=apply_normal)
 compute α·this + β·op(M), where op(M) is subblock of this or this a subblock of op(M))
 
virtual void apply_add (const value_t alpha, const BLAS::Vector< value_t > &x, BLAS::Vector< value_t > &y, const matop_t op=apply_normal) const
 
virtual void transpose ()
 transpose matrix
 
virtual void conjugate ()
 conjugate matrix coefficients
 
virtual void truncate (const TTruncAcc &)
 truncate matrix to given accuracy: nothing to be done
 
TDenseMatrix< value_t > & operator= (const TDenseMatrix< value_t > &mat)
 copy operator
 
virtual auto create () const -> std::unique_ptr< TMatrix< value_t > >
 return matrix object of same class as this
 
virtual auto copy () const -> std::unique_ptr< TMatrix< value_t > >
 return copy of matrix
 
virtual auto copy_struct () const -> std::unique_ptr< TMatrix< value_t > >
 return structural copy of matrix
 
virtual void copy_to (TMatrix< value_t > *A) const
 copy matrix into A
 
void permute (const TPermutation *row_perm, const TPermutation *col_perm)
 
virtual size_t byte_size () const
 return size in bytes used by this object
 
virtual void read (TByteStream &s)
 read matrix from byte stream
 
virtual void build (TByteStream &s)
 construct matrix based on data in byte stream
 
virtual void write (TByteStream &s) const
 write matrix to byte stream
 
virtual size_t bs_size () const
 returns size of object in bytestream
 
virtual void check_data () const
 test data for invalid values, e.g. INF and NAN
 
- Public Member Functions inherited from TMatrix< T_value >
 TMatrix ()
 construct zero sized matrix
 
 TMatrix (const TBlockCluster *bcl)
 construct matrix of size defined by block cluster bcl
 
 TMatrix (const TBlockIndexSet &bis)
 construct matrix of size defined by block index set bis
 
 TMatrix (const TMatrix< value_t > &A)
 copy constructor
 
virtual ~TMatrix ()
 dtor
 
int id () const
 return ID
 
void set_id (const int aid)
 set ID
 
virtual size_t nrows (const matop_t op) const
 return number of rows of op(M)
 
virtual size_t ncols (const matop_t op) const
 return number of columns of op(M)
 
TIndexSet row_is () const
 return row index set
 
TIndexSet col_is () const
 return column index set
 
TBlockIndexSet block_is () const
 return block index set
 
TIndexSet row_is (const matop_t op) const
 return row index set w.r.t. given matrix operation
 
TIndexSet col_is (const matop_t op) const
 return row index set w.r.t. given matrix operation
 
TBlockIndexSet block_is (const matop_t op) const
 return row index set w.r.t. given matrix operation
 
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
 
virtual bool is_zero () const
 return true, if matrix is zero
 
virtual bool is_blocked () const
 return true, if matrix is blocked
 
virtual bool is_self_adjoint () const
 return true, if operator is self adjoint
 
const TProcSetprocs () const
 return matrix processor set
 
uint nprocs () const
 return number of processors in local set
 
virtual void set_procs (const TProcSet &ps, const recursion_type_t rec_type=nonrecursive)
 set processor set of matrix
 
bool is_distributed () const
 return true if matrix is distributed
 
template<typename T_value_M >
void copy_struct_from_all (const TMatrix< T_value_M > *M)
 
TUpdateAccumulator< value_t > & accumulator ()
 access accumulator object
 
void add_update (const TMatrix< value_t > *M, const TTruncAcc &acc)
 add update matrix
 
void add_pending_direct (TDirectMatrixUpdate< value_t > *U)
 add update U to set of recursive pending updates
 
void add_pending_recursive (TRecursiveMatrixUpdate< value_t > *U)
 add update U to set of recursive pending updates
 
virtual void apply_updates (const TTruncAcc &acc, const recursion_type_t rec_type)
 
virtual bool has_updates (const recursion_type_t recursion) const
 return true, if matrix has updates not yet applied
 
virtual bool has_parent_updates (const recursion_type_t recursion) const
 return true, if parent matrix has updates not yet applied
 
const TBlockClustercluster () const
 return corresponding block cluster of matrix
 
virtual void set_cluster_force (const TBlockCluster *c)
 set block cluster of matrix (with forced setting of cluster variable)
 
virtual void apply (const TVector< value_t > *x, TVector< value_t > *y, const matop_t op=apply_normal) const
 
virtual void apply_add (const value_t alpha, const TVector< value_t > *x, TVector< value_t > *y, const matop_t op=apply_normal) const
 
virtual size_t domain_dim () const
 return dimension of domain
 
virtual size_t range_dim () const
 return dimension of range
 
virtual auto domain_vector () const -> std::unique_ptr< TVector< value_t > >
 return vector in domain space
 
virtual auto range_vector () const -> std::unique_ptr< TVector< value_t > >
 return vector in range space
 
virtual size_t global_byte_size () const
 
virtual auto copy (const TTruncAcc &acc, const bool coarsen=false) const -> std::unique_ptr< TMatrix< value_t > >
 return copy of matrix with accuracy acc and optional coarsening
 
virtual void copy_from (const TMatrix< value_t > *A)
 copy data from matrix A
 
virtual void copy_to (TMatrix< value_t > *A, const TTruncAcc &acc, const bool coarsen=false) const
 copy matrix into matrix A with accuracy acc and optional coarsening
 
virtual auto row_vector () const -> std::unique_ptr< TVector< value_t > >
 return appropriate row vector object for matrix
 
virtual auto col_vector () const -> std::unique_ptr< TVector< value_t > >
 return appropriate column vector object for matrix
 
virtual void sum (const TProcSet &p, const uint pid, const uint nparts, TByteStream *bs, const TTruncAcc &acc)
 
virtual void print (const uint ofs=0) const
 print basic info about matrix to stdout
 
- Public Member Functions inherited from TLinearOperator< T_value >
virtual bool is_complex () const
 return true, if field type is complex valued
 
virtual bool is_real () const
 return true, if field type is real valued
 
- Public Member Functions inherited from TTypeInfo
virtual typeid_t type () const =0
 return type ID of object
 
virtual bool is_type (const typeid_t t) const
 return true if local object is of given type ID t
 
virtual std::string typestr () const
 return string representation of type
 
- Public Member Functions inherited from TLockable
TMutexmutex ()
 give access to internal mutex
 
void lock ()
 lock local mutex
 
void unlock ()
 unlock local mutex
 
size_t byte_size () const
 return size in bytes used by this object
 

Constructor & Destructor Documentation

◆ TDenseMatrix() [1/2]

template<typename T_value >
TDenseMatrix ( const TIndexSet arow_is,
const TIndexSet acol_is,
const BLAS::Matrix< value_t > &  M 
)
inline

construct matrix with size defined by arow_is × acol_is and data given by M

◆ TDenseMatrix() [2/2]

template<typename T_value >
TDenseMatrix ( const TIndexSet arow_is,
const TIndexSet acol_is,
BLAS::Matrix< value_t > &&  M 
)
inline

construct matrix with size defined by arow_is × acol_is and move data from M

Member Function Documentation

◆ apply_add()

template<typename T_value >
virtual void apply_add ( const value_t  alpha,
const BLAS::Vector< value_t > &  x,
BLAS::Vector< value_t > &  y,
const matop_t  op = apply_normal 
) const
virtual

same as above but only the dimension of the vector spaces is tested, not the corresponding index sets

Reimplemented from TMatrix< T_value >.

◆ permute()

template<typename T_value >
void permute ( const TPermutation row_perm,
const TPermutation col_perm 
)

permute rows/columns in matrix according to row_pern and col_perm

  • nullptr is treated as identity