dune-fem 2.8.0
Loading...
Searching...
No Matches
localmatrixcolumn.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_OPERATOR_COMMON_LOCALMATRIXCOLUMN_HH
2#define DUNE_FEM_OPERATOR_COMMON_LOCALMATRIXCOLUMN_HH
3
4#include <utility>
5
7
8namespace Dune
9{
10
11 namespace Fem
12 {
13
14 // LocalMatrixEntry
15 // ----------------
16
17 template< class LocalMatrix >
19 {
21
22 public:
23 typedef LocalMatrix LocalMatrixType;
24
25 typedef typename LocalMatrixType::RangeFieldType RangeFieldType;
26
27 LocalMatrixEntry ( LocalMatrixType &localMatrix, unsigned int row, unsigned int col )
28 : localMatrix_( localMatrix ), row_( row ), col_( col )
29 {}
30
31 operator RangeFieldType () const { return localMatrix_.get( row_, col_ ); }
32
33 ThisType &operator= ( const RangeFieldType &value ) { localMatrix_.set( row_, col_, value ); return *this; }
34
35 ThisType &operator+= ( const RangeFieldType &value ) { localMatrix_.add( row_, col_, value ); return *this; }
36 ThisType &operator-= ( const RangeFieldType &value ) { localMatrix_.add( row_, col_, -value ); return *this; }
37
38 ThisType &operator*= ( const RangeFieldType &value ) { localMatrix_.set( row_, col_, localMatrix_.get( row_, col_ ) * value ); return *this; }
39 ThisType &operator/= ( const RangeFieldType &value ) { localMatrix_.set( row_, col_, localMatrix_.get( row_, col_ ) / value ); return *this; }
40
41 private:
42 LocalMatrixType &localMatrix_;
43 unsigned int row_, col_;
44 };
45
46
47
48 // LocalMatrixColumn
49 // -----------------
50
51 template< class LocalMatrix >
53 {
55
56 public:
57 typedef LocalMatrix LocalMatrixType;
58
59 typedef typename LocalMatrixType::RangeFieldType RangeFieldType;
60 typedef typename LocalMatrixType::RangeBasisFunctionSetType BasisFunctionSetType;
61
62 typedef typename BasisFunctionSetType::RangeType RangeType;
63 typedef typename BasisFunctionSetType::JacobianRangeType JacobianRangeType;
64 typedef typename BasisFunctionSetType::HessianRangeType HessianRangeType;
65
67 typedef unsigned int size_type;
68
69 LocalMatrixColumn ( LocalMatrixType &localMatrix, unsigned int col )
70 : localMatrix_( localMatrix ), col_( col )
71 {}
72
73 RangeFieldType operator[] ( size_type row ) const { return localMatrix_.get( row, col_ ); }
74
76
77 template< class Point, class... Factor >
78 void axpy ( const Point &x, Factor &&... factor )
79 {
80 basisFunctionSet().axpy( x, std::forward< Factor >( factor )..., *this );
81 }
82
83 template< class Quadrature, class... Factor >
84 void axpyQuadrature ( const Quadrature &quadrature, Factor &&... factor )
85 {
86 basisFunctionSet().axpy( quadrature, std::forward< Factor >( factor )..., *this );
87 }
88
89 const BasisFunctionSetType &basisFunctionSet () const { return localMatrix_.rangeBasisFunctionSet(); }
90
91 auto size() const { return basisFunctionSet().size(); }
92
93 private:
94 LocalMatrixType &localMatrix_;
95 unsigned int col_;
96 };
97
98
99
100 // LocalMatrixColumn for TemporaryLocalMatrix
101 // ------------------------------------------
102
103 template< class DomainSpace, class RangeSpace >
104 class LocalMatrixColumn< TemporaryLocalMatrix< DomainSpace, RangeSpace > >
105 {
107
108 public:
110
113
114 typedef typename BasisFunctionSetType::RangeType RangeType;
115 typedef typename BasisFunctionSetType::JacobianRangeType JacobianRangeType;
116 typedef typename BasisFunctionSetType::HessianRangeType HessianRangeType;
117
119 typedef unsigned int size_type;
120
121 LocalMatrixColumn ( LocalMatrixType &localMatrix, unsigned int col )
122 : localMatrix_( localMatrix ), col_( col )
123 {}
124
125 const value_type &operator[] ( size_type row ) const { return localMatrix_[ row ][ col_ ]; }
126 value_type &operator[] ( size_type row ) { return localMatrix_[ row ][ col_ ]; }
127
128 template< class Point, class... Factor >
129 void axpy ( const Point &x, Factor &&... factor )
130 {
131 basisFunctionSet().axpy( x, std::forward< Factor >( factor )..., *this );
132 }
133
134 template< class Quadrature, class... Factor >
135 void axpyQuadrature ( const Quadrature &quadrature, Factor &&... factor )
136 {
137 basisFunctionSet().axpy( quadrature, std::forward< Factor >( factor )..., *this );
138 }
139
140 const BasisFunctionSetType &basisFunctionSet () const { return localMatrix_.rangeBasisFunctionSet(); }
141
142 auto size() const { return basisFunctionSet().size(); }
143
144 private:
145 LocalMatrixType &localMatrix_;
146 unsigned int col_;
147 };
148
149 } // namespace Fem
150
151} // namespace Dune
152
153#endif // #ifndef DUNE_FEM_OPERATOR_COMMON_LOCALMATRIXCOLUMN_HH
Definition: bindguard.hh:11
RangeSpaceType::BasisFunctionSetType RangeBasisFunctionSetType
type of base function sets within range function space
Definition: localmatrix.hh:63
Definition: localmatrixcolumn.hh:19
LocalMatrixEntry(LocalMatrixType &localMatrix, unsigned int row, unsigned int col)
Definition: localmatrixcolumn.hh:27
ThisType & operator*=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:38
ThisType & operator-=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:36
LocalMatrix LocalMatrixType
Definition: localmatrixcolumn.hh:23
ThisType & operator=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:33
LocalMatrixType::RangeFieldType RangeFieldType
Definition: localmatrixcolumn.hh:25
ThisType & operator/=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:39
ThisType & operator+=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:35
Definition: localmatrixcolumn.hh:53
LocalMatrixType::RangeBasisFunctionSetType BasisFunctionSetType
Definition: localmatrixcolumn.hh:60
LocalMatrix LocalMatrixType
Definition: localmatrixcolumn.hh:57
auto size() const
Definition: localmatrixcolumn.hh:91
RangeFieldType operator[](size_type row) const
Definition: localmatrixcolumn.hh:73
void axpy(const Point &x, Factor &&... factor)
Definition: localmatrixcolumn.hh:78
BasisFunctionSetType::HessianRangeType HessianRangeType
Definition: localmatrixcolumn.hh:64
unsigned int size_type
Definition: localmatrixcolumn.hh:67
BasisFunctionSetType::RangeType RangeType
Definition: localmatrixcolumn.hh:62
void axpyQuadrature(const Quadrature &quadrature, Factor &&... factor)
Definition: localmatrixcolumn.hh:84
LocalMatrixType::RangeFieldType RangeFieldType
Definition: localmatrixcolumn.hh:59
RangeFieldType value_type
Definition: localmatrixcolumn.hh:66
const BasisFunctionSetType & basisFunctionSet() const
Definition: localmatrixcolumn.hh:89
BasisFunctionSetType::JacobianRangeType JacobianRangeType
Definition: localmatrixcolumn.hh:63
LocalMatrixColumn(LocalMatrixType &localMatrix, unsigned int col)
Definition: localmatrixcolumn.hh:69
TemporaryLocalMatrix< DomainSpace, RangeSpace > LocalMatrixType
Definition: localmatrixcolumn.hh:109
void axpyQuadrature(const Quadrature &quadrature, Factor &&... factor)
Definition: localmatrixcolumn.hh:135
BasisFunctionSetType::JacobianRangeType JacobianRangeType
Definition: localmatrixcolumn.hh:115
LocalMatrixType::RangeBasisFunctionSetType BasisFunctionSetType
Definition: localmatrixcolumn.hh:112
RangeFieldType value_type
Definition: localmatrixcolumn.hh:118
const BasisFunctionSetType & basisFunctionSet() const
Definition: localmatrixcolumn.hh:140
BasisFunctionSetType::HessianRangeType HessianRangeType
Definition: localmatrixcolumn.hh:116
BasisFunctionSetType::RangeType RangeType
Definition: localmatrixcolumn.hh:114
LocalMatrixType::RangeFieldType RangeFieldType
Definition: localmatrixcolumn.hh:111
LocalMatrixColumn(LocalMatrixType &localMatrix, unsigned int col)
Definition: localmatrixcolumn.hh:121
void axpy(const Point &x, Factor &&... factor)
Definition: localmatrixcolumn.hh:129
A local matrix with a small array as storage.
Definition: temporarylocalmatrix.hh:100
Traits::RangeFieldType RangeFieldType
Definition: temporarylocalmatrix.hh:115
actual interface class for quadratures
Definition: quadrature.hh:405