dune-grid  2.3.1-rc1
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, PartitionIteratorType pitype >
27  class GridView;
28 
29 
30 
31  // GridViewTraits
32  // --------------
33 
34  template< class HGV, class CoordFunction, class Allocator, PartitionIteratorType pitype >
36  {
37  friend class GridView< HGV, CoordFunction, Allocator, pitype >;
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  typedef typename Grid::Traits::template Codim< codim >::EntityPointer EntityPointer;
68 
69  typedef typename Grid::template Codim< codim >::Geometry Geometry;
70  typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
71 
72  template< PartitionIteratorType pit >
73  struct Partition
74  {
77  };
78  };
79 
80  static const bool conforming = HostGridView::conforming;
81  };
82 
83 
84 
85  // GridView
86  // --------
87 
88  template< class HGV, class CoordFunction, class Allocator, PartitionIteratorType pitype >
89  class GridView
90  {
92 
93  public:
95 
96  typedef typename Traits::HostGridView HostGridView;
97 
98  typedef typename Traits::Grid Grid;
99 
100  typedef typename Traits::IndexSet IndexSet;
101 
103 
105 
107 
108  template< int codim >
109  struct Codim
110  : public Traits::template Codim< codim >
111  {};
112 
113  static const bool conforming = Traits::conforming;
114 
116  : grid_( &grid ),
117  hostGridView_( hostGridView )
118  {}
119 
120  const Grid &grid () const
121  {
122  assert( grid_ );
123  return *grid_;
124  }
125 
126  const IndexSet &indexSet () const
127  {
128  if( !indexSet_ )
129  indexSet_ = IndexSet( hostGridView().indexSet() );
130  return indexSet_;
131  }
132 
133  int size ( int codim ) const
134  {
135  return hostGridView().size( codim );
136  }
137 
138  int size ( const GeometryType &type ) const
139  {
140  return hostGridView().size( type );
141  }
142 
143  template< int codim >
144  typename Codim< codim >::Iterator begin () const
145  {
146  typedef typename Traits::template Codim< codim >::template Partition< pitype >::IteratorTraits IteratorTraits;
148  }
149 
150  template< int codim, PartitionIteratorType pit >
151  typename Codim< codim >::template Partition< pit >::Iterator begin () const
152  {
153  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorTraits IteratorTraits;
155  }
156 
157  template< int codim >
158  typename Codim< codim >::Iterator end () const
159  {
160  typedef typename Traits::template Codim< codim >::template Partition< pitype >::IteratorTraits IteratorTraits;
162  }
163 
164  template< int codim, PartitionIteratorType pit >
165  typename Codim< codim >::template Partition< pit >::Iterator end () const
166  {
167  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorTraits IteratorTraits;
169  }
170 
171  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
172  {
174  return IntersectionIteratorImpl( entity, hostGridView().ibegin( Grid::getRealImplementation( entity ).hostEntity() ) );
175  }
176 
177  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
178  {
180  return IntersectionIteratorImpl( entity, hostGridView().iend( Grid::getRealImplementation( entity ).hostEntity() ) );
181  }
182 
184  {
185  return hostGridView().comm();
186  }
187 
188  int overlapSize ( int codim ) const
189  {
190  return hostGridView().overlapSize( codim );
191  }
192 
193  int ghostSize ( int codim ) const
194  {
195  return hostGridView().ghostSize( codim );
196  }
197 
198  template< class DataHandle, class Data >
200  InterfaceType interface,
201  CommunicationDirection direction ) const
202  {
203  typedef CommDataHandleIF< DataHandle, Data > DataHandleIF;
204  typedef GeoGrid::CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
205 
206  WrappedDataHandle wrappedDataHandle( grid(), dataHandle );
207  hostGridView().communicate( wrappedDataHandle, interface, direction );
208  }
209 
210  const HostGridView &hostGridView () const { return hostGridView_; }
211 
212  private:
213  const Grid *grid_;
214  HostGridView hostGridView_;
215  mutable IndexSet indexSet_;
216  };
217 
218  } // namespace GeoGrid
219 
220 } // namespace Dune
221 
222 #endif // #ifndef DUNE_GEOGRID_GRIDVIEW_HH
Codim< codim >::template Partition< pit >::Iterator end() const
Definition: geometrygrid/gridview.hh:165
Codim< codim >::Iterator end() const
Definition: geometrygrid/gridview.hh:158
int size(int codim) const
Definition: geometrygrid/gridview.hh:133
int size(const GeometryType &type) const
Definition: geometrygrid/gridview.hh:138
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
IntersectionIterator ibegin(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/gridview.hh:171
Definition: geometrygrid/gridview.hh:27
GridView(const Grid &grid, const HostGridView &hostGridView)
Definition: geometrygrid/gridview.hh:115
Definition: geometrygrid/gridview.hh:109
Definition: geometrygrid/iterator.hh:200
Definition: geometrygrid/gridview.hh:35
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:164
Codim< codim >::Iterator begin() const
Definition: geometrygrid/gridview.hh:144
Traits::IndexSet IndexSet
Definition: geometrygrid/gridview.hh:100
int overlapSize(int codim) const
Definition: geometrygrid/gridview.hh:188
Definition: geometrygrid/iterator.hh:181
Grid::template Codim< codim >::Geometry Geometry
Definition: geometrygrid/gridview.hh:69
Dune::GeometryGrid< HostGrid, CoordFunction, Allocator > Grid
Definition: geometrygrid/gridview.hh:48
const HostGridView & hostGridView() const
Definition: geometrygrid/gridview.hh:210
IntersectionIterator iend(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/gridview.hh:177
Definition: geometrygrid/iterator.hh:21
static const bool conforming
Definition: geometrygrid/gridview.hh:113
interface class for an iterator over grid entitiesAn entity iterator is an iterator over a subset of ...
Definition: entityiterator.hh:35
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:74
Grid::Traits::template Codim< codim >::Entity Entity
Definition: geometrygrid/gridview.hh:66
int ghostSize(int codim) const
Definition: geometrygrid/gridview.hh:193
GeoGrid::IteratorTraits< HostGridView, codim, pitype, const Grid > IteratorTraits
Definition: geometrygrid/gridview.hh:63
Definition: geometrygrid/intersection.hh:20
Dune::EntityIterator< codim, const Grid, GeoGrid::Iterator< IteratorTraits > > Iterator
Definition: geometrygrid/gridview.hh:76
GeoGrid::IteratorTraits< HostGridView, codim, pit, const Grid > IteratorTraits
Definition: geometrygrid/gridview.hh:75
const IndexSet & indexSet() const
Definition: geometrygrid/gridview.hh:126
Definition: alugrid/common/declaration.hh:20
Grid::template Codim< codim >::LocalGeometry LocalGeometry
Definition: geometrygrid/gridview.hh:70
Codim< codim >::template Partition< pit >::Iterator begin() const
Definition: geometrygrid/gridview.hh:151
HostGridView::CollectiveCommunication CollectiveCommunication
Definition: geometrygrid/gridview.hh:58
const Grid & grid() const
Definition: geometrygrid/gridview.hh:120
Definition: geometrygrid/gridview.hh:61
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:386
Traits::Intersection Intersection
Definition: geometrygrid/gridview.hh:102
Traits::CollectiveCommunication CollectiveCommunication
Definition: geometrygrid/gridview.hh:106
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: common/grid.hh:358
A set of traits classes to store static information about grid implementation.
Definition: geometrygrid/gridview.hh:73
GeoGrid::IndexSet< const Grid, typename HostGridView::IndexSet > IndexSet
Definition: geometrygrid/gridview.hh:50
Traits::IntersectionIterator IntersectionIterator
Definition: geometrygrid/gridview.hh:104
Intersection of a mesh entities of codimension 0 ("elements") with a "neighboring" element or with th...
Definition: albertagrid/dgfparser.hh:26
GridView< HostGridView, CoordFunction, Allocator, pitype > GridViewImp
Definition: geometrygrid/gridview.hh:46
Dune::EntityIterator< codim, const Grid, GeoGrid::Iterator< IteratorTraits > > Iterator
Definition: geometrygrid/gridview.hh:64
Traits::HostGridView HostGridView
Definition: geometrygrid/gridview.hh:96
static const bool conforming
Definition: geometrygrid/gridview.hh:80
GridViewTraits< HGV, CoordFunction, Allocator, pitype > Traits
Definition: geometrygrid/gridview.hh:94
Definition: geometrygrid/datahandle.hh:71
Traits::Grid Grid
Definition: geometrygrid/gridview.hh:98
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:80
Grid::Traits::template Codim< codim >::EntityPointer EntityPointer
Definition: geometrygrid/gridview.hh:67
void communicate(CommDataHandleIF< DataHandle, Data > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
Definition: geometrygrid/gridview.hh:199
const CollectiveCommunication & comm() const
Definition: geometrygrid/gridview.hh:183
grid wrapper replacing the geometriesGeometryGrid wraps another DUNE grid and replaces its geometry b...
Definition: geometrygrid/declaration.hh:10
Definition: geometrygrid/indexsets.hh:25
Dune::IntersectionIterator< const Grid, GeoGrid::IntersectionIterator< const Grid, HostIntersectionIterator >, GeoGrid::Intersection< const Grid, HostIntersection > > IntersectionIterator
Definition: geometrygrid/gridview.hh:56
Dune::Intersection< const Grid, GeoGrid::Intersection< const Grid, HostIntersection > > Intersection
Definition: geometrygrid/gridview.hh:52
Definition: geometrygrid/entity.hh:60
Definition: geometrygrid/iterator.hh:200