Loading [MathJax]/extensions/MathMenu.js

DUNE MultiDomainGrid (unstable)

gridview.hh
1#ifndef DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_GRIDVIEW_HH
2#define DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_GRIDVIEW_HH
3
4#include <dune/grid/common/gridview.hh>
5#include <dune/grid/common/defaultgridview.hh>
6
7namespace Dune {
8
9namespace mdgrid {
10
11namespace subdomain {
12
13template<typename,typename,typename>
14class IntersectionIteratorWrapper;
15
16template<typename GridImp>
17class LevelGridView
18 : public DefaultLevelGridView<GridImp>
19{
20
21 using BaseT = DefaultLevelGridView<GridImp>;
22
23public:
24
25 using typename BaseT::IntersectionIterator;
26
27 LevelGridView(const GridImp& grid, int level)
28 : BaseT(grid,level)
29 {}
30
31 IntersectionIterator ibegin(const typename BaseT::template Codim<0>::Entity& entity) const
32 {
33 return IntersectionIteratorWrapper<
34 const GridImp,
35 typename BaseT::IndexSet,
36 typename GridImp::MultiDomainGrid::LevelGridView::IntersectionIterator
37 >(
38 &this->indexSet(),
39 this->grid()._grid.levelGridView(entity.level()).ibegin(entity.impl().multiDomainEntity())
40 );
41 }
42
43 IntersectionIterator iend(const typename BaseT::template Codim<0>::Entity& entity) const
44 {
45 return IntersectionIteratorWrapper<
46 const GridImp,
47 typename BaseT::IndexSet,
48 typename GridImp::MultiDomainGrid::LevelGridView::IntersectionIterator
49 >(
50 &this->indexSet(),
51 this->grid()._grid.levelGridView(entity.level()).iend(entity.impl().multiDomainEntity())
52 );
53 }
54
55};
56
57template<typename GridImp>
58struct LevelGridViewTraits
59 : public DefaultLevelGridViewTraits<GridImp>
60{
61 using GridViewImp = LevelGridView<GridImp>;
62};
63
64
65
66template<typename GridImp>
67class LeafGridView
68 : public DefaultLeafGridView<GridImp>
69{
70
71 using BaseT = DefaultLeafGridView<GridImp>;
72
73public:
74
75 using typename BaseT::IntersectionIterator;
76
77 LeafGridView(const GridImp& grid)
78 : BaseT(grid)
79 {}
80
81 IntersectionIterator ibegin(const typename BaseT::template Codim<0>::Entity& entity) const
82 {
83 return IntersectionIteratorWrapper<
84 const GridImp,
85 typename BaseT::IndexSet,
86 typename GridImp::MultiDomainGrid::LeafGridView::IntersectionIterator
87 >(
88 &this->indexSet(),
89 this->grid()._grid.leafGridView().ibegin(entity.impl().multiDomainEntity())
90 );
91 }
92
93 IntersectionIterator iend(const typename BaseT::template Codim<0>::Entity& entity) const
94 {
95 return IntersectionIteratorWrapper<
96 const GridImp,
97 typename BaseT::IndexSet,
98 typename GridImp::MultiDomainGrid::LeafGridView::IntersectionIterator
99 >(
100 &this->indexSet(),
101 this->grid()._grid.leafGridView().iend(entity.impl().multiDomainEntity())
102 );
103 }
104
105};
106
107template<typename GridImp>
108struct LeafGridViewTraits
109 : public DefaultLeafGridViewTraits<GridImp>
110{
111 using GridViewImp = LeafGridView<GridImp>;
112};
113
114} // namespace subdomain
115
116} // namespace mdgrid
117
118} // namespace Dune
119
120#endif // DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_GRIDVIEW_HH
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 7, 22:57, 2025)