Dune Core Modules (unstable)

gridview.hh
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_GRID_COMMON_GRIDVIEW_HH
6 #define DUNE_GRID_COMMON_GRIDVIEW_HH
7 
8 #include <typeinfo>
9 
10 #include <dune/common/std/type_traits.hh>
11 #include <dune/common/iteratorrange.hh>
12 #include <dune/common/parallel/future.hh>
13 
14 #include <dune/geometry/type.hh>
15 
17 #include <dune/grid/common/rangegenerators.hh>
18 
19 namespace Dune
20 {
21 
22  template< int, int, class, class >
23  class GridDefaultImplementation;
24 
25 
26 
64  template< class ViewTraits >
65  class GridView
66  {
68 
69  public:
75  typedef typename ViewTraits :: GridViewImp Implementation;
76 
77  typedef typename ViewTraits :: GridViewImp GridViewImp;
78 
80  typedef ViewTraits Traits;
81 
83  typedef typename Traits :: Grid Grid;
84 
86  typedef typename Traits :: IndexSet IndexSet;
87 
90 
93 
98  using Communication = typename Traits :: Communication;
99 
103  template< int cd >
104  struct Codim {
106  typedef typename Traits :: template Codim<cd> :: Iterator Iterator;
107 
109  typedef typename Traits :: template Codim<cd> :: Entity Entity;
110 
112  typedef typename Traits :: template Codim<cd> :: Geometry Geometry;
113 
115  typedef typename Traits :: template Codim<cd> :: LocalGeometry LocalGeometry;
116 
118  template< PartitionIteratorType pit >
119  struct Partition
120  {
122  typedef typename Traits :: template Codim< cd >
124  };
125  }; //: public Traits :: template Codim<cd> {};
126 
128  constexpr static bool conforming = Traits :: conforming;
129 
131  typedef typename Grid::ctype ctype;
132 
134  constexpr static int dimension = Grid :: dimension;
135 
137  constexpr static int dimensionworld = Grid :: dimensionworld;
138 
139  public:
140 
141  //===========================================================
145  //===========================================================
147  GridView ( const Implementation &imp )
148  : impl_( imp )
149  {}
151 
153  GridView ( const ThisType &other )
154  : impl_( other.impl_ )
155  {}
156 
158  ThisType &operator= ( const ThisType &other )
159  {
160  impl_ = other.impl_;
161  return *this;
162  }
163 
164  public:
166  const Grid &grid () const
167  {
168  return impl().grid();
169  }
170 
177  const IndexSet &indexSet () const
178  {
179  return impl().indexSet();
180  }
181 
183  int size ( int codim ) const
184  {
185  return impl().size( codim );
186  }
187 
189  int size ( const GeometryType &type ) const
190  {
191  return impl().size( type );
192  }
193 
194  private:
195 
196  template<class I>
197  using HasIsConformingMethod = decltype(std::declval<I>().isConforming());
198 
199  public:
200 
202  bool isConforming () const
203  {
204  // if implementation provides a method isConforming, call it
205  if constexpr (Std::is_detected_v<HasIsConformingMethod, Implementation>)
206  {
207  return impl().isConforming();
208  }
209  else
210  {
211  // otherwise default to static conforming flag
212  return bool(conforming);
213  }
214  }
215 
222  template<class EntityType>
223  bool contains (const EntityType& e) const
224  {
225  return impl().indexSet().contains(e);
226  }
227 
229  template< int cd >
230  typename Codim< cd > :: Iterator begin () const
231  {
232  return impl().template begin<cd>();
233  }
234 
236  template< int cd >
237  typename Codim< cd > :: Iterator end () const
238  {
239  return impl().template end<cd>();
240  }
241 
243  template< int cd , PartitionIteratorType pitype >
244  typename Codim< cd > :: template Partition< pitype > :: Iterator
245  begin () const
246  {
247  return impl().template begin<cd,pitype>();
248  }
249 
251  template< int cd, PartitionIteratorType pitype >
252  typename Codim< cd > :: template Partition< pitype > :: Iterator
253  end () const
254  {
255  return impl().template end<cd,pitype>();
256  }
257 
260  ibegin ( const typename Codim< 0 > :: Entity &entity ) const
261  {
262  return impl().ibegin(entity);
263  }
264 
267  iend ( const typename Codim< 0 > :: Entity &entity ) const
268  {
269  return impl().iend(entity);
270  }
271 
273  const Communication &comm () const
274  {
275  return impl().comm();
276  }
277 
279  int overlapSize(int codim) const
280  {
281  return impl().overlapSize(codim);
282  }
283 
285  int ghostSize(int codim) const
286  {
287  return impl().ghostSize(codim);
288  }
289 
291  template< class DataHandleImp, class DataType >
293  InterfaceType iftype,
294  CommunicationDirection dir ) const
295  {
296  typedef decltype( impl().communicate(data,iftype,dir) ) CommFuture;
297  return communicate( data,iftype, dir,
298  std::integral_constant< bool, std::is_same< CommFuture, void > :: value >() );
299  }
300 
306  Implementation &impl () { return impl_; }
307 
313  const Implementation &impl () const { return impl_; }
314 
315  protected:
317  template< class DataHandleImp, class DataType >
319  InterfaceType iftype,
320  CommunicationDirection dir, std::integral_constant< bool, false > ) const
321  {
322  return impl().communicate(data,iftype,dir);
323  }
324 
325  struct DeprecatedMethodEmptyFuture : public Future<void>
326  {
327  void printMessage() const
328  {
329  std::cerr << "WARNING: GridView::communicate of '" <<
330  typeid( Implementation ).name() << "' still returns void. Please update implementation to new interface returning a future object!" << std::endl;
331  }
332 
333  bool ready () {
334  printMessage();
335  return true;
336  }
337  void wait () { printMessage(); }
338  bool valid () const { printMessage(); return true; }
339  };
340 
342  template< class DataHandleImp, class DataType >
344  InterfaceType iftype,
345  CommunicationDirection dir, std::integral_constant< bool, true > ) const
346  {
347  impl().communicate(data,iftype,dir);
348  return DeprecatedMethodEmptyFuture();
349  }
350 
351  Implementation impl_;
352  };
353 
354 } // namespace Dune
355 
356 #endif // #ifndef DUNE_GRID_COMMON_GRIDVIEW_HH
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:78
Type-erasure for future-like objects. A future-like object is a object satisfying the interface of Fu...
Definition: future.hh:30
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:114
Grid view abstract base class.
Definition: gridview.hh:66
constexpr static int dimension
The dimension of the grid.
Definition: grid.hh:387
constexpr static int dimensionworld
The dimension of the world the grid lives in.
Definition: grid.hh:390
ct ctype
Define type used for coordinates in grid module.
Definition: grid.hh:518
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: intersectioniterator.hh:83
Describes the parallel communication interface class for MessageBuffers and DataHandles.
const Implementation & impl() const
access to the underlying implementation
Definition: gridview.hh:313
Traits ::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridview.hh:92
const Communication & comm() const
obtain communication object
Definition: gridview.hh:273
ViewTraits Traits
Traits class.
Definition: gridview.hh:80
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
obtain begin intersection iterator with respect to this view
Definition: gridview.hh:260
Implementation & impl()
access to the underlying implementation
Definition: gridview.hh:306
int overlapSize(int codim) const
Return size of the overlap region for a given codim on the grid view.
Definition: gridview.hh:279
int size(const GeometryType &type) const
obtain number of entities with a given geometry type
Definition: gridview.hh:189
int size(int codim) const
obtain number of entities in a given codimension
Definition: gridview.hh:183
Traits ::IndexSet IndexSet
type of the index set
Definition: gridview.hh:86
auto communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
Communicate data on this view.
Definition: gridview.hh:292
auto communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir, std::integral_constant< bool, false >) const
Communicate data on this view.
Definition: gridview.hh:318
Traits ::template Codim< cd >::template Partition< pit >::Iterator Iterator
iterator over a given codim and partition type
Definition: gridview.hh:123
typename Traits ::Communication Communication
A type that is a model of Dune::Communication. It provides a portable way for communication on the se...
Definition: gridview.hh:98
ViewTraits ::GridViewImp Implementation
type of underlying implementation
Definition: gridview.hh:75
Traits ::template Codim< cd >::Iterator Iterator
type of iterator returned by the grid view
Definition: gridview.hh:106
constexpr static int dimension
The dimension of the grid.
Definition: gridview.hh:134
constexpr static int dimensionworld
The dimension of the world the grid lives in.
Definition: gridview.hh:137
Codim< cd >::template Partition< pitype >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:245
Codim< cd >::Iterator begin() const
obtain begin iterator for this view
Definition: gridview.hh:230
Codim< cd >::template Partition< pitype >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:253
Traits ::template Codim< cd >::Geometry Geometry
type of the geometry implementation
Definition: gridview.hh:112
Traits ::template Codim< cd >::Entity Entity
type of corresponding entity
Definition: gridview.hh:109
ThisType & operator=(const ThisType &other)
assignment operator
Definition: gridview.hh:158
const Grid & grid() const
obtain a const reference to the underlying hierarchic grid
Definition: gridview.hh:166
GridView(const Implementation &imp)
constructor (engine concept)
Definition: gridview.hh:147
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
obtain end intersection iterator with respect to this view
Definition: gridview.hh:267
Grid::ctype ctype
type used for coordinates in grid
Definition: gridview.hh:131
auto communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir, std::integral_constant< bool, true >) const
Communicate data on this view.
Definition: gridview.hh:343
bool contains(const EntityType &e) const
Return true if the given entity is contained in this grid view.
Definition: gridview.hh:223
Traits ::template Codim< cd >::LocalGeometry LocalGeometry
type of the implementation for local geometries
Definition: gridview.hh:115
Traits ::Intersection Intersection
type of the intersection
Definition: gridview.hh:89
Traits ::Grid Grid
type of the grid
Definition: gridview.hh:83
const IndexSet & indexSet() const
obtain the index set
Definition: gridview.hh:177
constexpr static bool conforming
Export if this grid view is guaranteed conforming.
Definition: gridview.hh:128
bool isConforming() const
return true if current state of grid view represents a conforming grid
Definition: gridview.hh:202
GridView(const ThisType &other)
Copy constructor.
Definition: gridview.hh:153
Codim< cd >::Iterator end() const
obtain end iterator for this view
Definition: gridview.hh:237
int ghostSize(int codim) const
Return size of the ghost region for a given codim on the grid view.
Definition: gridview.hh:285
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:170
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:86
concept Intersection
Model of an intersection.
Definition: intersection.hh:23
concept Grid
Requirements for implementations of the Dune::Grid interface.
Definition: grid.hh:98
concept IndexSet
Model of an index set.
Definition: indexidset.hh:44
concept IntersectionIterator
Model of an intersection iterator.
Definition: intersectioniterator.hh:21
Dune namespace.
Definition: alignedallocator.hh:13
Static tag representing a codimension.
Definition: dimension.hh:24
Define types needed to iterate over entities of a given partition type.
Definition: gridview.hh:120
A struct that collects all associated types of one implementation from the Traits class.
Definition: gridview.hh:104
A unique label for each type of element that can occur in a grid.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 18, 22:30, 2024)