dune-alugrid 2.8.0
Loading...
Searching...
No Matches
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
14namespace 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
86 typedef typename Traits :: Intersection Intersection;
87
89 typedef typename Traits :: IntersectionIterator IntersectionIterator;
90
92 typedef typename Traits :: CollectiveCommunication CollectiveCommunication;
93
95 template< int cd >
96 struct Codim : public Traits :: template Codim<cd> {};
97
98 enum {
100 conforming = Traits :: conforming
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
Traits::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: macrogridview.hh:89
int weight(const typename Codim< 0 > ::Entity &entity) const
return weight associated with the given macro entity
Definition: macrogridview.hh:234
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: macrogridview.hh:201
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: macrogridview.hh:160
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
MacroGridViewTraits< GridImp, pitype > Traits
Definition: macrogridview.hh:77
@ 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
Codim< cd >::template Partition< pit >::Iterator begin() const
obtain begin iterator for this view
Definition: macrogridview.hh:153
const int level_
Definition: macrogridview.hh:248
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: macrogridview.hh:120
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::Intersection Intersection
type of the intersection
Definition: macrogridview.hh:86
Traits::Grid Grid
type of the grid
Definition: macrogridview.hh:80
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: macrogridview.hh:146
Codim< cd >::template Partition< pit >::Iterator end() const
obtain end iterator for this view
Definition: macrogridview.hh:167
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
const CollectiveCommunication & comm() const
obtain collective communication object
Definition: macrogridview.hh:189
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
Traits::IndexSet IndexSet
type of the index set
Definition: macrogridview.hh:83
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::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: macrogridview.hh:92
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::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: macrogridview.hh:39
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::LevelIntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: macrogridview.hh:36
std::remove_const< GridImp >::type Grid
type of the grid
Definition: macrogridview.hh:26
@ conforming
Definition: macrogridview.hh:65
Definition: macrogridview.hh:43
Grid::template Codim< cd >::Geometry Geometry
Definition: macrogridview.hh:50
Grid::template Codim< cd >::LocalGeometry LocalGeometry
Definition: macrogridview.hh:52
Grid::Traits::template Codim< cd >::template Partition< pitype >::LevelIterator Iterator
Definition: macrogridview.hh:46
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