dune-alugrid  2.8-git
macrogridview.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=8 sw=2 sts=2:
3 #ifndef DUNE_ALUGRID_MACROGRIDVIEW_HH
4 #define DUNE_ALUGRID_MACROGRIDVIEW_HH
5 
6 #include <type_traits>
7 
8 #include <dune/common/version.hh>
9 #include <dune/common/exceptions.hh>
10 
11 #include <dune/grid/common/capabilities.hh>
12 #include <dune/grid/common/gridview.hh>
13 
14 namespace Dune
15 {
16 
17  template< class GridImp, PartitionIteratorType pitype >
18  class MacroGridView;
19 
20  template< class GridImp, PartitionIteratorType pitype >
22  {
24 
26  typedef typename std::remove_const<GridImp>::type Grid;
27 
29  typedef typename Grid :: Traits :: LevelIndexSet IndexSet;
30 
32  typedef typename Grid :: Traits :: LevelIntersection Intersection;
33 
35  typedef typename Grid :: Traits :: LevelIntersectionIterator
37 
39  typedef typename Grid :: Traits :: CollectiveCommunication CollectiveCommunication;
40 
41  template< int cd >
42  struct Codim
43  {
44  typedef typename Grid :: Traits
45  :: template Codim< cd > :: template Partition< pitype > :: LevelIterator
47 
48  typedef typename Grid :: Traits :: template Codim< cd > :: Entity Entity;
49 
50  typedef typename Grid :: template Codim< cd > :: Geometry Geometry;
51  typedef typename Grid :: template Codim< cd > :: LocalGeometry
53 
55  template< PartitionIteratorType pit >
56  struct Partition
57  {
59  typedef typename Grid :: template Codim< cd >
60  :: template Partition< pit > :: LevelIterator
62  };
63  };
64 
65  enum { conforming = Capabilities :: isLevelwiseConforming< Grid > :: v };
66  };
67 
68 
69  template< class GridImp, PartitionIteratorType pitype >
71  {
73 
74  public:
75 
76 
78 
80  typedef typename Traits::Grid Grid;
81 
83  typedef typename Traits :: IndexSet IndexSet;
84 
87 
90 
93 
95  template< int cd >
96  struct Codim : public Traits :: template Codim<cd> {};
97 
98  enum {
101  };
102 
104  typedef typename Grid::ctype ctype;
105 
106  enum {
107  dimension = Grid :: dimension
108  };
109 
110  enum {
111  dimensionworld = Grid :: dimensionworld
112  };
113 
115  : grid_( &grid ),
116  level_( 0 )
117  {}
118 
120  const Grid &grid () const
121  {
122  assert( grid_ );
123  return *grid_;
124  }
125 
127  const IndexSet &indexSet () const
128  {
129  return grid().levelIndexSet( level_ );
130  }
131 
133  int size ( int codim ) const
134  {
135  return grid().size( level_, codim );
136  }
137 
139  int size ( const GeometryType &type ) const
140  {
141  return grid().size( level_, type );
142  }
143 
145  template< int cd >
146  typename Codim< cd > :: Iterator begin () const
147  {
148  return grid().template lbegin< cd, pitype >( level_ );
149  }
150 
152  template< int cd, PartitionIteratorType pit >
153  typename Codim< cd > :: template Partition< pit > :: Iterator begin () const
154  {
155  return grid().template lbegin< cd, pit >( level_ );
156  }
157 
159  template< int cd >
160  typename Codim< cd > :: Iterator end () const
161  {
162  return grid().template lend< cd, pitype >( level_ );
163  }
164 
166  template< int cd, PartitionIteratorType pit >
167  typename Codim< cd > :: template Partition< pit > :: Iterator end () const
168  {
169  return grid().template lend< cd, pit >( level_ );
170  }
171 
174  ibegin ( const typename Codim< 0 > :: Entity &entity ) const
175  {
176  assert( entity.level() == level_ );
177  return grid().ilevelbegin( entity );
178  }
179 
182  iend ( const typename Codim< 0 > :: Entity &entity ) const
183  {
184  assert( entity.level() == level_ );
185  return grid().ilevelend( entity );
186  }
187 
190  {
191  return grid().comm();
192  }
193 
195  int overlapSize(int codim) const
196  {
197  return grid().overlapSize(level_, codim);
198  }
199 
201  int ghostSize(int codim) const
202  {
203  return grid().ghostSize(level_, codim);
204  }
205 
207  template< class DataHandleImp, class DataType >
208  void communicate ( CommDataHandleIF< DataHandleImp, DataType > &data,
209  InterfaceType iftype,
210  CommunicationDirection dir ) const
211  {
212  return grid().communicate( data, iftype, dir, level_ );
213  }
214 
216  //
217  // extra interface methods for load balancing
218  //
220 
222  int master ( const typename Codim< 0 > :: Entity &entity ) const
223  {
224  return entity.impl().master();
225  }
226 
228  int macroId ( const typename Codim< 0 > :: Entity &entity ) const
229  {
230  return entity.impl().macroId();
231  }
232 
234  int weight ( const typename Codim< 0 > :: Entity &entity ) const
235  {
236  return entity.impl().weight();
237  }
238 
241  int weight ( const Intersection &intersection ) const
242  {
243  return intersection.impl().weight();
244  }
245 
246  protected:
247  const Grid *grid_;
248  const int level_;
249  };
250 }
251 
252 #endif
Definition: alu3dinclude.hh:63
Definition: macrogridview.hh:71
Codim< cd >::template Partition< pit >::Iterator end() const
obtain end iterator for this view
Definition: macrogridview.hh:167
int weight(const typename Codim< 0 > ::Entity &entity) const
return weight associated with the given macro entity
Definition: macrogridview.hh:234
Traits ::IndexSet IndexSet
type of the index set
Definition: macrogridview.hh:83
Traits ::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: macrogridview.hh:89
const CollectiveCommunication & comm() const
obtain collective communication object
Definition: macrogridview.hh:189
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: macrogridview.hh:201
const IndexSet & indexSet() const
obtain the index set
Definition: macrogridview.hh:127
int macroId(const typename Codim< 0 > ::Entity &entity) const
return unique id of macro entity for usage with graph partitioning software
Definition: macrogridview.hh:228
Codim< cd >::template Partition< pit >::Iterator begin() const
obtain begin iterator for this view
Definition: macrogridview.hh:153
MacroGridViewTraits< GridImp, pitype > Traits
Definition: macrogridview.hh:77
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: macrogridview.hh:146
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: macrogridview.hh:120
@ dimension
The dimension of the grid.
Definition: macrogridview.hh:107
int overlapSize(int codim) const
Return size of the overlap region for a given codim on the grid view.
Definition: macrogridview.hh:195
Grid::ctype ctype
type used for coordinates in grid
Definition: macrogridview.hh:104
const int level_
Definition: macrogridview.hh:248
Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: macrogridview.hh:92
void communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: macrogridview.hh:208
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
obtain begin intersection iterator with respect to this view
Definition: macrogridview.hh:174
MacroGridView(const Grid &grid)
Definition: macrogridview.hh:114
Traits::Grid Grid
type of the grid
Definition: macrogridview.hh:80
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: macrogridview.hh:160
int size(const GeometryType &type) const
obtain number of entities with a given geometry type
Definition: macrogridview.hh:139
@ conforming
Export if this grid view is conforming *‍/.
Definition: macrogridview.hh:100
int size(int codim) const
obtain number of entities in a given codimension
Definition: macrogridview.hh:133
int master(const typename Codim< 0 > ::Entity &entity) const
return master rank for entities with partitionType != InteriorEntity
Definition: macrogridview.hh:222
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
obtain end intersection iterator with respect to this view
Definition: macrogridview.hh:182
const Grid * grid_
Definition: macrogridview.hh:247
Traits ::Intersection Intersection
type of the intersection
Definition: macrogridview.hh:86
int weight(const Intersection &intersection) const
return weight associated with the macro intersection, i.e. the graph edge between the two neighboring...
Definition: macrogridview.hh:241
@ dimensionworld
The dimension of the world the grid lives in.
Definition: macrogridview.hh:111
Definition: macrogridview.hh:22
MacroGridView< GridImp, pitype > GridViewImp
Definition: macrogridview.hh:23
Grid ::Traits ::LevelIntersection Intersection
type of the intersection
Definition: macrogridview.hh:32
Grid ::Traits ::LevelIndexSet IndexSet
type of the index set
Definition: macrogridview.hh:29
Grid ::Traits ::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: macrogridview.hh:39
std::remove_const< GridImp >::type Grid
type of the grid
Definition: macrogridview.hh:26
@ conforming
Definition: macrogridview.hh:65
Grid ::Traits ::LevelIntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: macrogridview.hh:36
Definition: macrogridview.hh:43
Grid ::template Codim< cd >::Geometry Geometry
Definition: macrogridview.hh:50
Grid ::Traits ::template Codim< cd >::template Partition< pitype >::LevelIterator Iterator
Definition: macrogridview.hh:46
Grid ::template Codim< cd >::LocalGeometry LocalGeometry
Definition: macrogridview.hh:52
Grid ::Traits ::template Codim< cd >::Entity Entity
Definition: macrogridview.hh:48
Define types needed to iterate over entities of a given partition type.
Definition: macrogridview.hh:57
Grid ::template Codim< cd >::template Partition< pit >::LevelIterator Iterator
iterator over a given codim and partition type
Definition: macrogridview.hh:61
Codim Structure.
Definition: macrogridview.hh:96