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