dune-fem 2.8.0
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
6#include <dune/common/exceptions.hh>
7
8#include <dune/grid/common/gridenums.hh>
9
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::CollectiveCommunication CollectiveCommunicationType;
44
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 static const PartitionIteratorType indexSetPartitionType = All_Partition;
68 static const InterfaceType indexSetInterfaceType = All_All_Interface;
69 };
70
71#endif // #ifndef DOXYGEN
72
73
74
75 // GridView2GridPart
76 // -----------------
77
78 template< class GridView, class Implementation, bool storeCopy >
80 : public GridPartInterface< GridView2GridPartTraits< GridView, Implementation, storeCopy > >
81 {
83 typedef GridView2GridPartTraits< GridView, Implementation, storeCopy > TraitsType;
85
86 public:
88 typedef typename BaseType::GridType GridType;
89
92
93 template< int codim >
94 struct Codim
95 : public BaseType::template Codim< codim >
96 {};
97
100
103
106
107 private:
109
110 public:
111 using BaseType::grid;
113
118 explicit GridView2GridPart ( const GridView &gridView )
119 : gridView_( gridView ),
120 indexSet_( gridView_.indexSet() ),
121 dofManager_( DofManagerType::instance( gridView_.grid() ) )
122 {}
123
124 explicit GridView2GridPart ( GridView &&gridView )
125 : gridView_( std::move( gridView ) ),
126 indexSet_( gridView_.indexSet() ),
127 dofManager_( DofManagerType::instance( gridView_.grid() ) )
128 {}
129
131 : gridView_( rhs.gridView_ ),
132 indexSet_( gridView_.indexSet() ),
133 dofManager_( DofManagerType::instance( rhs.grid() ) )
134 {}
135
137 {}
138
146 const GridType &grid () const { return gridView_.grid(); }
147 GridType &grid () { return const_cast< GridType & >( gridView_.grid() ); }
148
150 const IndexSetType &indexSet () const { return indexSet_; }
151
153 template< int codim >
155 {
156 return begin< codim, InteriorBorder_Partition >();
157 }
158
160 template< int codim, PartitionIteratorType pitype >
161 typename Codim< codim >::template Partition< pitype >::IteratorType begin () const
162 {
163 return gridView_.template begin< codim, pitype >();
164 }
165
167 template< int codim >
169 {
170 return end< codim, InteriorBorder_Partition >();
171 }
172
174 template< int codim, PartitionIteratorType pitype >
175 typename Codim< codim >::template Partition< pitype >::IteratorType end () const
176 {
177 return gridView_.template end< codim, pitype >();
178 }
179
182 {
183 return gridView_.ibegin( entity );
184 }
185
188 {
189 return gridView_.iend( entity );
190 }
191
193 const CollectiveCommunicationType &comm () const { return gridView_.comm(); }
194
196 template< class DataHandle, class DataType >
197 void communicate ( CommDataHandleIF< DataHandle, DataType > &dataHandle,
198 InterfaceType interface, CommunicationDirection direction ) const
199 {
200 gridView_.communicate( dataHandle, interface, direction );
201 }
202
204 int sequence () const { return dofManager_.sequence(); }
205
207 template < class EntitySeed >
208 typename Codim< EntitySeed::codimension >::EntityType
209 entity ( const EntitySeed &seed ) const
210 {
211 return grid().entity( seed );
212 }
213
215 template <class Entity>
216 const Entity &convert( const Entity& entity ) const
217 {
218 return convert< Entity::codimension >( entity );
219 }
220
222 // explicit operator const GridView& () const { return gridView_; }
223 const GridView& gridView() const { return gridView_; }
224
227 private:
228 template< int codim >
229 const typename Codim< codim >::EntityType &
230 convert( const typename Codim< codim >::EntityType &entity ) const
231 {
232 return entity;
233 }
234
235 std::conditional_t<storeCopy,const GridView,const GridView &> gridView_;
236 IndexSetType indexSet_;
237 DofManagerType &dofManager_;
238 };
239
240 } // namespace Fem
241
242} // namespace Dune
243
244#endif // #ifndef DUNE_FEM_GRIDPART_COMMON_GRIDVIEW2GRIDPART_HH
int sequence() const
return number of sequence, if dofmanagers memory was changed by calling some method like resize,...
Definition: dofmanager.hh:978
STL namespace.
Definition: bindguard.hh:11
Interface for the GridPart classes A GridPart class allows to access only a specific subset of a grid...
Definition: gridpart.hh:77
PoliciesType::GridViewType GridViewType
Definition: gridpart.hh:113
Traits::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridpart.hh:96
const GridType & grid() const
Returns const reference to the underlying grid.
Definition: gridpart.hh:140
Traits::GridType GridType
type of Grid implementation
Definition: gridpart.hh:90
int boundaryId(const IntersectionType &intersection) const
return boundary if given an intersection
Definition: gridpart.hh:232
Traits::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridpart.hh:108
Traits::IndexSetType IndexSetType
Index set implementation.
Definition: gridpart.hh:93
Definition: gridview2gridpart.hh:81
Codim< codim >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:168
BaseType::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridview2gridpart.hh:99
GridView2GridPart(const ThisType &rhs)
Definition: gridview2gridpart.hh:130
const Entity & convert(const Entity &entity) const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:216
const IndexSetType & indexSet() const
Returns reference to index set of the underlying grid.
Definition: gridview2gridpart.hh:150
GridView2GridPart(const GridView &gridView)
Definition: gridview2gridpart.hh:118
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
obtain entity pointer from entity seed
Definition: gridview2gridpart.hh:209
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
ibegin of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:181
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
iend of corresponding intersection iterator for given entity
Definition: gridview2gridpart.hh:187
GridView2GridPart(GridView &&gridView)
Definition: gridview2gridpart.hh:124
Codim< codim >::template Partition< pitype >::IteratorType end() const
obtain end iterator for the interior-border partition
Definition: gridview2gridpart.hh:175
void communicate(CommDataHandleIF< DataHandle, DataType > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
corresponding communication method for grid part
Definition: gridview2gridpart.hh:197
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridview2gridpart.hh:105
BaseType::GridType GridType
type of Grid implementation
Definition: gridview2gridpart.hh:88
const GridView & gridView() const
cast to underlying grid view
Definition: gridview2gridpart.hh:223
Codim< codim >::template Partition< pitype >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:161
const GridType & grid() const
Returns const reference to the underlying grid.
Definition: gridview2gridpart.hh:146
BaseType::GridViewType GridViewType
Definition: gridview2gridpart.hh:91
Codim< codim >::IteratorType begin() const
obtain begin iterator for the interior-border partition
Definition: gridview2gridpart.hh:154
BaseType::IndexSetType IndexSetType
Index set implementation.
Definition: gridview2gridpart.hh:102
~GridView2GridPart()
Definition: gridview2gridpart.hh:136
GridType & grid()
Definition: gridview2gridpart.hh:147
const CollectiveCommunicationType & comm() const
obtain collective communication object
Definition: gridview2gridpart.hh:193
int sequence() const
return sequence number to update structures depending on the grid part
Definition: gridview2gridpart.hh:204
Definition: gridview2gridpart.hh:96
wrapper for (adaptive) index sets that disables all support for adaptivity
Definition: nonadaptiveindexset.hh:55
BaseType::GridType GridType
type of Grid implementation
Definition: leafgridpart.hh:26
Utility to get twist from IntersectionIterator, if provided by grid (i.e. AlbertaGrid,...
Definition: twistutility.hh:84
Definition: dofmanager.hh:761