dune-fem  2.4.1-rc
temporarylocalmatrix.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_TEMPORARYLOCALMATRIX_HH
2 #define DUNE_FEM_TEMPORARYLOCALMATRIX_HH
3 
6 
7 namespace Dune
8 {
9 
10  namespace Fem
11  {
12 
26  template< class DomainSpaceImp, class RangeSpaceImp >
28 
29 
30 
31  template< class DomainSpaceImp, class RangeSpaceImp >
33  {
34  typedef DomainSpaceImp DomainSpaceType;
35  typedef RangeSpaceImp RangeSpaceType;
36 
39 
40  typedef typename DomainSpaceType :: RangeFieldType DomainFieldType;
41  typedef typename RangeSpaceType :: RangeFieldType RangeFieldType;
42  typedef RangeFieldType LittleBlockType;
43  };
44 
45 
46 
47  template< class DomainSpaceImp, class RangeSpaceImp >
49  : public LocalMatrixDefault
50  < TemporaryLocalMatrixTraits< DomainSpaceImp, RangeSpaceImp > >
51  {
52  public:
53  typedef DomainSpaceImp DomainSpaceType;
54  typedef RangeSpaceImp RangeSpaceType;
55 
58 
59  private:
61  ThisType;
63 
64  public:
65  using BaseType :: rows;
66  using BaseType :: columns;
67 
68  public:
71 
72  protected:
74 
75  public:
76  inline TemporaryLocalMatrix ( const DomainSpaceType &domainSpace,
77  const RangeSpaceType &rangeSpace )
78  : BaseType( domainSpace, rangeSpace ),
79  fields_()
80  {
81  }
82 
83  template< class DomainEntityType, class RangeEntityType >
84  inline TemporaryLocalMatrix ( const DomainSpaceType &domainSpace,
85  const RangeSpaceType &rangeSpace,
86  const DomainEntityType &domainEntity,
87  const RangeEntityType &rangeEntity )
88  : BaseType( domainSpace, rangeSpace, domainEntity, rangeEntity ),
89  fields_( rows() * columns() )
90  {
91  }
92 
93 
95  template< class DomainEntityType, class RangeEntityType >
96  inline void init ( const DomainEntityType &domainEntity,
97  const RangeEntityType &rangeEntity )
98  {
99  BaseType :: init( domainEntity, rangeEntity );
100  fields_.resize( rows() * columns() );
101  }
102 
104  inline void add ( const int localRow,
105  const int localCol,
106  const RangeFieldType &value )
107  {
108  assert( (localRow >= 0) && (localRow < rows()) );
109  assert( (localCol >= 0) && (localCol < columns()) );
110  fields_[ localRow * columns() + localCol ] += value;
111  }
112 
114  inline void set ( const int localRow,
115  const int localCol,
116  const RangeFieldType &value )
117  {
118  assert( (localRow >= 0) && (localRow < rows()) );
119  assert( (localCol >= 0) && (localCol < columns()) );
120  fields_[ localRow * columns() + localCol ] = value;
121  }
122 
123  inline const RangeFieldType get ( const int localRow,
124  const int localCol ) const
125  {
126  assert( (localRow >= 0) && (localRow < rows()) );
127  assert( (localCol >= 0) && (localCol < columns()) );
128  return fields_[ localRow * columns() + localCol ];
129  }
130 
132  inline void clear ()
133  {
134  fields_.assign( 0 );
135  }
136 
138  void clearRow( const int localRow )
139  {
140  assert( (localRow >= 0) && (localRow < rows()) );
141  const int col = columns();
142  int start = localRow * col;
143  const int end = start + col;
144  for(int i = start; i < end; ++i) {
145  fields_[i] = 0;
146  }
147  }
148 
149  };
150 
151  } // namespace Fem
152 
153 } // namespace Dune
154 
155 #endif // #ifndef DUNE_FEM_TEMPORARYLOCALMATRIX_HH
A local matrix with a small array as storage.
Definition: temporarylocalmatrix.hh:27
void clearRow(const int localRow)
set row to zero values
Definition: temporarylocalmatrix.hh:138
RangeSpaceImp RangeSpaceType
Definition: temporarylocalmatrix.hh:54
DomainSpaceType::RangeFieldType DomainFieldType
Definition: temporarylocalmatrix.hh:40
RangeSpaceImp RangeSpaceType
Definition: temporarylocalmatrix.hh:35
TemporaryLocalMatrixTraits< DomainSpaceType, RangeSpaceType > Traits
Definition: temporarylocalmatrix.hh:57
RangeSpaceType::RangeFieldType RangeFieldType
Definition: temporarylocalmatrix.hh:41
void clear()
set all entries of local matrix to zero
Definition: temporarylocalmatrix.hh:132
Default implementation for local matrix classes.
Definition: localmatrix.hh:266
DomainSpaceImp DomainSpaceType
Definition: temporarylocalmatrix.hh:34
Traits::DomainFieldType DomainFieldType
Definition: temporarylocalmatrix.hh:69
void add(const int localRow, const int localCol, const RangeFieldType &value)
add value to matrix entry (row,col) where row and col are local row and local column ...
Definition: temporarylocalmatrix.hh:104
Fem::DynamicArray< RangeFieldType > fields_
Definition: temporarylocalmatrix.hh:73
Definition: coordinate.hh:4
void init(const DomainEntityType &domainEntity, const RangeEntityType &rangeEntity)
initialize the local matrix to entities
Definition: temporarylocalmatrix.hh:96
TemporaryLocalMatrix(const DomainSpaceType &domainSpace, const RangeSpaceType &rangeSpace, const DomainEntityType &domainEntity, const RangeEntityType &rangeEntity)
Definition: temporarylocalmatrix.hh:84
RangeFieldType LittleBlockType
Definition: temporarylocalmatrix.hh:42
TemporaryLocalMatrix< DomainSpaceType, RangeSpaceType > LocalMatrixType
Definition: temporarylocalmatrix.hh:38
Definition: temporarylocalmatrix.hh:32
void assign(const ArrayInterface< T > &other)
copy another array to this one
Definition: array.hh:572
DomainSpaceImp DomainSpaceType
Definition: temporarylocalmatrix.hh:53
void resize(unsigned int newSize)
Definition: array.hh:594
Traits::RangeFieldType RangeFieldType
Definition: temporarylocalmatrix.hh:70
TemporaryLocalMatrix(const DomainSpaceType &domainSpace, const RangeSpaceType &rangeSpace)
Definition: temporarylocalmatrix.hh:76