dune-istl  2.4.1
Public Types | Public Member Functions | Protected Attributes | Friends | List of all members
Dune::Matrix< T, A > Class Template Reference

A generic dynamic dense matrix. More...

#include <dune/istl/matrix.hh>

Public Types

enum  { blocklevel = T::blocklevel+1 }
 
typedef T::field_type field_type
 Export the type representing the underlying field. More...
 
typedef T block_type
 Export the type representing the components. More...
 
typedef A allocator_type
 Export the allocator. More...
 
typedef VariableBlockVector< T, A >::window_type row_type
 The type implementing a matrix row. More...
 
typedef A::size_type size_type
 Type for indices and sizes. More...
 
typedef VariableBlockVector< T, A >::Iterator RowIterator
 Iterator over the matrix rows. More...
 
typedef row_type::iterator ColIterator
 Iterator for the entries of each row. More...
 
typedef VariableBlockVector< T, A >::ConstIterator ConstRowIterator
 Const iterator over the matrix rows. More...
 
typedef row_type::const_iterator ConstColIterator
 Const iterator for the entries of each row. More...
 

Public Member Functions

 Matrix ()
 Create empty matrix. More...
 
 Matrix (size_type rows, size_type cols)
 Create uninitialized matrix of size rows x cols. More...
 
void setSize (size_type rows, size_type cols)
 Change the matrix size. More...
 
RowIterator begin ()
 Get iterator to first row. More...
 
RowIterator end ()
 Get iterator to one beyond last row. More...
 
RowIterator beforeEnd ()
 
RowIterator beforeBegin ()
 
ConstRowIterator begin () const
 Get const iterator to first row. More...
 
ConstRowIterator end () const
 Get const iterator to one beyond last row. More...
 
ConstRowIterator beforeEnd () const
 
ConstRowIterator beforeBegin () const
 
Matrixoperator= (const field_type &t)
 Assignment from scalar. More...
 
row_typeoperator[] (size_type row)
 The index operator. More...
 
const row_typeoperator[] (size_type row) const
 The const index operator. More...
 
size_type N () const
 Return the number of rows. More...
 
size_type M () const
 Return the number of columns. More...
 
size_type rowdim () const
 The number of scalar rows. More...
 
size_type coldim () const
 The number of scalar columns. More...
 
size_type rowdim (size_type r) const
 The number of scalar rows. More...
 
size_type coldim (size_type c) const
 The number of scalar columns. More...
 
Matrix< T > & operator*= (const field_type &scalar)
 Multiplication with a scalar. More...
 
Matrix< T > & operator/= (const field_type &scalar)
 Multiplication with a scalar. More...
 
Matrixoperator+= (const Matrix &b)
 Add the entries of another matrix to this one. More...
 
Matrixoperator-= (const Matrix &b)
 Subtract the entries of another matrix from this one. More...
 
Matrix transpose () const
 Return the transpose of the matrix. More...
 
template<class X , class Y >
void mv (const X &x, Y &y) const
 y = A x More...
 
template<class X , class Y >
void mtv (const X &x, Y &y) const
 y = A^T x More...
 
template<class X , class Y >
void umv (const X &x, Y &y) const
 y += A x More...
 
template<class X , class Y >
void mmv (const X &x, Y &y) const
 y -= A x More...
 
template<class X , class Y >
void usmv (const field_type &alpha, const X &x, Y &y) const
 $ y += \alpha A x $ More...
 
template<class X , class Y >
void umtv (const X &x, Y &y) const
 y += A^T x More...
 
template<class X , class Y >
void mmtv (const X &x, Y &y) const
 y -= A^T x More...
 
template<class X , class Y >
void usmtv (const field_type &alpha, const X &x, Y &y) const
 y += alpha A^T x More...
 
template<class X , class Y >
void umhv (const X &x, Y &y) const
 y += A^H x More...
 
template<class X , class Y >
void mmhv (const X &x, Y &y) const
 y -= A^H x More...
 
template<class X , class Y >
void usmhv (const field_type &alpha, const X &x, Y &y) const
 y += alpha A^H x More...
 
FieldTraits< field_type >::real_type frobenius_norm () const
 frobenius norm: sqrt(sum over squared values of entries) More...
 
FieldTraits< field_type >::real_type frobenius_norm2 () const
 square of frobenius norm, need for block recursion More...
 
FieldTraits< field_type >::real_type infinity_norm () const
 infinity norm (row sum norm, how to generalize for blocks?) More...
 
FieldTraits< field_type >::real_type infinity_norm_real () const
 simplified infinity norm (uses Manhattan norm for complex values) More...
 
