dune-fem  2.8-git
gridview2gridpart.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
2 #define DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
3 
4 #include <utility>
5 
6 #include <dune/common/exceptions.hh>
7 
8 #include <dune/grid/common/gridenums.hh>
9 
14 
15 namespace Dune
16 {
17 
18  namespace Fem
19  {
20 
21  // Internal forward declaration
22  // ----------------------------
23 
24  template< class GridView, class Implementation, bool storeCopy=true >
25  class GridView2GridPart;
26 
27 
28 
29 #ifndef DOXYGEN
30 
31  // GridView2GridPartTraits
32  // -----------------------
33 
34  template< class GridView, class Implementation, bool storeCopy >
35  struct GridView2GridPartTraits
36  {
37  typedef Implementation GridPartType;
38 
39  typedef GridView GridViewType;
40  static const bool conforming = GridView::conforming;
41 
42  typedef typename GridViewType::Grid GridType;
43  typedef typename GridViewType::CollectiveCommunication CollectiveCommunicationType;
44 
46 
47  template< int codim >
48  struct Codim
49  {
50  typedef typename GridViewType::template Codim< codim >::Entity EntityType;
51  typedef typename GridType::template Codim< codim >::EntitySeed EntitySeedType;
52 
53  typedef typename GridViewType::template Codim< codim >::Geometry GeometryType;
54  typedef typename GridViewType::template Codim< codim >::LocalGeometry LocalGeometryType;
55 
56  template< PartitionIteratorType pitype >
57  struct Partition
58  {
59  typedef typename GridViewType::template Codim< codim >::template Partition< pitype >::Iterator IteratorType;
60  };
61  };
62 
63  typedef typename GridViewType::IntersectionIterator IntersectionIteratorType;
64 
65  typedef TwistUtility< GridType > TwistUtilityType;
66 
67  static const PartitionIteratorType indexSetPartitionType = All_Partition;
68  static const InterfaceType indexSetInterfaceType = All_All_Interface;
69  };
70 
71 #endif // #ifndef DOXYGEN
72 
73 
74 
75  // GridView2GridPart
76  // -----------------
77 
78  template< class GridView, class Implementation, bool storeCopy >
80  : public GridPartInterface< GridView2GridPartTraits< GridView, Implementation, storeCopy > >
81  {
83  typedef GridView2GridPartTraits< GridView, Implementation, storeCopy > TraitsType;
85 
86  public:
88  typedef typename BaseType::GridType GridType;
89 
92 
93  template< int codim >
94  struct Codim
95  : public BaseType::template Codim< codim >
96  {};
97 
100 
103 
106 
107  private:
109 
110  public:
111  using BaseType::grid;
112  using BaseType::boundaryId;
113 
118  explicit GridView2GridPart ( const GridView &gridView )
119  : gridView_( gridView ),
120  indexSet_( gridView_.indexSet() ),
121  dofManager_( DofManagerType::instance( gridView_.grid() ) )
122  {}
123 
124  explicit GridView2GridPart ( GridView &&gridView )
125  : gridView_( std::move( gridView ) ),
126  indexSet_( gridView_.indexSet() ),
127  dofManager_( DofManagerType::instance( gridView_.grid() ) )
128  {}
129 
131  : gridView_( rhs.gridView_ ),
132  indexSet_( gridView_.indexSet() ),
133  dofManager_( DofManagerType::instance( rhs.grid() ) )
134  {}
135 
137  {}
138 
146  const GridType &grid () const { return gridView_.grid(); }
147  GridType &grid () { return const_cast< GridType & >( gridView_.grid() ); }
148 
150  const IndexSetType &indexSet () const { return indexSet_; }
151 
153  template< int codim >
155  {
156  return begin< codim, InteriorBorder_Partition >();
157  }
158 
160  template< int codim, PartitionIteratorType pitype >
161  typename Codim< codim >::template Partition< pitype >::IteratorType begin () const
162  {
163  return gridView_.template begin< codim, pitype >();
164  }
165 
167  template< int codim >
169  {
170  return end< codim, InteriorBorder_Partition >();
171  }
172 
174  template< int codim, PartitionIteratorType pitype >
175  typename Codim< codim >::template Partition< pitype >::IteratorType end () const
176  {
177  return gridView_.template end< codim, pitype >();
178  }
179 
182  {
183  return gridView_.ibegin( entity );
184  }
185 
188  {
189  return gridView_.iend( entity );
190  }
191 
193  const CollectiveCommunicationType &comm () const { return gridView_.comm(); }
194 
196  template< class DataHandle, class DataType >
197  void communicate ( CommDataHandleIF< DataHandle, DataType > &dataHandle,
198  InterfaceType interface, CommunicationDirection direction ) const
199  {
200  gridView_.communicate( dataHandle, interface, direction );
201  }
202 
204  int sequence () const { return dofManager_.sequence(); }
205 
207  template < class EntitySeed >
208  typename Codim< EntitySeed::codimension >::EntityType
209  entity ( const EntitySeed &seed ) const
210  {
211  return grid().entity( seed );
212  }
213 
215  template <class Entity>
216  const Entity &convert( const Entity& entity ) const
217  {
218  return convert< Entity::codimension >( entity );
219  }
220 
222  // explicit operator const GridView& () const { return gridView_; }
223  const GridView& gridView() const { return gridView_; }
224 
227  private:
228  template< int codim >
229  const typename Codim< codim >::EntityType &
230  convert( const typename Codim< codim >::EntityType &entity ) const
231  {
232  return entity;
233  }
234 
235  std::conditional_t<storeCopy,const GridView,const GridView &> gridView_;
236  IndexSetType indexSet_;
237  DofManagerType &dofManager_;
238  };
239 
240  } // namespace Fem
241 
242 } // namespace Dune
243 
244 #endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
int sequence() const
return number of sequence, if dofmanagers memory was changed by calling some method like resize,...
Definition: dofmanager.hh:981
Definition: bindguard.hh:11
Interface for the GridPart classes A GridPart class allows to access only a specific subset of a grid...
Definition: gridpart.hh:77
PoliciesType::GridViewType GridViewType
Definition: gridpart.hh:113
const GridType & grid() const
Returns const reference to the underlying grid.
Definition: gridpart.hh:140
Traits::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridpart.hh:96
Traits::GridType GridType
type of Grid implementation
Definition: gridpart.hh:90
int boundaryId(const IntersectionType &intersection) const
return boundary if given an intersection
Definition: gridpart.hh:232
Traits::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridpart.hh:108
Traits::IndexSetType IndexSetType
Index set implementation.
Definition: gridpart.hh:93
Definition: gridview2gridpart.hh:81
Codim< codim >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:168
BaseType::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridview2gridpart.hh:99
const CollectiveCommunicationType & comm() const
obtain collective communication object
Definition: gridview2gridpart.hh:193
GridView2GridPart(const ThisType &rhs)
Definition: gridview2gridpart.hh:130
const GridType & grid() const
Returns const reference to the underlying grid.
Definition: gridview2gridpart.hh:146
GridView2GridPart(const GridView &gridView)
Definition: gridview2gridpart.hh:118
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
obtain entity pointer from entity seed
Definition: gridview2gridpart.hh:209
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
ibegin of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:181
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
iend of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:187
const IndexSetType & indexSet() const
Returns reference to index set of the underlying grid.
Definition: gridview2gridpart.hh:150
GridView2GridPart(GridView &&gridView)
Definition: gridview2gridpart.hh:124
Codim< codim >::template Partition< pitype >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:175
void communicate(CommDataHandleIF< DataHandle, DataType > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
corresponding communication method for grid part
Definition: gridview2gridpart.hh:197
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridview2gridpart.hh:105
BaseType::GridType GridType
type of Grid implementation
Definition: gridview2gridpart.hh:88
Codim< codim >::template Partition< pitype >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:161
BaseType::GridViewType GridViewType
Definition: gridview2gridpart.hh:91
Codim< codim >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:154
BaseType::IndexSetType IndexSetType
Index set implementation.
Definition: gridview2gridpart.hh:102
GridType & grid()
Definition: gridview2gridpart.hh:147
~GridView2GridPart()
Definition: gridview2gridpart.hh:136
const Entity & convert(const Entity &entity) const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:216
int sequence() const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:204
const GridView & gridView() const
cast to underlying grid view
Definition: gridview2gridpart.hh:223
Definition: gridview2gridpart.hh:96
wrapper for (adaptive) index sets that disables all support for adaptivity
Definition: nonadaptiveindexset.hh:55
Utility to get twist from IntersectionIterator, if provided by grid (i.e. AlbertaGrid,...
Definition: twistutility.hh:84
Definition: dofmanager.hh:762