Dune Core Modules (2.4.2)

universalmapper.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_GRID_COMMON_UNIVERSALMAPPER_HH
4 #define DUNE_GRID_COMMON_UNIVERSALMAPPER_HH
5 
6 #include <iostream>
7 #include <map>
8 #include "mapper.hh"
9 
16 namespace Dune
17 {
35  template <typename G, typename IDS, typename IndexType=int>
37  public Mapper<G,UniversalMapper<G,IDS> >
38  {
39  typedef typename IDS::IdType IdType;
40  public:
41 
43  typedef IndexType Index;
44 
51  UniversalMapper (const G& grid, const IDS& idset)
52  : g(grid), ids(idset), index_()
53  {
54  n=0; // zero data elements
55  }
56 
64  template<class EntityType>
65  Index DUNE_DEPRECATED_MSG("Will be removed after dune-grid-2.4. Use method 'index' instead!") map (const EntityType& e) const
66  {
67  IdType id = ids.id(e); // get id
68  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
69  if (it!=index_.end()) return it->second; // return index if found
70  index_[id] = n++; // put next index in map
71  return n-1; // and return it
72  }
73 
81  template<class EntityType>
82  Index index (const EntityType& e) const
83  {
84  IdType id = ids.id(e); // get id
85  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
86  if (it!=index_.end()) return it->second; // return index if found
87  index_[id] = n++; // put next index in map
88  return n-1; // and return it
89  }
90 
91 
101  Index DUNE_DEPRECATED_MSG("Will be removed after dune-grid-2.4. Use method 'subIndex' instead!") map (const typename G::Traits::template Codim<0>::Entity& e, int i, int cc) const
102  {
103  IdType id = ids.subId(e,i,cc); // get id
104  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
105  if (it!=index_.end()) return it->second; // return index if found
106  index_[id] = n++; // put next index in map
107  return n-1; // and return it
108  }
109 
119  Index subIndex (const typename G::Traits::template Codim<0>::Entity& e, int i, int cc) const
120  {
121  IdType id = ids.subId(e,i,cc); // get id
122  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
123  if (it!=index_.end()) return it->second; // return index if found
124  index_[id] = n++; // put next index in map
125  return n-1; // and return it
126  }
127 
136  int size () const
137  {
138  return n;
139  }
140 
149  template<class EntityType>
150  bool contains (const EntityType& e, Index& result) const
151  {
152  IdType id = ids.id(e); // get id
153  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
154  if (it!=index_.end())
155  {
156  result = it->second;
157  return true;
158  }
159  else
160  return false;
161  }
162 
171  bool contains (const typename G::Traits::template Codim<0>::Entity& e, int i, int cc, Index& result) const
172  {
173  IdType id = ids.subId(e,i,cc); // get id
174  typename std::map<IdType,Index>::iterator it = index_.find(id); // look up in map
175  if (it!=index_.end())
176  {
177  result = it->second;
178  return true;
179  }
180  else
181  return false;
182  }
183 
186  void update ()
187  { // nothing to do here
188  }
189 
190  // clear the mapper
191  void clear ()
192  {
193  index_.clear();
194  n = 0;
195  }
196 
197  private:
198  mutable int n; // number of data elements required
199  const G& g;
200  const IDS& ids;
201  mutable std::map<IdType,Index> index_;
202  };
203 
204 
205 
206 
213  template <typename G>
214  class GlobalUniversalMapper : public UniversalMapper<G,typename G::Traits::GlobalIdSet>
215  {
216  public:
217  /* @brief The constructor
218  @param grid A reference to a grid.
219  */
220  GlobalUniversalMapper (const G& grid)
221  : UniversalMapper<G,typename G::Traits::GlobalIdSet>(grid,grid.globalIdSet())
222  {}
223  };
224 
231  template <typename G>
232  class LocalUniversalMapper : public UniversalMapper<G,typename G::Traits::LocalIdSet>
233  {
234  public:
239  LocalUniversalMapper (const G& grid)
240  : UniversalMapper<G,typename G::Traits::LocalIdSet>(grid,grid.localIdSet())
241  {}
242  };
243 
244 
246 }
247 #endif
Wrapper class for entities.
Definition: entity.hh:62
Universal mapper based on global ids.
Definition: universalmapper.hh:215
Universal mapper based on local ids.
Definition: universalmapper.hh:233
LocalUniversalMapper(const G &grid)
The constructor.
Definition: universalmapper.hh:239
Mapper interface.
Definition: mapper.hh:108
Implements a mapper for an arbitrary subset of entities.
Definition: universalmapper.hh:38
UniversalMapper(const G &grid, const IDS &idset)
Construct mapper from grid and one of its id sets.
Definition: universalmapper.hh:51
IndexType Index
Number type used for indices.
Definition: universalmapper.hh:43
Index index(const EntityType &e) const
Map entity to array index.
Definition: universalmapper.hh:82
Index DUNE_DEPRECATED_MSG("Will be removed after dune-grid-2.4. Use method 'subIndex' instead!") map(const typename G
Map subentity of codim 0 entity to array index.
Definition: universalmapper.hh:101
Index DUNE_DEPRECATED_MSG("Will be removed after dune-grid-2.4. Use method 'index' instead!") map(const EntityType &e) const
Map entity to array index.
Definition: universalmapper.hh:65
Provides classes with basic mappers which are used to attach data to a grid.
Dune namespace.
Definition: alignment.hh:10
Static tag representing a codimension.
Definition: dimension.hh:22
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 16, 22:29, 2024)