dune-fem 2.12-git
Loading...
Searching...
No Matches
idgridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_IDGRIDPART_HH
2#define DUNE_FEM_GRIDPART_IDGRIDPART_HH
3
4#include <dune/grid/common/gridview.hh>
5
19
20namespace Dune
21{
22
23 namespace Fem
24 {
25
26 // Internal Forward Declarations
27 // -----------------------------
28
29 template< class HostGridPartImp >
30 class IdGridPart;
31
32
33 // IdGridPartTraits
34 // ----------------
35
36 template< class HostGridPartImp >
38 {
40
43
44 // Traits for dune-grid facades ("Gen-Gurke!")
46 {
47 typedef typename HostGridPartImp::ctype ctype;
48
49 static const int dimension = HostGridPartImp::dimension;
50 static const int dimensionworld = HostGridPartImp::dimensionworld;
51
83
84 template< int codim >
85 struct Codim
86 : public Traits::template Codim< codim >
87 {};
88
91
93 };
95
96 typedef typename HostGridPartType::GridType GridType;
97
99
100 static const PartitionIteratorType indexSetPartitionType = HostGridPartType::indexSetPartitionType;
101 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
102
103 typedef IdIntersectionIterator < const GridFamily > IntersectionIteratorImplType;
106
107 template< int codim >
108 struct Codim
109 {
110 typedef typename GridFamily::Traits::template Codim< codim >::Geometry GeometryType;
111 typedef typename GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
112
113 typedef typename GridFamily::Traits::template Codim< codim >::Entity EntityType;
114 typedef typename GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
115
116 template< PartitionIteratorType pitype >
121 };
122
123 typedef typename HostGridPartType::CommunicationType CommunicationType;
124
125 static const bool conforming = HostGridPartType::Traits::conforming;
126 };
127
128
129
130 // IdGridPart
131 // ----------
132
133 template< class HostGridPartImp >
135 : public GridPartDefault< IdGridPartTraits< HostGridPartImp > >
136 {
139
141
142 public:
143 typedef typename GridFamily::Traits::HostGridPartType HostGridPartType;
144
145 typedef typename BaseType::GridType GridType;
150
151 template< int codim >
152 struct Codim
153 : public BaseType::template Codim< codim >
154 {};
155
157 : BaseType( grid ),
160 {}
161
162 explicit IdGridPart ( const IdGridPart &other )
163 : BaseType( other ),
164 hostGridPart_( other.hostGridPart() ),
166 {}
167
168 IdGridPart& operator= ( const IdGridPart& other ) = default;
169
171 : BaseType( const_cast< GridType& > ( hostGridPart.grid() ) ),
174 {}
175
176 const IndexSetType &indexSet () const
177 {
178 return indexSet_;
179 }
180
181 template< int codim >
183 begin () const
184 {
185 return begin< codim, InteriorBorder_Partition >();
186 }
187
188 template< int codim, PartitionIteratorType pitype >
189 typename Codim< codim >::template Partition< pitype >::IteratorType
190 begin () const
191 {
192 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().template begin< codim, pitype >() );
193 }
194
195 template< int codim >
197 end () const
198 {
199 return end< codim, InteriorBorder_Partition >();
200 }
201
202 template< int codim, PartitionIteratorType pitype >
203 typename Codim< codim >::template Partition< pitype >::IteratorType
204 end () const
205 {
206 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().template end< codim, pitype >() );
207 }
208
209 int level () const
210 {
211 return hostGridPart().level();
212 }
213
215 {
216 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().ibegin( entity.impl().hostEntity() ) );
217 }
218
220 {
221 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().iend( entity.impl().hostEntity() ) );
222 }
223
224 template< class DataHandle, class Data >
226 InterfaceType iftype, CommunicationDirection dir ) const
227 {
228 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
229 IdDataHandle< HostHandleType, GridFamily > handleWrapper( data(), handle );
230 hostGridPart().communicate( handleWrapper, iftype, dir );
231 }
232
233 template < class EntitySeed >
235 entity ( const EntitySeed &seed ) const
236 {
238 return EntityImp( data(), hostGridPart().entity( seed ) );
239 }
240
241 // convert a grid entity to a grid part entity ("Gurke!")
242 template< class Entity >
244 convert ( const Entity &entity ) const
245 {
246 // make sure we have a grid entity
247 const auto& gridEntity = Fem::gridEntity( entity );
248
249 // create a grid part entity from a given grid entity
250 typedef typename Codim< Entity::codimension >::EntityType EntityType;
251 typedef typename EntityType::Implementation Implementation;
253 // here, grid part information can be passed, if necessary
254 return EntityObj( Implementation( data(), hostGridPart().convert( gridEntity ) ) );
255 }
256
257 const HostGridPartType &hostGridPart () const { return hostGridPart_; }
258
260
261 typedef typename GridFamily::Traits::ExtraData ExtraData;
262 ExtraData data () const { return ExtraData(); }
263
264 protected:
267 };
268
269
270
271 // GridEntityAccess for IdEntity
272 // -----------------------------
273
274 template< int codim, int dim, class GridFamily >
275 struct GridEntityAccess< Dune::ExtendedEntity< codim, dim, GridFamily, IdEntity > >
276 {
279 typedef typename HostAccessType::GridEntityType GridEntityType;
280
281 static const GridEntityType &gridEntity ( const EntityType &entity )
282 {
283 return HostAccessType::gridEntity( entity.impl().hostEntity() );
284 }
285 };
286
287
288
289 // EntitySearch for IdGridPart
290 // ---------------------------
291
292 template< class HostGridPart, int codim, PartitionIteratorType partition >
293 class EntitySearch< IdGridPart< HostGridPart >, codim, partition >
294 {
295 typedef EntitySearch< IdGridPart< HostGridPart >, codim, partition > ThisType;
296
297 public:
300
301 typedef typename GridPartType::template Codim< codim >::EntityType EntityType;
302
303 typedef typename EntityType::Geometry::GlobalCoordinate GlobalCoordinateType;
304
305 explicit EntitySearch ( const GridPartType &gridPart )
306 : hostEntitySearch_( gridPart.hostGridPart() ),
307 data_( gridPart.data() )
308 {}
309
311 {
312 typedef typename EntityType::Implementation EntityImpl;
313 return EntityImpl( data_, hostEntitySearch_( x ) );
314 }
315
316 protected:
319 };
320
321 } // namespace Fem
322
323} // namespace Dune
324
325#endif // #ifndef DUNE_FEM_GRIDPART_IDGRIDPART_HH
void seed(const Vertex &vertex)
virtual void operator()()=0
PartitionIteratorType
CommunicationDirection
InterfaceType
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition gridpart.hh:510
Implementation & impl()
Definition deaditerator.hh:49
Definition deaditerator.hh:158
Definition entitysearch.hh:131
Wrapper class for wrapped entities added a cast operator to the host entity.
Definition extendedentity.hh:23
Default implementation for the GridPart classes.
Definition gridpart.hh:372
Traits::CommunicationType CommunicationType
Collective communication.
Definition gridpart.hh:391
const GridType & grid() const
Returns const reference to the underlying grid.
Definition gridpart.hh:423
Traits::GridType GridType
Grid implementation.
Definition gridpart.hh:380
Definition gridpart.hh:494
MetaTwistUtility forwards the twist calls to the TwistUtility of the underlying HostTwistUtility.
Definition metatwistutility.hh:22
Definition idgridpart.hh:136
BaseType::IntersectionIteratorType IntersectionIteratorType
Definition idgridpart.hh:147
HostGridPartType & hostGridPart()
Definition idgridpart.hh:259
HostGridPartType hostGridPart_
Definition idgridpart.hh:265
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition idgridpart.hh:190
const IndexSetType & indexSet() const
Definition idgridpart.hh:176
BaseType::CommunicationType CommunicationType
Definition idgridpart.hh:149
IdGridPart(GridType &grid)
Definition idgridpart.hh:156
MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType > convert(const Entity &entity) const
Definition idgridpart.hh:244
void communicate(CommDataHandleIF< DataHandle, Data > &handle, InterfaceType iftype, CommunicationDirection dir) const
Definition idgridpart.hh:225
IdGridPart(const HostGridPartType &hostGridPart)
Definition idgridpart.hh:170
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
Definition idgridpart.hh:214
IdGridPart & operator=(const IdGridPart &other)=default
const HostGridPartType & hostGridPart() const
Definition idgridpart.hh:257
BaseType::GridType GridType
Definition idgridpart.hh:145
ExtraData data() const
Definition idgridpart.hh:262
Codim< codim >::IteratorType end() const
Definition idgridpart.hh:197
int level() const
Definition idgridpart.hh:209
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
Definition idgridpart.hh:219
GridFamily::Traits::ExtraData ExtraData
Definition idgridpart.hh:261
IndexSetType indexSet_
Definition idgridpart.hh:266
Codim< codim >::template Partition< pitype >::IteratorType end() const
Definition idgridpart.hh:204
GridFamily::Traits::HostGridPartType HostGridPartType
Definition idgridpart.hh:143
Codim< codim >::IteratorType begin() const
Definition idgridpart.hh:183
BaseType::IntersectionType IntersectionType
Definition idgridpart.hh:148
BaseType::IndexSetType IndexSetType
Definition idgridpart.hh:146
IdGridPart(const IdGridPart &other)
Definition idgridpart.hh:162
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition idgridpart.hh:235
Definition idgridpart.hh:38
IdIndexSet< const GridFamily > IndexSetType
Definition idgridpart.hh:98
HostGridPartType::CommunicationType CommunicationType
Definition idgridpart.hh:123
GridFamily::Traits::HostGridPartType HostGridPartType
Definition idgridpart.hh:94
IdIntersectionIterator< const GridFamily > IntersectionIteratorImplType
Definition idgridpart.hh:103
IdIntersection< const GridFamily > IntersectionImplType
Definition idgridpart.hh:104
static const bool conforming
Definition idgridpart.hh:125
MetaTwistUtility< typename HostGridPartImp ::TwistUtilityType > TwistUtilityType
type of twist utility
Definition idgridpart.hh:42
static const PartitionIteratorType indexSetPartitionType
Definition idgridpart.hh:100
HostGridPartType::GridType GridType
Definition idgridpart.hh:96
static const InterfaceType indexSetInterfaceType
Definition idgridpart.hh:101
IdGridPart< HostGridPartImp > GridPartType
Definition idgridpart.hh:39
IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType
Definition idgridpart.hh:105
Definition idgridpart.hh:46
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition idgridpart.hh:89
static const int dimensionworld
Definition idgridpart.hh:50
Traits::HierarchicIterator HierarchicIterator
Definition idgridpart.hh:92
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition idgridpart.hh:90
static const int dimension
Definition idgridpart.hh:49
HostGridPartImp::ctype ctype
Definition idgridpart.hh:47
EmptyData ExtraData
Definition idgridpart.hh:60
Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator
Definition idgridpart.hh:78
Dune::Intersection< const GridFamily, IntersectionImplType > LevelIntersection
Definition idgridpart.hh:76
HostGridPartImp HostGridPartType
Definition idgridpart.hh:54
DeadIntersection< const GridFamily > IntersectionImplType
Definition idgridpart.hh:72
Dune::Intersection< const GridFamily, IntersectionImplType > LeafIntersection
Definition idgridpart.hh:75
Dune::EntityIterator< 0, const GridFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator
Definition idgridpart.hh:81
DeadIntersectionIterator< const GridFamily > IntersectionIteratorImplType
Definition idgridpart.hh:73
Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator
Definition idgridpart.hh:79
Dune::ExtendedEntity< codim, dimension, const GridFamily, IdEntity > Entity
Definition idgridpart.hh:68
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition idgridpart.hh:69
Dune::Geometry< dimension - codim, dimension, const GridFamily, IdLocalGeometry > LocalGeometry
Definition idgridpart.hh:66
Dune::Geometry< dimension - codim, dimensionworld, const GridFamily, IdGeometry > Geometry
Definition idgridpart.hh:65
Definition idgridpart.hh:109
GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition idgridpart.hh:114
GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition idgridpart.hh:111
GridFamily::Traits::template Codim< codim >::Entity EntityType
Definition idgridpart.hh:113
GridFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition idgridpart.hh:110
EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType
Definition idgridpart.hh:119
Definition idgridpart.hh:154
static const GridEntityType & gridEntity(const EntityType &entity)
Definition idgridpart.hh:281
GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType
Definition idgridpart.hh:278
HostAccessType::GridEntityType GridEntityType
Definition idgridpart.hh:279
Dune::ExtendedEntity< codim, dim, GridFamily, IdEntity > EntityType
Definition idgridpart.hh:277
EntitySearch(const GridPartType &gridPart)
Definition idgridpart.hh:305
const EntitySearch< HostGridPart > hostEntitySearch_
Definition idgridpart.hh:317
GridPartType::template Codim< codim >::EntityType EntityType
Definition idgridpart.hh:301
GridPartType::ExtraData ExtraData
Definition idgridpart.hh:299
IdGridPart< HostGridPart > GridPartType
Definition idgridpart.hh:298
EntityType::Geometry::GlobalCoordinate GlobalCoordinateType
Definition idgridpart.hh:303
Definition gridpart/idgridpart/datahandle.hh:23
Definition gridpart/idgridpart/geometry.hh:110
Definition gridpart/idgridpart/geometry.hh:149
Definition idgridpart/indexset.hh:264
Definition idgridpart/intersection.hh:20
Definition idgridpart/intersectioniterator.hh:22
Definition idgridpart/iterator.hh:21