1#ifndef DUNE_FEM_GRIDPART_IDGRIDPART_HH
2#define DUNE_FEM_GRIDPART_IDGRIDPART_HH
4#include <dune/grid/common/gridview.hh>
6#include <dune/fem/gridpart/common/deaditerator.hh>
7#include <dune/fem/gridpart/common/entitysearch.hh>
8#include <dune/fem/gridpart/common/extendedentity.hh>
9#include <dune/fem/gridpart/common/gridpart.hh>
10#include <dune/fem/gridpart/common/metatwistutility.hh>
11#include <dune/fem/gridpart/idgridpart/capabilities.hh>
12#include <dune/fem/gridpart/idgridpart/datahandle.hh>
13#include <dune/fem/gridpart/idgridpart/entity.hh>
14#include <dune/fem/gridpart/idgridpart/geometry.hh>
15#include <dune/fem/gridpart/idgridpart/indexset.hh>
16#include <dune/fem/gridpart/idgridpart/intersection.hh>
17#include <dune/fem/gridpart/idgridpart/intersectioniterator.hh>
18#include <dune/fem/gridpart/idgridpart/iterator.hh>
29 template<
class HostGr
idPartImp >
36 template<
class HostGr
idPartImp >
37 struct IdGridPartTraits
39 typedef IdGridPart< HostGridPartImp > GridPartType;
42 typedef MetaTwistUtility< typename HostGridPartImp :: TwistUtilityType > TwistUtilityType;
47 typedef typename HostGridPartImp::ctype ctype;
49 static const int dimension = HostGridPartImp::dimension;
50 static const int dimensionworld = HostGridPartImp::dimensionworld;
54 typedef HostGridPartImp HostGridPartType;
60 typedef EmptyData ExtraData;
65 typedef Dune::Geometry< dimension - codim, dimensionworld,
const GridFamily, IdGeometry > Geometry;
66 typedef Dune::Geometry< dimension - codim, dimension,
const GridFamily, IdLocalGeometry > LocalGeometry;
69 typedef typename HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed;
72 typedef DeadIntersection< const GridFamily > IntersectionImplType;
73 typedef DeadIntersectionIterator< const GridFamily > IntersectionIteratorImplType;
86 :
public Traits::template Codim< codim >
89 typedef typename Traits::LeafIntersectionIterator LeafIntersectionIterator;
90 typedef typename Traits::LevelIntersectionIterator LevelIntersectionIterator;
92 typedef typename Traits::HierarchicIterator HierarchicIterator;
94 typedef typename GridFamily::Traits::HostGridPartType HostGridPartType;
96 typedef typename HostGridPartType::GridType GridType;
98 typedef IdIndexSet< const GridFamily > IndexSetType;
101 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
103 typedef IdIntersectionIterator < const GridFamily > IntersectionIteratorImplType;
104 typedef IdIntersection< const GridFamily > IntersectionImplType;
105 typedef IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType;
107 template<
int codim >
110 typedef typename GridFamily::Traits::template Codim< codim >::Geometry
GeometryType;
111 typedef typename GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
113 typedef typename GridFamily::Traits::template Codim< codim >::Entity EntityType;
114 typedef typename GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
116 template< PartitionIteratorType pitype >
119 typedef EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType;
123 typedef typename HostGridPartType::CommunicationType CommunicationType;
125 static const bool conforming = HostGridPartType::Traits::conforming;
133 template<
class HostGr
idPartImp >
135 :
public GridPartDefault< IdGridPartTraits< HostGridPartImp > >
137 typedef IdGridPart< HostGridPartImp > ThisType;
138 typedef GridPartDefault< IdGridPartTraits< HostGridPartImp > > BaseType;
140 typedef typename IdGridPartTraits< HostGridPartImp >::GridFamily GridFamily;
143 typedef typename GridFamily::Traits::HostGridPartType HostGridPartType;
151 template<
int codim >
153 :
public BaseType::template Codim< codim >
156 explicit IdGridPart ( GridType &grid )
158 hostGridPart_( grid ),
159 indexSet_( hostGridPart_.indexSet() )
162 explicit IdGridPart (
const IdGridPart &other )
164 hostGridPart_( other.hostGridPart() ),
165 indexSet_( hostGridPart_.indexSet() )
168 explicit IdGridPart (
const HostGridPartType &hostGridPart )
169 : BaseType( const_cast< GridType& > ( hostGridPart.
grid() ) ),
170 hostGridPart_( hostGridPart ),
171 indexSet_( hostGridPart_.indexSet() )
174 const IndexSetType &indexSet ()
const
179 template<
int codim >
180 typename Codim< codim >::IteratorType
183 return begin< codim, InteriorBorder_Partition >();
186 template<
int codim, PartitionIteratorType pitype >
187 typename Codim< codim >::template Partition< pitype >::IteratorType
190 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().
template begin< codim, pitype >() );
193 template<
int codim >
194 typename Codim< codim >::IteratorType
197 return end< codim, InteriorBorder_Partition >();
200 template<
int codim, PartitionIteratorType pitype >
201 typename Codim< codim >::template Partition< pitype >::IteratorType
204 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().
template end< codim, pitype >() );
209 return hostGridPart().level();
212 IntersectionIteratorType ibegin (
const typename Codim< 0 >::EntityType &entity )
const
214 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().ibegin( entity.impl().hostEntity() ) );
217 IntersectionIteratorType iend (
const typename Codim< 0 >::EntityType &entity )
const
219 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().iend( entity.impl().hostEntity() ) );
222 template<
class DataHandle,
class Data >
223 void communicate ( CommDataHandleIF< DataHandle, Data > &handle,
226 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
227 IdDataHandle< HostHandleType, GridFamily > handleWrapper( data(), handle );
228 hostGridPart().communicate( handleWrapper, iftype, dir );
231 template <
class EntitySeed >
232 typename Codim< EntitySeed::codimension >::EntityType
233 entity (
const EntitySeed &seed )
const
235 typedef typename Codim< EntitySeed::codimension >::EntityType::Implementation EntityImp;
236 return EntityImp( data(), hostGridPart().entity( seed ) );
240 template<
class Entity >
241 MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType >
242 convert (
const Entity &entity )
const
245 const auto& gridEntity = Fem::gridEntity( entity );
248 typedef typename Codim< Entity::codimension >::EntityType EntityType;
249 typedef typename EntityType::Implementation Implementation;
250 typedef MakeableInterfaceObject< EntityType > EntityObj;
252 return EntityObj( Implementation( data(), hostGridPart().convert( gridEntity ) ) );
255 const HostGridPartType &hostGridPart ()
const {
return hostGridPart_; }
257 HostGridPartType &hostGridPart () {
return hostGridPart_; }
259 typedef typename GridFamily::Traits::ExtraData ExtraData;
260 ExtraData data ()
const {
return ExtraData(); }
263 HostGridPartType hostGridPart_;
264 IndexSetType indexSet_;
272 template<
int codim,
int dim,
class Gr
idFamily >
273 struct GridEntityAccess<
Dune::ExtendedEntity< codim, dim, GridFamily, IdEntity > >
276 typedef GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType;
277 typedef typename HostAccessType::GridEntityType GridEntityType;
279 static const GridEntityType &gridEntity (
const EntityType &entity )
281 return HostAccessType::gridEntity( entity.impl().hostEntity() );
290 template<
class HostGr
idPart,
int codim, PartitionIteratorType partition >
291 class EntitySearch< IdGridPart< HostGridPart >, codim, partition >
293 typedef EntitySearch< IdGridPart< HostGridPart >, codim, partition > ThisType;
296 typedef IdGridPart< HostGridPart > GridPartType;
297 typedef typename GridPartType::ExtraData ExtraData;
299 typedef typename GridPartType::template Codim< codim >::EntityType EntityType;
301 typedef typename EntityType::Geometry::GlobalCoordinate GlobalCoordinateType;
303 explicit EntitySearch (
const GridPartType &gridPart )
304 : hostEntitySearch_( gridPart.hostGridPart() ),
305 data_( gridPart.data() )
308 EntityType operator() (
const GlobalCoordinateType &x )
const
310 typedef typename EntityType::Implementation EntityImpl;
311 return EntityImpl( data_, hostEntitySearch_( x ) );
315 const EntitySearch< HostGridPart > hostEntitySearch_;
interface class for an iterator over grid entities
Definition: entityiterator.hh:32
Wrapper class for wrapped entities added a cast operator to the host entity.
Definition: extendedentity.hh:23
IntersectionIteratorType::Intersection IntersectionType
type of intersection
Definition: gridpart.hh:388
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::IndexSetType IndexSetType
Index set implementation.
Definition: gridpart.hh:382
Traits::IntersectionIteratorType IntersectionIteratorType
type of intersection iterator
Definition: gridpart.hh:385
Traits::GridType GridType
Grid implementation.
Definition: gridpart.hh:380
void communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
corresponding communication method for grid part
Definition: gridpart.hh:292
Wrapper class for geometries.
Definition: geometry.hh:71
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: intersectioniterator.hh:83
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: intersection.hh:164
@ conforming
Output conforming data.
Definition: common.hh:73
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:132
Dune namespace.
Definition: alignedallocator.hh:13