All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
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 //- dune-metagrid includes
14 #include <dune/grid/polyhedralgrid/indexset.hh>
15 #include <dune/grid/polyhedralgrid/intersection.hh>
16 #include <dune/grid/polyhedralgrid/intersectioniterator.hh>
17 #include <dune/grid/polyhedralgrid/iterator.hh>
18 
19 namespace Dune
20 {
21 
22  // Internal Forward Declarations
23  // -----------------------------
24 
25  template< int dim, int dimworld, PartitionIteratorType defaultpitype >
27 
28  template< int dim, int dimworld, PartitionIteratorType ptype >
30 
31 
32  // PolyhedralGridView
33  // ----------
34 
35  template< int dim, int dimworld, PartitionIteratorType defaultpitype >
36  class PolyhedralGridView
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  static_cast<const 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, PartitionIteratorType ptype >
152  struct PolyhedralGridViewTraits
153  {
154  typedef PolyhedralGrid< dim, dimworld > Grid;
155  static const PartitionIteratorType pitype = ptype;
156 
157  typedef PolyhedralGridView< dim, dimworld, pitype > GridViewImp;
158  typedef PolyhedralGridIndexSet< Grid::dimension, Grid::dimensionworld > IndexSet;
159 
160  typedef PolyhedralGridIntersection< const Grid > IntersectionImpl;
161  typedef PolyhedralGridIntersectionIterator< const Grid > IntersectionIteratorImpl;
162 
163 #if DUNE_VERSION_NEWER(DUNE_GRID,2,3)
164  typedef Dune::Intersection< const Grid, IntersectionImpl > Intersection;
165  typedef Dune::IntersectionIterator< const Grid, IntersectionIteratorImpl, IntersectionImpl > IntersectionIterator;
166 #else
167  typedef Dune::Intersection< const Grid, PolyhedralGridIntersection > Intersection;
168  typedef Dune::IntersectionIterator< const Grid, PolyhedralGridIntersectionIterator, PolyhedralGridIntersection > IntersectionIterator;
169 #endif
170 
171  typedef typename Grid::CollectiveCommunication CollectiveCommunication;
172 
173  template< int codim >
174  struct Codim
175  {
176  typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
177  typedef typename Grid::Traits::template Codim< codim >::EntityPointer EntityPointer;
178 
179  typedef typename Grid::template Codim< codim >::Geometry Geometry;
180  typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
181 
182  template< PartitionIteratorType pit >
183  struct Partition
184  {
186  typedef Dune::EntityIterator< codim, const Grid, IteratorImpl > Iterator;
187  };
188 
189  typedef typename Partition< pitype >::Iterator Iterator;
190  };
191 
192  static const bool conforming = false;
193  };
194 
195 } // namespace Dune
196 
197 #endif // #ifndef DUNE_POLYHEDRALGRID_GRIDVIEW_HH
Definition: gridview.hh:26
int overlapSize(int) const
obtain size of overlap region for the leaf grid
Definition: grid.hh:560
Definition: iterator.hh:19
const CollectiveCommunication & comm() const
obtain CollectiveCommunication object
Definition: grid.hh:644
int size(int, int codim) const
obtain number of entites on a level
Definition: grid.hh:372
Definition: gridview.hh:29
Definition: gridview.hh:50
identical grid wrapper
Definition: declaration.hh:10
Traits::CollectiveCommunication CollectiveCommunication
communicator with all other processes having some part of the grid
Definition: grid.hh:295
Definition: indexset.hh:22
int ghostSize(int codim) const
obtain size of ghost region for the leaf grid
Definition: grid.hh:569
Definition: gridview.hh:174