dune-fem 2.12-git
Loading...
Searching...
No Matches
geogridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_HH
2#define DUNE_FEM_GRIDPART_GEOGRIDPART_HH
3
4#include <cassert>
5
6#include <dune/grid/common/gridview.hh>
7
21
22namespace Dune
23{
24
25 namespace Fem
26 {
27
28 // Internal Forward Declarations
29 // -----------------------------
30
31 template< class CoordFunction >
32 class GeoGridPart;
33
34 template< class CoordFunction >
35 struct GeoGridPartFamily;
36
37
38
39 // GeoGridPartData
40 // ---------------
41
42 template< class CoordFunction >
44 {
45 typedef CoordFunction CoordFunctionType;
46
47 GeoGridPartData () = default;
48 GeoGridPartData ( const CoordFunctionType &coordFunction ) : coordFunction_( &coordFunction ) {}
49
50 operator const CoordFunctionType & () const { assert( coordFunction_ ); return *coordFunction_; }
51
52 private:
53 const CoordFunctionType *coordFunction_ = nullptr;
54 };
55
56
57
58 // GeoGridPartFamily
59 // -----------------
60
61 // Traits for dune-grid facades ("Gen-Gurke!")
62 template< class CoordFunction >
64 {
65 typedef typename CoordFunction::RangeFieldType ctype;
66
67 static const int dimension = CoordFunction::GridPartType::dimension;
68 static const int dimensionworld = CoordFunction::FunctionSpaceType::dimRange;
69
71
100
101 template< int codim >
102 struct Codim
103 : public Traits::template Codim< codim >
104 {};
105
108
110 };
111
112
113
114 template< class CoordFunction >
116 {
120
121 typedef typename GridPartFamily::Traits::HostGridPartType HostGridPartType;
122
123 typedef typename HostGridPartType::GridType GridType;
124
127
129
130 static const PartitionIteratorType indexSetPartitionType = HostGridPartType::indexSetPartitionType;
131 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
132
135
137
138 template< int codim >
139 struct Codim
140 {
141 typedef typename GridPartFamily::Traits::template Codim< codim >::Geometry GeometryType;
142 typedef typename GridPartFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
143
144 typedef typename GridPartFamily::Traits::template Codim< codim >::Entity EntityType;
145
146 typedef typename GridPartFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
147
148 template< PartitionIteratorType pitype >
153 };
154
155 typedef typename HostGridPartType::CommunicationType CommunicationType;
156
157 static const bool conforming = HostGridPartType::Traits::conforming;
158 };
159
160
161
162 // GeoGridPart
163 // -----------
164
165 template< class CoordFunction >
167 : public GridPartDefault< GeoGridPartTraits< CoordFunction > >
168 {
171
173
174 public:
175 typedef typename GridPartFamily::Traits::HostGridPartType HostGridPartType;
176
177 typedef CoordFunction CoordFunctionType;
178
179 typedef typename BaseType::GridType GridType;
184
185 template< int codim >
186 struct Codim
187 : public BaseType::template Codim< codim >
188 {};
189
191 : BaseType( const_cast< GridType& > (coordFunction.gridPart().grid() ) ),
194 {}
195
196 const IndexSetType &indexSet () const
197 {
198 return indexSet_;
199 }
200
201 template< int codim >
203 begin () const
204 {
205 return begin< codim, InteriorBorder_Partition >();
206 }
207
208 template< int codim, PartitionIteratorType pitype >
209 typename Codim< codim >::template Partition< pitype >::IteratorType
210 begin () const
211 {
212 return IdIterator< codim, pitype, const GridPartFamily >( coordFunction(), hostGridPart().template begin< codim, pitype >() );
213 }
214
215 template< int codim >
217 end () const
218 {
219 return end< codim, InteriorBorder_Partition >();
220 }
221
222 template< int codim, PartitionIteratorType pitype >
223 typename Codim< codim >::template Partition< pitype >::IteratorType
224 end () const
225 {
226 return IdIterator< codim, pitype, const GridPartFamily >( coordFunction(), hostGridPart().template end< codim, pitype >() );
227 }
228
229 int level () const
230 {
231 return hostGridPart().level();
232 }
233
238
243
244 template< class DataHandle, class Data >
246 InterfaceType iftype, CommunicationDirection dir ) const
247 {
248 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
250 hostGridPart().communicate( handleWrapper, iftype, dir );
251 }
252
253 template< class LocalFunction >
256 const LocalFunction &localCoordFunction ) const
257 {
258 return typename Codim< 0 >::EntityType::Implementation( entity.impl(), localCoordFunction );
259 }
260
261 template < class EntitySeed >
268
269 // convert a grid entity to a grid part entity ("Gurke!")
270 template< class Entity >
272 convert ( const Entity &entity ) const
273 {
274 // make sure we have a grid entity
275 const auto& gridEntity = Fem::gridEntity( entity );
276
277 // create a grid part entity from a given grid entity
278 typedef typename Codim< Entity::codimension >::EntityType EntityType;
279 typedef typename EntityType::Implementation Implementation;
281
282 // here, grid part information can be passed, if necessary
283 return EntityObj( Implementation( coordFunction(), hostGridPart().convert( gridEntity ) ) );
284 }
285
286 // return reference to the coordfunction
288 {
289 assert( coordFunction_);
290 return *coordFunction_;
291 }
292
293 // return reference to the host grid part
295 {
296 return coordFunction().gridPart();
297 }
298
299 // return reference to the host grid part
301 {
302 return const_cast< HostGridPartType & >( coordFunction().gridPart() );
303 }
304
305 protected:
308 };
309
310
311
312 // GridEntityAccess for GeoEntity
313 // ------------------------------
314
315 template< int codim, int dim, class GridFamily >
316 struct GridEntityAccess< Dune::ExtendedEntity< codim, dim, GridFamily, GeoEntity > >
317 {
320 typedef typename HostAccessType::GridEntityType GridEntityType;
321
322 static const GridEntityType &gridEntity ( const EntityType &entity )
323 {
324 return HostAccessType::gridEntity( entity.impl().hostEntity() );
325 }
326 };
327
328
329
330 // EntitySearch for GeoGridPart
331 // ----------------------------
332
333 template< class CoordFunction, int codim, PartitionIteratorType partition >
334 class EntitySearch< GeoGridPart< CoordFunction >, codim, partition >
335 : public DefaultEntitySearch< GeoGridPart< CoordFunction >, codim, partition >
336 {
337 typedef EntitySearch< GeoGridPart< CoordFunction >, codim, partition > ThisType;
339
340 public:
342
343 explicit EntitySearch ( const GridPartType &gridPart )
344 : BaseType( gridPart )
345 {}
346 };
347
348 } // namespace Fem
349
350} // namespace Dune
351
352#endif // #ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_HH
void seed(const Vertex &vertex)
PartitionIteratorType
CommunicationDirection
InterfaceType
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition gridpart.hh:510
Implementation & impl()
interface for local functions
Definition localfunction.hh:77
Definition deaditerator.hh:49
Definition deaditerator.hh:158
Definition entitysearch.hh:25
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 geogridpart.hh:168
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition geogridpart.hh:210
void communicate(CommDataHandleIF< DataHandle, Data > &handle, InterfaceType iftype, CommunicationDirection dir) const
Definition geogridpart.hh:245
const CoordFunctionType * coordFunction_
Definition geogridpart.hh:306
Codim< 0 >::EntityType exchangeGeometry(const typename Codim< 0 >::EntityType &entity, const LocalFunction &localCoordFunction) const
Definition geogridpart.hh:255
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
Definition geogridpart.hh:234
const HostGridPartType & hostGridPart() const
Definition geogridpart.hh:294
HostGridPartType & hostGridPart()
Definition geogridpart.hh:300
const CoordFunctionType & coordFunction() const
Definition geogridpart.hh:287
BaseType::IntersectionType IntersectionType
Definition geogridpart.hh:182
GeoGridPart(const CoordFunctionType &coordFunction)
Definition geogridpart.hh:190
Codim< codim >::IteratorType begin() const
Definition geogridpart.hh:203
BaseType::IntersectionIteratorType IntersectionIteratorType
Definition geogridpart.hh:181
IndexSetType indexSet_
Definition geogridpart.hh:307
CoordFunction CoordFunctionType
Definition geogridpart.hh:177
int level() const
Definition geogridpart.hh:229
GridPartFamily::Traits::HostGridPartType HostGridPartType
Definition geogridpart.hh:175
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition geogridpart.hh:263
const IndexSetType & indexSet() const
Definition geogridpart.hh:196
Codim< codim >::template Partition< pitype >::IteratorType end() const
Definition geogridpart.hh:224
Codim< codim >::IteratorType end() const
Definition geogridpart.hh:217
BaseType::GridType GridType
Definition geogridpart.hh:179
BaseType::IndexSetType IndexSetType
Definition geogridpart.hh:180
BaseType::CommunicationType CommunicationType
Definition geogridpart.hh:183
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
Definition geogridpart.hh:239
MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType > convert(const Entity &entity) const
Definition geogridpart.hh:272
Definition geogridpart.hh:64
static const int dimensionworld
Definition geogridpart.hh:68
static const int dimension
Definition geogridpart.hh:67
CoordFunction::RangeFieldType ctype
Definition geogridpart.hh:65
Traits::HierarchicIterator HierarchicIterator
Definition geogridpart.hh:109
GeoGridPartFamily< CoordFunction > GridPartFamily
Definition geogridpart.hh:70
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition geogridpart.hh:106
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition geogridpart.hh:107
Definition geogridpart.hh:44
GeoGridPartData(const CoordFunctionType &coordFunction)
Definition geogridpart.hh:48
CoordFunction CoordFunctionType
Definition geogridpart.hh:45
Definition geogridpart.hh:73
GeoGridPartData< CoordFunction > ExtraData
Definition geogridpart.hh:74
DeadIntersectionIterator< const GridPartFamily > IntersectionIteratorImplType
Definition geogridpart.hh:90
DeadIntersection< const GridPartFamily > IntersectionImplType
Definition geogridpart.hh:89
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator
Definition geogridpart.hh:95
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator
Definition geogridpart.hh:96
CoordFunctionType::GridPartType HostGridPartType
Definition geogridpart.hh:77
Dune::Intersection< const GridPartFamily, IntersectionImplType > LevelIntersection
Definition geogridpart.hh:93
Dune::EntityIterator< 0, const GridPartFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator
Definition geogridpart.hh:98
Dune::Intersection< const GridPartFamily, IntersectionImplType > LeafIntersection
Definition geogridpart.hh:92
CoordFunction CoordFunctionType
Definition geogridpart.hh:75
HostGridPartType::template Codim< codim >::LocalGeometryType LocalGeometry
Definition geogridpart.hh:83
Dune::Geometry< dimension - codim, dimensionworld, const GridPartFamily, GeoGeometry > Geometry
Definition geogridpart.hh:82
Dune::ExtendedEntity< codim, dimension, const GridPartFamily, GeoEntity > Entity
Definition geogridpart.hh:85
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition geogridpart.hh:86
Definition geogridpart.hh:104
Definition geogridpart.hh:116
IdIndexSet< const GridPartFamily > IndexSetType
Definition geogridpart.hh:128
HostGridPartType::CommunicationType CommunicationType
Definition geogridpart.hh:155
static const InterfaceType indexSetInterfaceType
Definition geogridpart.hh:131
GeoGridPart< CoordFunction > GridPartType
Definition geogridpart.hh:117
GeoGridPartFamily< CoordFunction > GridPartFamily
Definition geogridpart.hh:118
IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType
Definition geogridpart.hh:136
GeoGridPartFamily< CoordFunction > GridFamily
Definition geogridpart.hh:119
GridPartFamily::Traits::HostGridPartType HostGridPartType
Definition geogridpart.hh:121
HostGridPartType::GridType GridType
Definition geogridpart.hh:123
static const bool conforming
Definition geogridpart.hh:157
GeoIntersectionIterator< const GridPartFamily > IntersectionIteratorImplType
Definition geogridpart.hh:134
GeoIntersection< const GridPartFamily > IntersectionImplType
Definition geogridpart.hh:133
MetaTwistUtility< typename HostGridPartType ::TwistUtilityType > TwistUtilityType
type of twist utility
Definition geogridpart.hh:126
static const PartitionIteratorType indexSetPartitionType
Definition geogridpart.hh:130
Definition geogridpart.hh:140
GridPartFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition geogridpart.hh:141
GridPartFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition geogridpart.hh:146
GridPartFamily::Traits::template Codim< codim >::Entity EntityType
Definition geogridpart.hh:144
GridPartFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition geogridpart.hh:142
EntityIterator< codim, const GridPartFamily, IdIterator< codim, pitype, const GridPartFamily > > IteratorType
Definition geogridpart.hh:151
Definition geogridpart.hh:188
GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType
Definition geogridpart.hh:319
HostAccessType::GridEntityType GridEntityType
Definition geogridpart.hh:320
static const GridEntityType & gridEntity(const EntityType &entity)
Definition geogridpart.hh:322
Dune::ExtendedEntity< codim, dim, GridFamily, GeoEntity > EntityType
Definition geogridpart.hh:318
BaseType::GridPartType GridPartType
Definition geogridpart.hh:341
EntitySearch(const GridPartType &gridPart)
Definition geogridpart.hh:343
Definition gridpart/geogridpart/datahandle.hh:22
Definition gridpart/geogridpart/geometry.hh:57
Definition geogridpart/intersection.hh:20
Definition geogridpart/intersectioniterator.hh:23
Definition idgridpart/indexset.hh:264
Definition idgridpart/iterator.hh:21