dune-fem  2.8-git
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 
8 namespace 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:35
ThisType & operator/=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:39
ThisType & operator=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:33
ThisType & operator-=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:36
ThisType & operator*=(const RangeFieldType &value)
Definition: localmatrixcolumn.hh:38
LocalMatrix LocalMatrixType
Definition: localmatrixcolumn.hh:23
LocalMatrixType::RangeFieldType RangeFieldType
Definition: localmatrixcolumn.hh:25
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
BasisFunctionSetType::JacobianRangeType JacobianRangeType
Definition: localmatrixcolumn.hh:63
const BasisFunctionSetType & basisFunctionSet() const
Definition: localmatrixcolumn.hh:89
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
BasisFunctionSetType::HessianRangeType HessianRangeType
Definition: localmatrixcolumn.hh:116
const BasisFunctionSetType & basisFunctionSet() const
Definition: localmatrixcolumn.hh:140
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