dune-fem  2.4.1-rc
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 >
26 
27 
28 
29 #ifndef DOXYGEN
30 
31  // GridView2GridPartTraits
32  // -----------------------
33 
34  template< class GridView, class Implementation >
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 >::EntityPointer EntityPointerType;
51  typedef typename GridViewType::template Codim< codim >::Entity EntityType;
52 
53  typedef typename GridType::template Codim< codim >::EntitySeed EntitySeedType;
54 
55  typedef typename GridViewType::template Codim< codim >::Geometry GeometryType;
56  typedef typename GridViewType::template Codim< codim >::LocalGeometry LocalGeometryType;
57 
58  template< PartitionIteratorType pitype >
59  struct Partition
60  {
61  typedef typename GridViewType::template Codim< codim >::template Partition< pitype >::Iterator IteratorType;
62  };
63  };
64 
65  typedef typename GridViewType::IntersectionIterator IntersectionIteratorType;
66 
68 
69  static const PartitionIteratorType indexSetPartitionType = All_Partition;
70  static const InterfaceType indexSetInterfaceType = All_All_Interface;
71  };
72 
73 #endif // #ifndef DOXYGEN
74 
75 
76 
77  // GridView2GridPart
78  // -----------------
79 
80  template< class GridView, class Implementation >
81  class GridView2GridPart
82  : public GridPartInterface< GridView2GridPartTraits< GridView, Implementation > >
83  {
86 
87  public:
89  typedef typename BaseType::GridType GridType;
90 
93 
94  template< int codim >
95  struct Codim
96  : public BaseType::template Codim< codim >
97  {};
98 
101 
104 
107 
108  private:
110 
111  public:
112  using BaseType::grid;
113 
118  explicit GridView2GridPart ( const GridView &gridView )
119  : gridView_( gridView ),
120  indexSet_( gridView_.indexSet() ),
121  dofManager_( DofManagerType::instance( gridView.grid() ) )
122 
123  {}
124 
125  explicit GridView2GridPart ( GridView &&gridView )
126  : gridView_( std::move( gridView ) ),
127  indexSet_( gridView_.indexSet() ),
128  dofManager_( DofManagerType::instance( gridView.grid() ) )
129  {}
130 
131  GridView2GridPart ( const ThisType &rhs )
132  : gridView_( rhs.gridView_ ),
133  indexSet_( gridView_.indexSet() ),
134  dofManager_( DofManagerType::instance( rhs.grid() ) )
135  {}
136 
144  const GridType &grid () const { return gridView_.grid(); }
145 
147  const IndexSetType &indexSet () const { return indexSet_; }
148 
150  template< int codim >
151  typename Codim< codim >::IteratorType begin () const
152  {
153  return begin< codim, InteriorBorder_Partition >();
154  }
155 
157  template< int codim, PartitionIteratorType pitype >
158  typename Codim< codim >::template Partition< pitype >::IteratorType begin () const
159  {
160  return gridView_.template begin< codim, pitype >();
161  }
162 
164  template< int codim >
165  typename Codim< codim >::IteratorType end () const
166  {
167  return end< codim, InteriorBorder_Partition >();
168  }
169 
171  template< int codim, PartitionIteratorType pitype >
172  typename Codim< codim >::template Partition< pitype >::IteratorType end () const
173  {
174  return gridView_.template end< codim, pitype >();
175  }
176 
178  IntersectionIteratorType ibegin ( const typename Codim< 0 >::EntityType &entity ) const
179  {
180  return gridView_.ibegin( entity );
181  }
182 
184  IntersectionIteratorType iend ( const typename Codim< 0 >::EntityType &entity ) const
185  {
186  return gridView_.iend( entity );
187  }
188 
190  int boundaryId ( const typename BaseType::IntersectionType &intersection ) const
191  {
192 #if DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS
193  return intersection.boundaryId();
194 #else
195  DUNE_THROW( NotImplemented, "Method boundaryId() not implemented" );
196 #endif
197  }
198 
200  const CollectiveCommunicationType &comm () const { return gridView_.comm(); }
201 
203  template< class DataHandle, class DataType >
204  void communicate ( CommDataHandleIF< DataHandle, DataType > &dataHandle,
205  InterfaceType interface, CommunicationDirection direction ) const
206  {
207  gridView_.communicate( dataHandle, interface, direction );
208  }
209 
211  int sequence () const { return dofManager_.sequence(); }
212 
214  template < class EntitySeed >
215  typename Codim< EntitySeed::codimension >::EntityType
216  entity ( const EntitySeed &seed ) const
217  {
218  return grid().entity( seed );
219  }
220 
222  template <class Entity>
223  const Entity &convert( const Entity& entity ) const
224  {
225  return convert< Entity::codimension >( entity );
226  }
227 
229  explicit operator GridView () const { return gridView_; }
230 
233  private:
234  template< int codim >
235  const typename Codim< codim >::EntityType &
236  convert( const typename Codim< codim >::EntityType &entity ) const
237  {
238  return entity;
239  }
240 
241  GridView gridView_;
242  IndexSetType indexSet_;
243  DofManagerType &dofManager_;
244  };
245 
246  } // namespace Fem
247 
248 } // namespace Dune
249 
250 #endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
const GridType & grid() const
Returns const reference to the underlying grid.
Definition: gridview2gridpart.hh:144
int sequence() const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:211
Utility to get twist from IntersectionIterator, if provided by grid (i.e. AlbertaGrid, ALUGrid) otherwise return default values (correct for YASP/SGRID).
Definition: twistutility.hh:83
Traits::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridpart.hh:96
BaseType::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridview2gridpart.hh:100
Definition: datacollector.hh:45
Definition: gridview2gridpart.hh:95
const CollectiveCommunicationType & comm() const
obtain collective communication object
Definition: gridview2gridpart.hh:200
Traits::GridPartType GridPartType
Type of the implementation.
Definition: gridpart.hh:87
BaseType::IndexSetType IndexSetType
Index set implementation.
Definition: gridview2gridpart.hh:103
GridView2GridPart(const ThisType &rhs)
Definition: gridview2gridpart.hh:131
Codim< codim >::template Partition< pitype >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:158
Traits::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridpart.hh:108
Codim< codim >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:165
BaseType::GridType GridType
type of Grid implementation
Definition: gridview2gridpart.hh:89
Codim< codim >::template Partition< pitype >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:172
Traits::TwistUtilityType TwistUtilityType
Twist utility type.
Definition: gridpart.hh:99
void communicate(CommDataHandleIF< DataHandle, DataType > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
corresponding communication method for grid part
Definition: gridview2gridpart.hh:204
Definition: coordinate.hh:4
IntersectionIteratorType::Intersection IntersectionType
type of Intersection
Definition: gridpart.hh:111
Traits::IndexSetType IndexSetType
Index set implementation.
Definition: gridpart.hh:93
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridview2gridpart.hh:106
STL namespace.
BaseType::GridViewType GridViewType
Definition: gridview2gridpart.hh:92
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
ibegin of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:178
Codim< codim >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:151
Traits::GridType GridType
type of Grid implementation
Definition: gridpart.hh:90
void move(ArrayInterface< T > &array, const unsigned int oldOffset, const unsigned int newOffset, const unsigned int length)
Definition: array_inline.hh:38
const IndexSetType & indexSet() const
Returns reference to index set of the underlying grid.
Definition: gridview2gridpart.hh:147
const Entity & convert(const Entity &entity) const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:223
Interface for the GridPart classes A GridPart class allows to access only a specific subset of a grid...
Definition: gridpart.hh:75
wrapper for (adaptive) index sets that disables all support for adaptivity
Definition: nonadaptiveindexset.hh:20
GridView2GridPart(const GridView &gridView)
Definition: gridview2gridpart.hh:118
int boundaryId(const typename BaseType::IntersectionType &intersection) const
return boundary if given an intersection
Definition: gridview2gridpart.hh:190
Definition: gridview2gridpart.hh:25
GridView2GridPart(GridView &&gridView)
Definition: gridview2gridpart.hh:125
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
iend of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:184
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
obtain entity pointer from entity seed
Definition: gridview2gridpart.hh:216