bool exists (size_type i, size_type j) const
 return true if (i,j) is in pattern More...
 

Protected Attributes

VariableBlockVector< T, A > data_
 Abuse VariableBlockVector as an engine for a 2d array ISTL-style. More...
 
size_type cols_
 Number of columns of the matrix. More...
 

Friends

Matrix< T > operator* (const Matrix< T > &m1, const Matrix< T > &m2)
 Generic matrix multiplication. More...
 
template<class X , class Y >
operator* (const Matrix< T > &m, const X &vec)
 Generic matrix-vector multiplication. More...
 

Detailed Description

template<class T, class A = std::allocator<T>>
class Dune::Matrix< T, A >

A generic dynamic dense matrix.

Member Typedef Documentation

template<class T, class A = std::allocator<T>>
typedef A Dune::Matrix< T, A >::allocator_type

Export the allocator.

template<class T, class A = std::allocator<T>>
typedef T Dune::Matrix< T, A >::block_type

Export the type representing the components.

template<class T, class A = std::allocator<T>>
typedef row_type::iterator Dune::Matrix< T, A >::ColIterator

Iterator for the entries of each row.

template<class T, class A = std::allocator<T>>
typedef row_type::const_iterator Dune::Matrix< T, A >::ConstColIterator

Const iterator for the entries of each row.

template<class T, class A = std::allocator<T>>
typedef VariableBlockVector<T,A>::ConstIterator Dune::Matrix< T, A >::ConstRowIterator

Const iterator over the matrix rows.

template<class T, class A = std::allocator<T>>
typedef T::field_type Dune::Matrix< T, A >::field_type

Export the type representing the underlying field.

template<class T, class A = std::allocator<T>>
typedef VariableBlockVector<T,A>::window_type Dune::Matrix< T, A >::row_type

The type implementing a matrix row.

template<class T, class A = std::allocator<T>>
typedef VariableBlockVector<T,A>::Iterator Dune::Matrix< T, A >::RowIterator

Iterator over the matrix rows.

template<class T, class A = std::allocator<T>>
typedef A::size_type Dune::Matrix< T, A >::size_type

Type for indices and sizes.

Member Enumeration Documentation

template<class T, class A = std::allocator<T>>
anonymous enum
Enumerator
blocklevel 

The number of nesting levels the matrix contains.

Constructor & Destructor Documentation

template<class T, class A = std::allocator<T>>
Dune::Matrix< T, A >::Matrix ( )
inline

Create empty matrix.

template<class T, class A = std::allocator<T>>
Dune::Matrix< T, A >::Matrix ( size_type  rows,
size_type  cols 
)
inline

Create uninitialized matrix of size rows x cols.

Member Function Documentation

template<class T, class A = std::allocator<T>>
RowIterator Dune::Matrix< T, A >::beforeBegin ( )
inline
Returns
an iterator that is positioned before the first row of the matrix.

References Dune::VariableBlockVector< B, A >::beforeBegin(), and Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
ConstRowIterator Dune::Matrix< T, A >::beforeBegin ( ) const
inline
Returns
an iterator that is positioned before the first row if the matrix.

References Dune::VariableBlockVector< B, A >::beforeBegin(), and Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
RowIterator Dune::Matrix< T, A >::beforeEnd ( )
inline
Returns
an iterator that is positioned before the end iterator of the rows, i.e. at the last row.

References Dune::VariableBlockVector< B, A >::beforeEnd(), and Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
ConstRowIterator Dune::Matrix< T, A >::beforeEnd ( ) const
inline
Returns
an iterator that is positioned before the end iterator of the rows. i.e. at the last row.

References Dune::VariableBlockVector< B, A >::beforeEnd(), and Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
RowIterator Dune::Matrix< T, A >::begin ( )
inline
template<class T, class A = std::allocator<T>>
ConstRowIterator Dune::Matrix< T, A >::begin ( ) const
inline

Get const iterator to first row.

References Dune::VariableBlockVector< B, A >::begin(), and Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::coldim ( ) const
inline
template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::coldim ( size_type  c) const
inline

The number of scalar columns.

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
RowIterator Dune::Matrix< T, A >::end ( )
inline
template<class T, class A = std::allocator<T>>
ConstRowIterator Dune::Matrix< T, A >::end ( ) const
inline

Get const iterator to one beyond last row.

References Dune::Matrix< T, A >::data_, and Dune::VariableBlockVector< B, A >::end().

template<class T, class A = std::allocator<T>>
bool Dune::Matrix< T, A >::exists ( size_type  i,
size_type  j 
) const
inline

