My Project
gridview.hh
1 // -*- mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=2 sw=2 sts=2:
3 #ifndef DUNE_POLYHEDRALGRID_GRIDVIEW_HH
4 #define DUNE_POLYHEDRALGRID_GRIDVIEW_HH
5 
6 //- dune-common includes
7 #include <dune/common/typetraits.hh>
8 
9 //- dune-grid includes
10 #include <dune/grid/common/capabilities.hh>
11 #include <dune/grid/common/gridview.hh>
12 
13 //- polyhedralgrid includes
14 #include <opm/grid/polyhedralgrid/indexset.hh>
15 #include <opm/grid/polyhedralgrid/intersection.hh>
16 #include <opm/grid/polyhedralgrid/intersectioniterator.hh>
17 #include <opm/grid/polyhedralgrid/iterator.hh>
18 
19 namespace Dune
20 {
21 
22  // Internal Forward Declarations
23  // -----------------------------
24 
25  template< int dim, int dimworld, typename coord_t, PartitionIteratorType defaultpitype >
26  class PolyhedralGridView;
27 
28  template< int dim, int dimworld, typename coord_t, PartitionIteratorType ptype >
29  struct PolyhedralGridViewTraits;
30 
31 
32  // PolyhedralGridView
33  // ------------------
34 
35  template< int dim, int dimworld, typename coord_t, PartitionIteratorType defaultpitype >
37  {
39 
40  public:
42 
43  typedef typename Traits::Grid Grid;
44  typedef typename Traits::IndexSet IndexSet;
45  typedef typename Traits::Intersection Intersection;
46  typedef typename Traits::IntersectionIterator IntersectionIterator;
47  typedef typename Traits::CollectiveCommunication CollectiveCommunication;
48 
49  template< int codim >
50  struct Codim
51  : public Traits::template Codim< codim >
52  {};
53 
54  static const bool conforming = Traits :: conforming;
55  static const PartitionIteratorType pitype = Traits :: pitype;
56 
57  PolyhedralGridView ( const Grid &grid, const int level = 0 )
58  : grid_( &grid )
59  {
60  (void)level;
61  }
62 
63  const Grid &grid () const
64  {
65  assert( grid_ );
66  return *grid_;
67  }
68 
69  const IndexSet &indexSet () const
70  {
71  return grid().leafIndexSet();
72  }
73 
74  int size ( int codim ) const
75  {
76  return grid().size( codim );
77  }
78 
79  int size ( const GeometryType &type ) const
80  {
81  return grid().size( type );
82  }
83 
84  template< int codim >
85  typename Codim< codim >::Iterator begin () const
86  {
87  return begin< codim, defaultpitype >();
88  }
89 
90  template< int codim, PartitionIteratorType pit >
91  typename Codim< codim >::template Partition< pit >::Iterator begin () const
92  {
93  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorImpl Impl;
94  return Impl( grid().extraData(), true );
95  }
96 
97  template< int codim >
98  typename Codim< codim >::Iterator end () const
99  {
100  return end< codim, defaultpitype >();
101  }
102 
103  template< int codim, PartitionIteratorType pit >
104  typename Codim< codim >::template Partition< pit >::Iterator end () const
105  {
106  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorImpl Impl;
107  return Impl( grid().extraData(), false );
108  }
109 
110  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
111  {
112  typedef typename Traits::IntersectionIteratorImpl IntersectionIteratorImpl;
113  return IntersectionIteratorImpl( grid().extraData(), entity.seed(), true);
114  }
115 
116  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
117  {
118  typedef typename Traits::IntersectionIteratorImpl IntersectionIteratorImpl;
119  return IntersectionIteratorImpl( grid().extraData(), entity.seed(), false);
120  }
121 
122  const CollectiveCommunication &comm () const
123  {
124  return grid().comm();
125  }
126 
127  int overlapSize ( int codim ) const
128  {
129  return grid().overlapSize( codim );
130  }
131 
132  int ghostSize ( int codim ) const
133  {
134  return grid().ghostSize( codim );
135  }
136 
137  template< class DataHandle, class Data >
138  void communicate ( CommDataHandleIF< DataHandle, Data > /*&dataHandle*/,
139  InterfaceType /*interface*/,
140  CommunicationDirection /*direction*/ ) const
141  {
142  }
143 
144  protected:
145  const Grid *grid_;
146  };
147 
148  // PolyhedralGridViewTraits
149  // ------------------------
150 
151  template< int dim, int dimworld, typename coord_t, PartitionIteratorType ptype >
153  {
155  static const PartitionIteratorType pitype = ptype;
156 
159 
162 
163  typedef Dune::Intersection< const Grid, IntersectionImpl > Intersection;
164  typedef Dune::IntersectionIterator< const Grid, IntersectionIteratorImpl, IntersectionImpl > IntersectionIterator;
165 
166  typedef typename Grid::CollectiveCommunication CollectiveCommunication;
167 
168  template< int codim >
169  struct Codim
170  {
171  typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
172  typedef typename Grid::Traits::template Codim< codim >::EntityPointer EntityPointer;
173 
174  typedef typename Grid::template Codim< codim >::Geometry Geometry;
175  typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
176 
177  template< PartitionIteratorType pit >
178  struct Partition
179  {
181  typedef Dune::EntityIterator< codim, const Grid, IteratorImpl > Iterator;
182  };
183 
184  typedef typename Partition< pitype >::Iterator Iterator;
185  };
186 
187  static const bool conforming = false;
188  };
189 
190 } // namespace Dune
191 
192 #endif // #ifndef DUNE_POLYHEDRALGRID_GRIDVIEW_HH
Definition: indexset.hh:24
Definition: intersectioniterator.hh:16
Definition: intersection.hh:20
Definition: iterator.hh:21
Definition: gridview.hh:37
identical grid wrapper
Definition: grid.hh:158
const CollectiveCommunication & comm() const
obtain CollectiveCommunication object
Definition: grid.hh:709
int ghostSize(int codim) const
obtain size of ghost region for the leaf grid
Definition: grid.hh:622
int size(int, int codim) const
obtain number of entites on a level
Definition: grid.hh:425
Traits::CollectiveCommunication CollectiveCommunication
communicator with all other processes having some part of the grid
Definition: grid.hh:310
int overlapSize(int) const
obtain size of overlap region for the leaf grid
Definition: grid.hh:613
Copyright 2019 Equinor AS.
Definition: CartesianIndexMapper.hpp:10
Definition: gridview.hh:170
Definition: gridview.hh:153
Definition: gridview.hh:52