5#ifndef DUNE_GEOGRID_GRIDVIEW_HH
6#define DUNE_GEOGRID_GRIDVIEW_HH
12#include <dune/grid/common/gridview.hh>
13#include <dune/grid/geometrygrid/datahandle.hh>
14#include <dune/grid/geometrygrid/indexsets.hh>
15#include <dune/grid/geometrygrid/intersection.hh>
16#include <dune/grid/geometrygrid/intersectioniterator.hh>
17#include <dune/grid/geometrygrid/iterator.hh>
28 template<
class HGV,
class CoordFunction,
class Allocator >
36 template<
class HGV,
class CoordFunction,
class Allocator >
39 friend class GridView< HGV, CoordFunction, Allocator >;
41 typedef HGV HostGridView;
43 typedef typename HostGridView::Grid HostGrid;
44 typedef typename HostGridView::Intersection HostIntersection;
45 typedef typename HostGridView::IntersectionIterator HostIntersectionIterator;
48 typedef GridView< HostGridView, CoordFunction, Allocator > GridViewImp;
52 typedef GeoGrid::IndexSet< const Grid, typename HostGridView::IndexSet > IndexSet;
57 <
const Grid, GeoGrid::IntersectionIterator< const Grid, HostIntersectionIterator >, GeoGrid::Intersection< const Grid, HostIntersection > >
60 typedef typename HostGridView::Communication Communication;
65 typedef GeoGrid::Iterator< HostGridView, codim, All_Partition, const Grid > IteratorImp;
68 typedef typename Grid::Traits::template Codim< codim >::Entity Entity;
70 typedef typename Grid::template Codim< codim >::Geometry Geometry;
71 typedef typename Grid::template Codim< codim >::LocalGeometry LocalGeometry;
73 template< PartitionIteratorType pit >
76 typedef GeoGrid::Iterator< HostGridView, codim, pit, const Grid > IteratorImp;
81 static const bool conforming = HostGridView::conforming;
89 template<
class HGV,
class CoordFunction,
class Allocator >
92 typedef GridView< HGV, CoordFunction, Allocator > This;
95 typedef GridViewTraits< HGV, CoordFunction, Allocator > Traits;
97 typedef typename Traits::HostGridView HostGridView;
99 typedef typename Traits::Grid Grid;
101 typedef typename Traits::IndexSet IndexSet;
103 typedef typename Traits::Intersection Intersection;
105 typedef typename Traits::IntersectionIterator IntersectionIterator;
107 typedef typename Traits::Communication Communication;
109 template<
int codim >
111 :
public Traits::template Codim< codim >
114 static const bool conforming = Traits::conforming;
116 GridView (
const Grid &grid,
const HostGridView &hostGridView )
117 : grid_( &grid ), hostGridView_( hostGridView )
120 GridView (
const This &other )
121 : grid_( other.grid_ ), hostGridView_( other.hostGridView_ )
124 GridView ( This &&other )
125 : grid_( other.grid_ ), hostGridView_(
std::move( other.hostGridView_ ) )
128 This &operator= (
const This &other )
131 hostGridView_ = other.hostGridView_;
133 indexSet_.reset( hostGridView().indexSet() );
137 This &operator= ( This &&other )
140 hostGridView_ = std::move( other.hostGridView_ );
142 indexSet_.reset( hostGridView().indexSet() );
146 const Grid &grid ()
const
152 const IndexSet &indexSet ()
const
154 indexSet_.reset( hostGridView().indexSet() );
158 bool isConforming()
const {
return hostGridView().isConforming(); }
160 int size (
int codim )
const
162 return hostGridView().size( codim );
165 int size (
const GeometryType &type )
const
167 return hostGridView().size( type );
170 template<
int codim >
171 typename Codim< codim >::Iterator begin ()
const
173 return begin< codim, All_Partition >();
176 template<
int codim, PartitionIteratorType pit >
177 typename Codim< codim >::template Partition< pit >::Iterator begin ()
const
179 return Traits::template Codim< codim >::template Partition< pit >::IteratorImp::begin( grid(), hostGridView() );
182 template<
int codim >
183 typename Codim< codim >::Iterator end ()
const
185 return end< codim, All_Partition >();
188 template<
int codim, PartitionIteratorType pit >
189 typename Codim< codim >::template Partition< pit >::Iterator end ()
const
191 return Traits::template Codim< codim >::template Partition< pit >::IteratorImp::end( grid(), hostGridView() );
194 IntersectionIterator ibegin (
const typename Codim< 0 >::Entity &entity )
const
196 typedef GeoGrid::IntersectionIterator< const Grid, typename HostGridView::IntersectionIterator > IntersectionIteratorImpl;
197 return IntersectionIteratorImpl( entity, hostGridView().ibegin( entity.impl().hostEntity() ) );
200 IntersectionIterator iend (
const typename Codim< 0 >::Entity &entity )
const
202 typedef GeoGrid::IntersectionIterator< const Grid, typename HostGridView::IntersectionIterator > IntersectionIteratorImpl;
203 return IntersectionIteratorImpl( entity, hostGridView().iend( entity.impl().hostEntity() ) );
206 const Communication &comm ()
const
208 return hostGridView().comm();
211 int overlapSize (
int codim )
const
213 return hostGridView().overlapSize( codim );
216 int ghostSize (
int codim )
const
218 return hostGridView().ghostSize( codim );
221 template<
class DataHandle,
class Data >
222 auto communicate ( CommDataHandleIF< DataHandle, Data > &dataHandle,
226 typedef CommDataHandleIF< DataHandle, Data > DataHandleIF;
227 typedef GeoGrid::CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
229 WrappedDataHandle wrappedDataHandle( grid(), dataHandle );
230 return hostGridView().communicate( wrappedDataHandle, interface, direction );
233 const HostGridView &hostGridView ()
const {
return hostGridView_; }
237 HostGridView hostGridView_;
238 mutable IndexSet indexSet_;
interface class for an iterator over grid entities
Definition: entityiterator.hh:32
grid wrapper replacing the geometries
Definition: grid.hh:86
Mesh entities of codimension 0 ("elements") allow to visit all intersections with "neighboring" eleme...
Definition: intersectioniterator.hh:83
Intersection of a mesh entity of codimension 0 ("element") with a "neighboring" element or with the d...
Definition: intersection.hh:164
A set of traits classes to store static information about grid implementation.
A few common exception classes.
@ conforming
Output conforming data.
Definition: common.hh:73
Dune namespace.
Definition: alignedallocator.hh:13
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition: integersequence.hh:75
Traits for type conversions and type information.