return true if (i,j) is in pattern

References Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
FieldTraits<field_type>::real_type Dune::Matrix< T, A >::frobenius_norm ( ) const
inline

frobenius norm: sqrt(sum over squared values of entries)

References Dune::Matrix< T, A >::frobenius_norm2().

template<class T, class A = std::allocator<T>>
FieldTraits<field_type>::real_type Dune::Matrix< T, A >::frobenius_norm2 ( ) const
inline

square of frobenius norm, need for block recursion

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

Referenced by Dune::Matrix< T, A >::frobenius_norm().

template<class T, class A = std::allocator<T>>
FieldTraits<field_type>::real_type Dune::Matrix< T, A >::infinity_norm ( ) const
inline

infinity norm (row sum norm, how to generalize for blocks?)

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
FieldTraits<field_type>::real_type Dune::Matrix< T, A >::infinity_norm_real ( ) const
inline

simplified infinity norm (uses Manhattan norm for complex values)

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::M ( ) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::mmhv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::mmtv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::mmv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::mtv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::mv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::N ( ) const
inline
template<class T, class A = std::allocator<T>>
Matrix<T>& Dune::Matrix< T, A >::operator*= ( const field_type scalar)
inline

Multiplication with a scalar.

References Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
Matrix& Dune::Matrix< T, A >::operator+= ( const Matrix< T, A > &  b)
inline

Add the entries of another matrix to this one.

Parameters
bThe matrix to add to this one. Its size has to be the same as the size of this matrix.

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
Matrix& Dune::Matrix< T, A >::operator-= ( const Matrix< T, A > &  b)
inline

Subtract the entries of another matrix from this one.

Parameters
bThe matrix to add to this one. Its size has to be the same as the size of this matrix.

References Dune::Matrix< T, A >::data_, Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
Matrix<T>& Dune::Matrix< T, A >::operator/= ( const field_type scalar)
inline

Multiplication with a scalar.

References Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
Matrix& Dune::Matrix< T, A >::operator= ( const field_type t)
inline

Assignment from scalar.

References Dune::Matrix< T, A >::data_.

template<class T, class A = std::allocator<T>>
row_type& Dune::Matrix< T, A >::operator[] ( size_type  row)
inline

The index operator.

References Dune::Matrix< T, A >::data_, and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
const row_type& Dune::Matrix< T, A >::operator[] ( size_type  row) const
inline

The const index operator.

References Dune::Matrix< T, A >::data_, and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::rowdim ( ) const
inline
template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::rowdim ( size_type  r) const
inline
template<class T, class A = std::allocator<T>>
void Dune::Matrix< T, A >::setSize ( size_type  rows,
size_type  cols 
)
inline

Change the matrix size.

The way the data is handled is unpredictable.

References Dune::Matrix< T, A >::cols_, Dune::Matrix< T, A >::data_, and Dune::VariableBlockVector< B, A >::resize().

template<class T, class A = std::allocator<T>>
Matrix Dune::Matrix< T, A >::transpose ( ) const
inline

Return the transpose of the matrix.

References Dune::Matrix< T, A >::M(), and Dune::Matrix< T, A >::N().

template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::umhv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::umtv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::umv ( const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::usmhv ( const field_type alpha,
const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::usmtv ( const field_type alpha,
const X &  x,
Y &  y 
) const
inline
template<class T, class A = std::allocator<T>>
template<class X , class Y >
void Dune::Matrix< T, A >::usmv ( const field_type alpha,
const X &  x,
Y &  y 
) const
inline

Friends And Related Function Documentation

template<class T, class A = std::allocator<T>>
Matrix<T> operator* ( const Matrix< T > &  m1,
const Matrix< T > &  m2 
)
friend

Generic matrix multiplication.

template<class T, class A = std::allocator<T>>
template<class X , class Y >
Y operator* ( const Matrix< T > &  m,
const X &  vec 
)
friend

Generic matrix-vector multiplication.

Member Data Documentation

template<class T, class A = std::allocator<T>>
size_type Dune::Matrix< T, A >::cols_
protected

Number of columns of the matrix.

In general you can extract the same information from the data_ member. However if you want to be able to properly handle 0xn matrices then you need a separate member.

Referenced by Dune::Matrix< T, A >::M(), Dune::Matrix< T, A >::mv(), Dune::Matrix< T, A >::setSize(), Dune::Matrix< T, A >::umv(), and Dune::Matrix< T, A >::usmv().

template<class T, class A = std::allocator<T>>
VariableBlockVector<T,A> Dune::Matrix< T, A >::data_
protected

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