dune-fem 2.12-git
Loading...
Searching...
No Matches
gridview2gridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
2#define DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
3
4#include <utility>
5#include <functional>
6
8
10
14
15namespace Dune
16{
17
18 namespace Fem
19 {
20
21 // Internal forward declaration
22 // ----------------------------
23
24 template< class GridView, class Implementation, bool storeCopy=true >
25 class GridView2GridPart;
26
27
28
29#ifndef DOXYGEN
30
31 // GridView2GridPartTraits
32 // -----------------------
33
34 template< class GridView, class Implementation, bool storeCopy >
35 struct GridView2GridPartTraits
36 {
37 typedef Implementation GridPartType;
38
39 typedef GridView GridViewType;
40 static const bool conforming = GridView::conforming;
41
42 typedef typename GridViewType::Grid GridType;
43 typedef typename GridViewType::Communication CommunicationType;
44
45 typedef typename GridView::IndexSet IndexSetType;
46
47 template< int codim >
48 struct Codim
49 {
50 typedef typename GridViewType::template Codim< codim >::Entity EntityType;
51 typedef typename GridType::template Codim< codim >::EntitySeed EntitySeedType;
52
53 typedef typename GridViewType::template Codim< codim >::Geometry GeometryType;
54 typedef typename GridViewType::template Codim< codim >::LocalGeometry LocalGeometryType;
55
56 template< PartitionIteratorType pitype >
57 struct Partition
58 {
59 typedef typename GridViewType::template Codim< codim >::template Partition< pitype >::Iterator IteratorType;
60 };
61 };
62
63 typedef typename GridViewType::IntersectionIterator IntersectionIteratorType;
64
65 typedef TwistUtility< GridType > TwistUtilityType;
66
67 // partition on which indices are defined
68 static const PartitionIteratorType indexSetPartitionType = All_Partition;
69 // partition identifiers for default communication
70 static const InterfaceType indexSetInterfaceType = InteriorBorder_All_Interface;
71 };
72
73#endif // #ifndef DOXYGEN
74
75
76
77 // GridView2GridPart
78 // -----------------
79
80 template< class GridView, class Implementation, bool storeCopy >
82 : public GridPartInterface< GridView2GridPartTraits< GridView, Implementation, storeCopy > >
83 {
85 typedef GridView2GridPartTraits< GridView, Implementation, storeCopy > TraitsType;
87
88 public:
90 typedef typename BaseType::GridType GridType;
91
94
95 template< int codim >
96 struct Codim
97 : public BaseType::template Codim< codim >
98 {};
99
102
105
108
109 private:
111
112 auto initGv( const GridView &gridView )
113 {
114 if constexpr ( storeCopy )
115 return gridView;
116 else
117 return &gridView;
118 }
119 public:
120 using BaseType::grid;
122
128 : gridView_( initGv( gridView ) ),
129 indexSet_( &this->gridView().indexSet() )
130 {}
131
133 : gridView_( std::move( gridView ) ),
134 indexSet_( &this->gridView().indexSet() )
135 {
136 // this should not be called if we only store a pointer
137 assert( storeCopy );
138 }
139
141
146
154 const GridType &grid () const { return gridView().grid(); }
155 GridType &grid () { return const_cast< GridType & >( gridView().grid() ); }
156
158 bool isConforming() const
159 {
160 return gridView().isConforming();
161 }
162
164 const IndexSetType &indexSet () const { assert( indexSet_ ); return *indexSet_; }
165
167 template< int codim >
169 {
170 return begin< codim, InteriorBorder_Partition >();
171 }
172
174 template< int codim, PartitionIteratorType pitype >
175 typename Codim< codim >::template Partition< pitype >::IteratorType begin () const
176 {
177 return gridView().template begin< codim, pitype >();
178 }
179
181 template< int codim >
183 {
184 return end< codim, InteriorBorder_Partition >();
185 }
186
188 template< int codim, PartitionIteratorType pitype >
189 typename Codim< codim >::template Partition< pitype >::IteratorType end () const
190 {
191 return gridView().template end< codim, pitype >();
192 }
193
196 {
197 return gridView().ibegin( entity );
198 }
199
202 {
203 return gridView().iend( entity );
204 }
205
207 const CommunicationType &comm () const { return gridView().comm(); }
208
210 template< class DataHandle, class DataType >
212 InterfaceType interface, CommunicationDirection direction ) const
213 {
214 gridView().communicate( dataHandle, interface, direction );
215 }
216
218 [[deprecated("Use DofManager::sequence instead!")]]
219 int sequence () const { return -1; }
220
222 template < class EntitySeed >
224 entity ( const EntitySeed &seed ) const
225 {
226 return grid().entity( seed );
227 }
228
230 template <class Entity>
231 const Entity &convert( const Entity& entity ) const
232 {
233 return convert< Entity::codimension >( entity );
234 }
235
237 operator const GridView& () const { return gridView(); }
238
240 const GridView& gridView() const
241 {
242 if constexpr ( storeCopy )
243 {
244 return gridView_;
245 }
246 else
247 {
248 assert( gridView_ );
249 return *gridView_;
250 }
251 }
252
255 protected:
256 template< int codim >
257 const typename Codim< codim >::EntityType &
259 {
260 return entity;
261 }
262
265 };
266
267
268 // Capabilities
269 // ------------
270
271 namespace GridPartCapabilities
272 {
273
274 // Capabilities for GridView2GridPart
275 // -------------------------------------
276
277 template< class GridView, class Implementation, bool storeCopy >
278 struct hasGrid< GridView2GridPart< GridView, Implementation, storeCopy > >
279 {
280 static const bool v = true;
281 };
282
283 template< class GridView, class Implementation, bool storeCopy >
290
291 template< class GridView, class Implementation, bool storeCopy >
292 struct isCartesian< GridView2GridPart< GridView, Implementation, storeCopy > >
293 {
295 };
296
297 template< class GridView, class Implementation, bool storeCopy, int codim >
298 struct hasEntity< GridView2GridPart< GridView, Implementation, storeCopy >, codim >
299 {
301 };
302
303 template< class GridView, class Implementation, bool storeCopy, int codim >
304 struct canCommunicate< GridView2GridPart< GridView, Implementation, storeCopy >, codim >
305 {
307 };
308
309 template< class GridView, class Implementation, bool storeCopy >
310 struct isConforming< GridView2GridPart< GridView, Implementation, storeCopy > >
311 {
313 };
314
315 }
316
317 } // namespace Fem
318
319} // namespace Dune
320
321#endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
void seed(const Vertex &vertex)
Y & rhs()
PartitionIteratorType
CommunicationDirection
InterfaceType
All_Partition
InteriorBorder_All_Interface
const Grid & grid() const
IntersectionIterator ibegin(const typename Codim< 0 > ::Entity &entity) const
auto communicate(CommDataHandleIF< DataHandleImp, DataType > &data, InterfaceType iftype, CommunicationDirection dir) const
const Communication & comm() const
GridView(const Implementation &imp)
IntersectionIterator iend(const typename Codim< 0 > ::Entity &entity) const
bool isConforming() const
STL namespace.
specialize with 'false' if grid part has no underlying dune grid (default=true)
Definition gridpart/common/capabilities.hh:18
static const bool v
Definition gridpart/common/capabilities.hh:19
specialize with 'true' for if the codimension 0 entity of the grid part has only one possible geometr...
Definition gridpart/common/capabilities.hh:29
static const bool v
Definition gridpart/common/capabilities.hh:30
static const unsigned int topologyId
Definition gridpart/common/capabilities.hh:31
specialize with 'true' if the grid part is cartesian (default=false)
Definition gridpart/common/capabilities.hh:40
static const bool v
Definition gridpart/common/capabilities.hh:41
specialize with 'true' for all codims that a grid implements entities for (default=false)
Definition gridpart/common/capabilities.hh:50
static const bool v
Definition gridpart/common/capabilities.hh:51
specialize with 'true' for all codims that a grid can communicate data on (default=false)
Definition gridpart/common/capabilities.hh:60
static const bool v
Definition gridpart/common/capabilities.hh:61
specialize with 'true' if implementation guarantees conforming level grids. (default=false)
Definition gridpart/common/capabilities.hh:70
static const bool v
Definition gridpart/common/capabilities.hh:71
Interface for the GridPart classes A GridPart class allows to access only a specific subset of a grid...
Definition gridpart.hh:76
const GridType & grid() const
Returns const reference to the underlying grid.
Definition gridpart.hh:162
Traits::CommunicationType CommunicationType
Collective communication.
Definition gridpart.hh:97
Traits::GridType GridType
type of Grid implementation
Definition gridpart.hh:87
int boundaryId(const IntersectionType &intersection) const
return boundary if given an intersection
Definition gridpart.hh:277
Traits::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition gridpart.hh:111
Traits::IndexSetType IndexSetType
Index set implementation.
Definition gridpart.hh:92
GridPartType GridViewType
Definition gridpart.hh:120
Definition gridview2gridpart.hh:83
Codim< codim >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition gridview2gridpart.hh:182
BaseType::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition gridview2gridpart.hh:101
GridView2GridPart(const ThisType &rhs)
Definition gridview2gridpart.hh:142
BaseType::CommunicationType CommunicationType
Collective communication.
Definition gridview2gridpart.hh:107
bool isConforming() const
Dune::Fem::GridPartInterface::isConforming *‍/.
Definition gridview2gridpart.hh:158
const Entity & convert(const Entity &entity) const
return sequence number to update structures depending on the grid part
Definition gridview2gridpart.hh:231
const IndexSetType & indexSet() const
Returns reference to index set of the underlying grid.
Definition gridview2gridpart.hh:164
GridView2GridPart(const GridView &gridView)
Definition gridview2gridpart.hh:127
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
obtain entity pointer from entity seed
Definition gridview2gridpart.hh:224
GridView2GridPart & operator=(const GridView2GridPart &other)=default
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
ibegin of corresponding intersection iterator for given entity
Definition gridview2gridpart.hh:195
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
iend of corresponding intersection iterator for given entity
Definition gridview2gridpart.hh:201
GridView2GridPart(GridView &&gridView)
Definition gridview2gridpart.hh:132
Codim< codim >::template Partition< pitype >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition gridview2gridpart.hh:189
void communicate(CommDataHandleIF< DataHandle, DataType > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
corresponding communication method for grid part
Definition gridview2gridpart.hh:211
BaseType::GridType GridType
type of Grid implementation
Definition gridview2gridpart.hh:90
const GridView & gridView() const
return reference to internal grid view
Definition gridview2gridpart.hh:240
const Codim< codim >::EntityType & convert(const typename Codim< codim >::EntityType &entity) const
Definition gridview2gridpart.hh:258
Codim< codim >::template Partition< pitype >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition gridview2gridpart.hh:175
const GridType & grid() const
Returns const reference to the underlying grid.
Definition gridview2gridpart.hh:154
BaseType::GridViewType GridViewType
Definition gridview2gridpart.hh:93
Codim< codim >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition gridview2gridpart.hh:168
const CommunicationType & comm() const
obtain collective communication object
Definition gridview2gridpart.hh:207
BaseType::IndexSetType IndexSetType
Index set implementation.
Definition gridview2gridpart.hh:104
GridType & grid()
Definition gridview2gridpart.hh:155
std::conditional_t< storeCopy, GridView, const GridView * > gridView_
Definition gridview2gridpart.hh:263
int sequence() const
return sequence number to update structures depending on the grid part
Definition gridview2gridpart.hh:219
const IndexSetType * indexSet_
Definition gridview2gridpart.hh:264
Definition gridview2gridpart.hh:98
Utility to get twist from IntersectionIterator, if provided by grid (i.e. AlbertaGrid,...
Definition twistutility.hh:107
Definition dofmanager.hh:786