1#ifndef DUNE_COMMON_IDENTITYMATRIX_HH
2#define DUNE_COMMON_IDENTITYMATRIX_HH
34 template<
class K,
int N >
48 template<
class X,
class Y >
49 void mv (
const X &x, Y &y )
const
55 template<
class X,
class Y >
56 void mtv (
const X &x, Y &y )
const
62 template<
class X,
class Y >
63 void umv (
const X &x, Y &y )
const
69 template<
class X,
class Y >
70 void umtv (
const X &x, Y &y )
const
76 template<
class X,
class Y >
77 void umhv (
const X &x, Y &y )
const
83 template<
class X,
class Y >
84 void mmv (
const X &x, Y &y )
const
90 template<
class X,
class Y >
91 void mmtv (
const X &x, Y &y )
const
97 template<
class X,
class Y >
98 void mmhv (
const X &x, Y &y )
const
104 template<
class X,
class Y >
106 const X& x, Y& y)
const
112 template<
class X,
class Y >
114 const X& x, Y& y)
const
120 template<
class X,
class Y >
122 const X& x, Y& y)
const
152 template <
class DenseMatrix,
class field,
int N>
157 denseMatrix = field(0);
158 for (
int i = 0; i < N; ++i)
159 denseMatrix[i][i] = field(1);
#define DUNE_ASSERT_BOUNDS(cond)
Definition boundschecking.hh:20
Implements a matrix constructed from a given type representing a field and compile-time given number ...
Some useful basic math stuff.
Type traits to determine the type of reals (when working with complex numbers)
Dune namespace.
Definition alignment.hh:11
A dense n x m matrix.
Definition densematrix.hh:135
size_type M() const
number of columns
Definition densematrix.hh:658
size_type N() const
number of rows
Definition densematrix.hh:652
you have to specialize this structure for any type that should be assignable to a DenseMatrix
Definition densematrix.hh:73
T field_type
export the type representing the field
Definition ftraits.hh:26
T real_type
export the type representing the real type of the field
Definition ftraits.hh:28
Read-only identity matrix.
Definition identitymatrix.hh:36
FieldTraits< field_type >::real_type frobenius_norm() const
frobenius norm: sqrt(sum over squared values of entries)
Definition identitymatrix.hh:128
void mtv(const X &x, Y &y) const
y = A^T x
Definition identitymatrix.hh:56
std::size_t size_type
size type
Definition identitymatrix.hh:40
void mmhv(const X &x, Y &y) const
y -= A^H x
Definition identitymatrix.hh:98
FieldTraits< field_type >::real_type infinity_norm_real() const
simplified infinity norm (uses Manhattan norm for complex values)
Definition identitymatrix.hh:146
void mmtv(const X &x, Y &y) const
y -= A^T x
Definition identitymatrix.hh:91
void usmtv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
y += alpha A^T x
Definition identitymatrix.hh:113
void usmhv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
y += alpha A^H x
Definition identitymatrix.hh:121
void mv(const X &x, Y &y) const
y = A x
Definition identitymatrix.hh:49
constexpr size_type rows() const
return number of rows
Definition identitymatrix.hh:43
constexpr size_type cols() const
return number of columns
Definition identitymatrix.hh:45
K field_type
field type
Definition identitymatrix.hh:38
void mmv(const X &x, Y &y) const
y -= A x
Definition identitymatrix.hh:84
FieldTraits< field_type >::real_type frobenius_norm2() const
square of frobenius norm, need for block recursion
Definition identitymatrix.hh:134
FieldTraits< field_type >::real_type infinity_norm() const
infinity norm (row sum norm, how to generalize for blocks?)
Definition identitymatrix.hh:140
void umv(const X &x, Y &y) const
y += A x
Definition identitymatrix.hh:63
void usmv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
y += alpha A x
Definition identitymatrix.hh:105
void umhv(const X &x, Y &y) const
y += A^H x
Definition identitymatrix.hh:77
void umtv(const X &x, Y &y) const
y += A^T x
Definition identitymatrix.hh:70
static void apply(DenseMatrix &denseMatrix, IdentityMatrix< field, N > const &rhs)
Definition identitymatrix.hh:154