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