dune-grid  2.7.0
geometrygrid/gridview.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_GEOGRID_GRIDVIEW_HH
4 #define DUNE_GEOGRID_GRIDVIEW_HH
5 
6 #include <dune/common/typetraits.hh>
7 #include <dune/common/exceptions.hh>
8 
16 
17 namespace Dune
18 {
19 
20  namespace GeoGrid
21  {
22 
23  // Internal Forward Declarations
24  // -----------------------------
25 
26  template< class HGV, class CoordFunction, class Allocator >
27  class GridView;
28 
29 
30 
31  // GridViewTraits
32  // --------------
33 
34  template< class HGV, class CoordFunction, class Allocator >
36  {
37  friend class GridView< HGV, CoordFunction, Allocator >;
38 
39  typedef HGV HostGridView;
40 
41  typedef typename HostGridView::Grid HostGrid;
42  typedef typename HostGridView::Intersection HostIntersection;
43  typedef typename HostGridView::IntersectionIterator HostIntersectionIterator;
44 
45  public:
47 
49 
51 
53 
57 
58  typedef typename HostGridView::CollectiveCommunication CollectiveCommunication;
59 
60  template< int codim >
61  struct Codim
62  {
65 
66  typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
67 
68  typedef typename Grid::template Codim< codim >::Geometry Geometry;
69  typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
70 
71  template< PartitionIteratorType pit >
72  struct Partition
73  {
76  };
77  };
78 
79  static const bool conforming = HostGridView::conforming;
80  };
81 
82 
83 
84  // GridView
85  // --------
86 
87  template< class HGV, class CoordFunction, class Allocator >
88  class GridView
89  {
91 
92  public:
94 
95  typedef typename Traits::HostGridView HostGridView;
96 
97  typedef typename Traits::Grid Grid;
98 
99  typedef typename Traits::IndexSet IndexSet;
100 
102 
104 
106 
107  template< int codim >
108  struct Codim
109  : public Traits::template Codim< codim >
110  {};
111 
112  static const bool conforming = Traits::conforming;
113 
115  : grid_( &grid ), hostGridView_( hostGridView )
116  {}
117 
118  GridView ( const This &other )
119  : grid_( other.grid_ ), hostGridView_( other.hostGridView_ )
120  {}
121 
122  GridView ( This &&other )
123  : grid_( other.grid_ ), hostGridView_( std::move( other.hostGridView_ ) )
124  {}
125 
126  This &operator= ( const This &other )
127  {
128  grid_ = other.grid_;
129  hostGridView_ = other.hostGridView_;
130  if( indexSet_ )
131  indexSet_.reset( hostGridView().indexSet() );
132  return *this;
133  }
134 
135  This &operator= ( This &&other )
136  {
137  grid_ = other.grid_;
138  hostGridView_ = std::move( other.hostGridView_ );
139  if( indexSet_ )
140  indexSet_.reset( hostGridView().indexSet() );
141  return *this;
142  }
143 
144  const Grid &grid () const
145  {
146  assert( grid_ );
147  return *grid_;
148  }
149 
150  const IndexSet &indexSet () const
151  {
152  indexSet_.reset( hostGridView().indexSet() );
153  return indexSet_;
154  }
155 
156  int size ( int codim ) const
157  {
158  return hostGridView().size( codim );
159  }
160 
161  int size ( const GeometryType &type ) const
162  {
163  return hostGridView().size( type );
164  }
165 
166  template< int codim >
167  typename Codim< codim >::Iterator begin () const
168  {
169  return begin< codim, All_Partition >();
170  }
171 
172  template< int codim, PartitionIteratorType pit >
173  typename Codim< codim >::template Partition< pit >::Iterator begin () const
174  {
175  return Traits::template Codim< codim >::template Partition< pit >::IteratorImp::begin( grid(), hostGridView() );
176  }
177 
178  template< int codim >
179  typename Codim< codim >::Iterator end () const
180  {
181  return end< codim, All_Partition >();
182  }
183 
184  template< int codim, PartitionIteratorType pit >
185  typename Codim< codim >::template Partition< pit >::Iterator end () const
186  {
187  return Traits::template Codim< codim >::template Partition< pit >::IteratorImp::end( grid(), hostGridView() );
188  }
189 
190  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
191  {
193  return IntersectionIteratorImpl( entity, hostGridView().ibegin( entity.impl().hostEntity() ) );
194  }
195 
196  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
197  {
199  return IntersectionIteratorImpl( entity, hostGridView().iend( entity.impl().hostEntity() ) );
200  }
201 
203  {
204  return hostGridView().comm();
205  }
206 
207  int overlapSize ( int codim ) const
208  {
209  return hostGridView().overlapSize( codim );
210  }
211 
212  int ghostSize ( int codim ) const
213  {
214  return hostGridView().ghostSize( codim );
215  }
216 
217  template< class DataHandle, class Data >
219  InterfaceType interface,
220  CommunicationDirection direction ) const
221  {
222  typedef CommDataHandleIF< DataHandle, Data > DataHandleIF;
223  typedef GeoGrid::CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
224 
225  WrappedDataHandle wrappedDataHandle( grid(), dataHandle );
226  hostGridView().communicate( wrappedDataHandle, interface, direction );
227  }
228 
229  const HostGridView &hostGridView () const { return hostGridView_; }
230 
231  private:
232  const Grid *grid_;
233  HostGridView hostGridView_;
234  mutable IndexSet indexSet_;
235  };
236 
237  } // namespace GeoGrid
238 
239 } // namespace Dune
240 
241 #endif // #ifndef DUNE_GEOGRID_GRIDVIEW_HH
Dune::GeoGrid::GridViewTraits::Intersection
Dune::Intersection< const Grid, GeoGrid::Intersection< const Grid, HostIntersection > > Intersection
Definition: geometrygrid/gridview.hh:52
Dune::GeoGrid::GridView::iend
IntersectionIterator iend(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/gridview.hh:196
indexsets.hh
Dune::GeoGrid::GridViewTraits::IntersectionIterator
Dune::IntersectionIterator< const Grid, GeoGrid::IntersectionIterator< const Grid, HostIntersectionIterator >, GeoGrid::Intersection< const Grid, HostIntersection > > IntersectionIterator
Definition: geometrygrid/gridview.hh:56
Dune::GeoGrid::GridViewTraits::Codim::Partition::IteratorImp
GeoGrid::Iterator< HostGridView, codim, pit, const Grid > IteratorImp
Definition: geometrygrid/gridview.hh:74
Dune::GeoGrid::IndexSet
Definition: geometrygrid/indexsets.hh:25
Dune::GeoGrid::GridView::ghostSize
int ghostSize(int codim) const
Definition: geometrygrid/gridview.hh:212
Dune::GeoGrid::GridViewTraits::Codim::IteratorImp
GeoGrid::Iterator< HostGridView, codim, All_Partition, const Grid > IteratorImp
Definition: geometrygrid/gridview.hh:63
Dune::VTK::conforming
@ conforming
Output conforming data.
Definition: common.hh:72
Dune::GeoGrid::GridView::HostGridView
Traits::HostGridView HostGridView
Definition: geometrygrid/gridview.hh:95
Dune::GeoGrid::GridView::indexSet
const IndexSet & indexSet() const
Definition: geometrygrid/gridview.hh:150
Dune::IntersectionIterator
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: common/grid.hh:345
Dune::GeoGrid::GridViewTraits::Codim::Partition
Definition: geometrygrid/gridview.hh:72
Dune::GeoGrid::GridView::hostGridView
const HostGridView & hostGridView() const
Definition: geometrygrid/gridview.hh:229
Dune::GeoGrid::Iterator
Definition: iterator.hh:28
Dune::GeoGrid::GridView::end
Codim< codim >::template Partition< pit >::Iterator end() const
Definition: geometrygrid/gridview.hh:185
Dune::GeoGrid::GridViewTraits::Codim::Entity
Grid::Traits::template Codim< codim >::Entity Entity
Definition: geometrygrid/gridview.hh:66
Dune::GeoGrid::GridViewTraits::IndexSet
GeoGrid::IndexSet< const Grid, typename HostGridView::IndexSet > IndexSet
Definition: geometrygrid/gridview.hh:50
Dune::GeoGrid::GridView::GridView
GridView(This &&other)
Definition: geometrygrid/gridview.hh:122
intersectioniterator.hh
Dune::GeoGrid::GridView::CollectiveCommunication
Traits::CollectiveCommunication CollectiveCommunication
Definition: geometrygrid/gridview.hh:105
Dune::GeoGrid::GridViewTraits::CollectiveCommunication
HostGridView::CollectiveCommunication CollectiveCommunication
Definition: geometrygrid/gridview.hh:58
Dune::GeoGrid::GridViewTraits::Codim::Partition::Iterator
Dune::EntityIterator< codim, const Grid, IteratorImp > Iterator
Definition: geometrygrid/gridview.hh:75
Dune::GeoGrid::GridView::Traits
GridViewTraits< HGV, CoordFunction, Allocator > Traits
Definition: geometrygrid/gridview.hh:93
Dune::CommDataHandleIF
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:75
Dune::Intersection
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: common/grid.hh:344
Dune::GeoGrid::IntersectionIterator
Definition: geometrygrid/entity.hh:58
Dune::GeoGrid::GridViewTraits::Codim
Definition: geometrygrid/gridview.hh:61
Dune::GeoGrid::GridView::comm
const CollectiveCommunication & comm() const
Definition: geometrygrid/gridview.hh:202
intersection.hh
Dune::GeoGrid::GridViewTraits::Grid
Dune::GeometryGrid< HostGrid, CoordFunction, Allocator > Grid
Definition: geometrygrid/gridview.hh:48
Dune::GeoGrid::GridView::size
int size(const GeometryType &type) const
Definition: geometrygrid/gridview.hh:161
Dune::GeoGrid::GridView::Grid
Traits::Grid Grid
Definition: geometrygrid/gridview.hh:97
datahandle.hh
Dune::GeometryGrid
grid wrapper replacing the geometries
Definition: declaration.hh:10
Dune::GeoGrid::GridViewTraits::Codim::Iterator
Dune::EntityIterator< codim, const Grid, IteratorImp > Iterator
Definition: geometrygrid/gridview.hh:64
iterator.hh
Dune::GeoGrid::GridView::communicate
void communicate(CommDataHandleIF< DataHandle, Data > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
Definition: geometrygrid/gridview.hh:218
Dune::GeoGrid::GridView::begin
Codim< codim >::template Partition< pit >::Iterator begin() const
Definition: geometrygrid/gridview.hh:173
Dune::GeoGrid::GridView::size
int size(int codim) const
Definition: geometrygrid/gridview.hh:156
Dune::GeoGrid::GridView::ibegin
IntersectionIterator ibegin(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/gridview.hh:190
Dune::GeoGrid::GridView::GridView
GridView(const This &other)
Definition: geometrygrid/gridview.hh:118
Dune::GeoGrid::GridViewTraits::conforming
static const bool conforming
Definition: geometrygrid/gridview.hh:79
capabilities.hh
A set of traits classes to store static information about grid implementation.
Dune::EntityIterator
interface class for an iterator over grid entities
Definition: entityiterator.hh:29
Dune::GeoGrid::GridView::end
Codim< codim >::Iterator end() const
Definition: geometrygrid/gridview.hh:179
Dune::GeoGrid::IndexSet::reset
void reset()
Definition: geometrygrid/indexsets.hh:95
Dune::GeoGrid::GridView
Definition: geometrygrid/gridview.hh:27
Dune::GeoGrid::GridView::begin
Codim< codim >::Iterator begin() const
Definition: geometrygrid/gridview.hh:167
Dune::GeoGrid::CommDataHandle
Definition: geometrygrid/datahandle.hh:23
Dune::GeoGrid::GridView::conforming
static const bool conforming
Definition: geometrygrid/gridview.hh:112
Dune::GeoGrid::GridView::operator=
This & operator=(const This &other)
Definition: geometrygrid/gridview.hh:126
Dune::GeoGrid::GridView::overlapSize
int overlapSize(int codim) const
Definition: geometrygrid/gridview.hh:207
Dune::GeoGrid::GridViewTraits::Codim::Geometry
Grid::template Codim< codim >::Geometry Geometry
Definition: geometrygrid/gridview.hh:68
Dune::GeoGrid::GridView::IndexSet
Traits::IndexSet IndexSet
Definition: geometrygrid/gridview.hh:99
Dune::GeoGrid::Intersection
Definition: geometrygrid/intersection.hh:19
Dune::Grid
Grid abstract base class.
Definition: common/grid.hh:373
Dune::GeoGrid::GridView::grid
const Grid & grid() const
Definition: geometrygrid/gridview.hh:144
Dune::CommunicationDirection
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:168
gridview.hh
Dune::GeoGrid::GridViewTraits::GridViewImp
GridView< HostGridView, CoordFunction, Allocator > GridViewImp
Definition: geometrygrid/gridview.hh:46
Dune::GeoGrid::GridView::Codim
Definition: geometrygrid/gridview.hh:108
Dune::GeoGrid::GridView::Intersection
Traits::Intersection Intersection
Definition: geometrygrid/gridview.hh:101
Dune::GeoGrid::GridViewTraits
Definition: geometrygrid/gridview.hh:35
Dune::InterfaceType
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:84
Dune
Include standard header files.
Definition: agrid.hh:58
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:180
Dune::GeoGrid::GridView::IntersectionIterator
Traits::IntersectionIterator IntersectionIterator
Definition: geometrygrid/gridview.hh:103
Dune::GeoGrid::GridView::GridView
GridView(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/gridview.hh:114
Dune::GeoGrid::GridViewTraits::Codim::LocalGeometry
Grid::template Codim< codim >::LocalGeometry LocalGeometry
Definition: geometrygrid/gridview.hh:69