dune-fem 2.8.0
Loading...
Searching...
No Matches
gridpart2gridview.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
2#define DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
3
4#include <cassert>
5
6#include <dune/common/exceptions.hh>
7
8#include <dune/grid/common/gridenums.hh>
9#include <dune/grid/common/gridview.hh>
10
11namespace Dune
12{
13
14#ifdef USING_DUNE_PYTHON
15 namespace FemPy
16 {
17 // #include <dune/fempy/py/grid/gridpart.hh>
18 namespace detail
19 {
20 template< class Grid >
21 inline static void addGridModificationListener ( const Grid &grid );
22 }
23 }
24#endif
25 namespace Fem
26 {
27
28 template< class GridPart >
29 class GridPart2GridViewImpl;
30
31
32 template< class GridPart >
34 {
36
37 typedef typename GridPart::GridType Grid;
38 typedef typename GridPart::IndexSetType IndexSet;
39 typedef typename GridPart::IntersectionIteratorType IntersectionIterator;
40
41 typedef typename IntersectionIterator::Intersection Intersection;
42
43 typedef typename GridPart::CollectiveCommunicationType CollectiveCommunication;
44
45 template< int codim >
46 struct Codim
47 : public Grid::Traits::template Codim< codim >
48 {
49 typedef typename GridPart::template Codim< codim >::EntityType Entity;
50
51 typedef typename GridPart::template Codim< codim >::GeometryType Geometry;
52 typedef typename GridPart::template Codim< codim >::LocalGeometryType LocalGeometry;
53
54 template< PartitionIteratorType pitype >
55 struct Partition
56 {
58 };
59
61 };
62
63 static const bool conforming = GridPart::Traits::conforming;
64 };
65
66
67 template< class GridPart >
69 {
71
72 public:
73 typedef typename GridPart::ctype ctype;
74
75 typedef GridPart GridPartType;
76
78
80 typedef typename Traits::Grid Grid;
81
83 typedef typename Traits::IndexSet IndexSet;
84
87
90
93
95 template< int codim >
96 struct Codim
97 : public Traits::template Codim< codim >
98 {};
99
101
102 enum { dimension = GridPartType::dimension };
103 enum { dimensionworld = GridPartType::dimensionworld };
104
106 : gridPartStorage_(nullptr)
107 , gridPart_( &gridPart )
108 {}
109 template< class... Args,
110 std::enable_if_t< std::is_constructible< GridPartType, Args..., ThisType* >::value, int > = 0 >
111 GridPart2GridViewImpl( Args &&... args )
112 : gridPartStorage_(new GridPartType( std::forward< Args >( args )..., this) )
113 , gridPart_(gridPartStorage_.get())
114 {
115#ifdef USING_DUNE_PYTHON
116 // add grid modification listener (if not registered)
117 FemPy::detail::addGridModificationListener( gridPart().grid() );
118#endif
119 }
120
122 {}
123
124 const Grid &grid () const
125 {
126 return gridPart().grid();
127 }
128
129 const IndexSet &indexSet () const
130 {
131 return gridPart().indexSet();
132 }
133
134 int size ( int codim ) const
135 {
136 return indexSet().size( codim );
137 }
138
139 int size ( const GeometryType &type ) const
140 {
141 return indexSet().size( type );
142 }
143
144 template<class EntityType>
145 bool contains (const EntityType& e) const
146 {
147 return indexSet().contains(e);
148 }
149
150 template< int codim >
152 {
153 return begin< codim, All_Partition >();
154 }
155
156 template< int codim, PartitionIteratorType pitype >
157 typename Codim< codim >::template Partition< pitype >::Iterator begin () const
158 {
159 return gridPart().template begin< codim, pitype >();
160 }
161
162 template< int codim >
164 {
165 return end< codim, All_Partition >();
166 }
167
168 template< int codim, PartitionIteratorType pitype >
169 typename Codim< codim >::template Partition< pitype >::Iterator end () const
170 {
171 return gridPart().template end< codim, pitype >();
172 }
173
174 IntersectionIterator ibegin ( const typename Codim< 0 >::Entity &entity ) const
175 {
176 return gridPart().ibegin( entity );
177 }
178
179 IntersectionIterator iend ( const typename Codim< 0 >::Entity &entity ) const
180 {
181 return gridPart().iend( entity );
182 }
183
185 {
186 return gridPart().comm();
187 }
188
189 int overlapSize ( int codim ) const
190 {
191 DUNE_THROW( NotImplemented, "Method ghostSize() not implemented yet" );
192 }
193
194 int ghostSize( int codim ) const
195 {
196 DUNE_THROW( NotImplemented, "Method ghostSize() not implemented yet" );
197 }
198
199 template< class DataHandleImp, class DataType >
200 void communicate ( CommDataHandleIF< DataHandleImp, DataType > &data,
201 InterfaceType iftype,
202 CommunicationDirection dir ) const
203 {
204 gridPart().communicate( data, iftype, dir );
205 }
206
207 const GridPartType &gridPart () const {
208 assert( gridPart_ );
209 return *gridPart_;
210 }
211
212 private:
213 std::shared_ptr<GridPartType> gridPartStorage_;
214 const GridPartType *gridPart_;
215 };
216
217
218
219 template< class GridPart >
221 : public GridView< GridPart2GridViewTraits< GridPart > >
222 {
224 typedef GridView< GridPart2GridViewTraits< GridPart > > BaseType;
225
226 typedef typename BaseType::GridViewImp GridViewImp;
227
228 public:
229 explicit GridPart2GridView ( const GridPart &gridPart )
230 : BaseType( GridViewImp( gridPart ) )
231 {}
232 };
233
234 } // namespace Fem
235
236} // namespace Dune
237
238#endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDPART2GRIDVIEW_HH
STL namespace.
Definition: bindguard.hh:11
std::tuple_element< i, Tuple >::type & get(Dune::TypeIndexedTuple< Tuple, Types > &tuple)
Definition: typeindexedtuple.hh:122
Definition: gridpart2gridview.hh:69
GridPart GridPartType
Definition: gridpart2gridview.hh:75
GridPart2GridViewImpl(Args &&... args)
Definition: gridpart2gridview.hh:111
int overlapSize(int codim) const
Definition: gridpart2gridview.hh:189
const IndexSet & indexSet() const
Definition: gridpart2gridview.hh:129
~GridPart2GridViewImpl()
Definition: gridpart2gridview.hh:121
Traits::Grid Grid
type of the grid
Definition: gridpart2gridview.hh:80
Traits::Intersection Intersection
type of the intersection
Definition: gridpart2gridview.hh:86
GridPart2GridViewTraits< GridPartType > Traits
Definition: gridpart2gridview.hh:77
Codim< codim >::Iterator end() const
Definition: gridpart2gridview.hh:163
Codim< codim >::template Partition< pitype >::Iterator end() const
Definition: gridpart2gridview.hh:169
Codim< codim >::template Partition< pitype >::Iterator begin() const
Definition: gridpart2gridview.hh:157
bool contains(const EntityType &e) const
Definition: gridpart2gridview.hh:145
const GridPartType & gridPart() const
Definition: gridpart2gridview.hh:207
@ dimensionworld
Definition: gridpart2gridview.hh:103
GridPart2GridViewImpl(const GridPartType &gridPart)
Definition: gridpart2gridview.hh:105
int size(const GeometryType &type) const
Definition: gridpart2gridview.hh:139
IntersectionIterator ibegin(const typename Codim< 0 >::Entity &entity) const
Definition: gridpart2gridview.hh:174
int ghostSize(int codim) const
Definition: gridpart2gridview.hh:194
int size(int codim) const
Definition: gridpart2gridview.hh:134
void communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: gridpart2gridview.hh:200
Traits::IntersectionIterator IntersectionIterator
type of the intersection iterator
Definition: gridpart2gridview.hh:89
IntersectionIterator iend(const typename Codim< 0 >::Entity &entity) const
Definition: gridpart2gridview.hh:179
const CollectiveCommunication & comm() const
Definition: gridpart2gridview.hh:184
Traits::CollectiveCommunication CollectiveCommunication
type of the collective communication
Definition: gridpart2gridview.hh:92
@ conforming
Definition: gridpart2gridview.hh:100
@ dimension
Definition: gridpart2gridview.hh:102
GridPart::ctype ctype
Definition: gridpart2gridview.hh:73
Codim< codim >::Iterator begin() const
Definition: gridpart2gridview.hh:151
const Grid & grid() const
Definition: gridpart2gridview.hh:124
Traits::IndexSet IndexSet
type of the index set
Definition: gridpart2gridview.hh:83
Definition: gridpart2gridview.hh:34
GridPart2GridViewImpl< GridPart > GridViewImp
Definition: gridpart2gridview.hh:35
IntersectionIterator::Intersection Intersection
Definition: gridpart2gridview.hh:41
GridPart::CollectiveCommunicationType CollectiveCommunication
Definition: gridpart2gridview.hh:43
GridPart::IntersectionIteratorType IntersectionIterator
Definition: gridpart2gridview.hh:39
GridPart::IndexSetType IndexSet
Definition: gridpart2gridview.hh:38
static const bool conforming
Definition: gridpart2gridview.hh:63
GridPart::GridType Grid
Definition: gridpart2gridview.hh:37
Definition: gridpart2gridview.hh:48
Partition< All_Partition >::Iterator Iterator
Definition: gridpart2gridview.hh:60
GridPart::template Codim< codim >::EntityType Entity
Definition: gridpart2gridview.hh:49
GridPart::template Codim< codim >::GeometryType Geometry
Definition: gridpart2gridview.hh:51
GridPart::template Codim< codim >::LocalGeometryType LocalGeometry
Definition: gridpart2gridview.hh:52
Definition: gridpart2gridview.hh:56
GridPart::template Codim< codim >::template Partition< pitype >::IteratorType Iterator
Definition: gridpart2gridview.hh:57
Codim Structure.
Definition: gridpart2gridview.hh:98
Definition: gridpart2gridview.hh:222
GridPart2GridView(const GridPart &gridPart)
Definition: gridpart2gridview.hh:229