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  bool isConforming() const { return bool(conforming); }
75 
76  int size ( int codim ) const
77  {
78  return grid().size( codim );
79  }
80 
81  int size ( const GeometryType &type ) const
82  {
83  return grid().size( type );
84  }
85 
86  template< int codim >
87  typename Codim< codim >::Iterator begin () const
88  {
89  return begin< codim, defaultpitype >();
90  }
91 
92  template< int codim, PartitionIteratorType pit >
93  typename Codim< codim >::template Partition< pit >::Iterator begin () const
94  {
95  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorImpl Impl;
96  return Impl( grid().extraData(), true );
97  }
98 
99  template< int codim >
100  typename Codim< codim >::Iterator end () const
101  {
102  return end< codim, defaultpitype >();
103  }
104 
105  template< int codim, PartitionIteratorType pit >
106  typename Codim< codim >::template Partition< pit >::Iterator end () const
107  {
108  typedef typename Traits::template Codim< codim >::template Partition< pit >::IteratorImpl Impl;
109  return Impl( grid().extraData(), false );
110  }
111 
112  IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
113  {
114  typedef typename Traits::IntersectionIteratorImpl IntersectionIteratorImpl;
115  return IntersectionIteratorImpl( grid().extraData(), entity.seed(), true);
116  }
117 
118  IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
119  {
120  typedef typename Traits::IntersectionIteratorImpl IntersectionIteratorImpl;
121  return IntersectionIteratorImpl( grid().extraData(), entity.seed(), false);
122  }
123 
124  const CollectiveCommunication &comm () const
125  {
126  return grid().comm();
127  }
128 
129  int overlapSize ( int codim ) const
130  {
131  return grid().overlapSize( codim );
132  }
133 
134  int ghostSize ( int codim ) const
135  {
136  return grid().ghostSize( codim );
137  }
138 
139  template< class DataHandle, class Data >
140  void communicate ( CommDataHandleIF< DataHandle, Data > /*&dataHandle*/,
141  InterfaceType /*interface*/,
142  CommunicationDirection /*direction*/ ) const
143  {
144  }
145 
146  protected:
147  const Grid *grid_;
148  };
149 
150  // PolyhedralGridViewTraits
151  // ------------------------
152 
153  template< int dim, int dimworld, typename coord_t, PartitionIteratorType ptype >
155  {
157  static const PartitionIteratorType pitype = ptype;
158 
161 
164 
165  typedef Dune::Intersection< const Grid, IntersectionImpl > Intersection;
166  typedef Dune::IntersectionIterator< const Grid, IntersectionIteratorImpl, IntersectionImpl > IntersectionIterator;
167 
168  typedef typename Grid::CollectiveCommunication CollectiveCommunication;
169 
170  template< int codim >
171  struct Codim
172  {
173  typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
174  typedef typename Grid::Traits::template Codim< codim >::EntityPointer EntityPointer;
175 
176  typedef typename Grid::template Codim< codim >::Geometry Geometry;
177  typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
178 
179  template< PartitionIteratorType pit >
180  struct Partition
181  {
183  typedef Dune::EntityIterator< codim, const Grid, IteratorImpl > Iterator;
184  };
185 
186  typedef typename Partition< pitype >::Iterator Iterator;
187  };
188 
189  static const bool conforming = false;
190  };
191 
192 } // namespace Dune
193 
194 #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:172
Definition: gridview.hh:155
Definition: gridview.hh:52