dune-common 3.0-git
identitymatrix.hh
Go to the documentation of this file.
1#ifndef DUNE_COMMON_IDENTITYMATRIX_HH
2#define DUNE_COMMON_IDENTITYMATRIX_HH
3
7#include <dune/common/math.hh>
8
17namespace Dune
18{
19
20 // IdentityMatrix
21 // --------------
22
34 template< class K, int N >
36 {
38 typedef K field_type;
40 typedef std::size_t size_type;
41
43 constexpr size_type rows () const { return N; }
45 constexpr size_type cols () const { return N; }
46
48 template< class X, class Y >
49 void mv ( const X &x, Y &y ) const
50 {
51 y = x;
52 }
53
55 template< class X, class Y >
56 void mtv ( const X &x, Y &y ) const
57 {
58 y = x;
59 }
60
62 template< class X, class Y >
63 void umv ( const X &x, Y &y ) const
64 {
65 y += x;
66 }
67
69 template< class X, class Y >
70 void umtv ( const X &x, Y &y ) const
71 {
72 y += x;
73 }
74
76 template< class X, class Y >
77 void umhv ( const X &x, Y &y ) const
78 {
79 y += x;
80 }
81
83 template< class X, class Y >
84 void mmv ( const X &x, Y &y ) const
85 {
86 y -= x;
87 }
88
90 template< class X, class Y >
91 void mmtv ( const X &x, Y &y ) const
92 {
93 y -= x;
94 }
95
97 template< class X, class Y >
98 void mmhv ( const X &x, Y &y ) const
99 {
100 y -= x;
101 }
102
104 template< class X, class Y >
105 void usmv (const typename FieldTraits<Y>::field_type & alpha,
106 const X& x, Y& y) const
107 {
108 y.axpy( alpha, x );
109 }
110
112 template< class X, class Y >
113 void usmtv (const typename FieldTraits<Y>::field_type & alpha,
114 const X& x, Y& y) const
115 {
116 y.axpy( alpha, x );
117 }
118
120 template< class X, class Y >
121 void usmhv (const typename FieldTraits<Y>::field_type & alpha,
122 const X& x, Y& y) const
123 {
124 y.axpy( alpha, x );
125 }
126
129 {
130 return std::sqrt( frobenius_norm2() );
131 }
132
138
144
150 };
151
152 template <class DenseMatrix, class field, int N>
154 static void apply(DenseMatrix &denseMatrix, IdentityMatrix<field, N> const &rhs) {
155 DUNE_ASSERT_BOUNDS(denseMatrix.M() == N);
156 DUNE_ASSERT_BOUNDS(denseMatrix.N() == N);
157 denseMatrix = field(0);
158 for (int i = 0; i < N; ++i)
159 denseMatrix[i][i] = field(1);
160 }
161 };
162} // namespace Dune
163
164#endif // #ifndef DUNE_COMMON_IDENTITYMATRIX_HH
#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