1#ifndef DUNE_MULTIDOMAINGRID_SUBDOMAINTOSUBDOMAININTERFACEITERATOR_HH
2#define DUNE_MULTIDOMAINGRID_SUBDOMAINTOSUBDOMAININTERFACEITERATOR_HH
11template<
typename Gr
idImp>
12class LeafSubDomainInterfaceIterator;
14template<
typename Gr
idImp>
15class LevelSubDomainInterfaceIterator;
17template<
typename SubDomainIndex>
21 template<
typename GridImp,
23 typename HostGridView,
24 typename IntersectionController
28 template<
typename GridImp,
30 typename HostGridView,
31 typename IntersectionController
35 template<
typename Gr
idImp>
38 template<
typename Gr
idImp>
41 template<
typename Iterator>
42 bool incrementToNextValidEntity(Iterator& it) {
43 while (it._hostIterator != it._hostEnd) {
44 it._hostCell = *it._hostIterator;
45 if (it._gridView.indexSet().containsForSubDomain(_subDomain1,it._hostCell)) {
46 it._hostIntersectionIterator = it._hostGridView.ibegin(it._hostCell);
47 it._hostIntersectionEnd = it._hostGridView.iend(it._hostCell);
55 template<
typename Iterator>
56 void incrementToNextValidPosition(Iterator& it) {
58 while(it._hostIntersectionIterator != it._hostIntersectionEnd) {
59 auto hostIntersection = *it._hostIntersectionIterator;
60 if (hostIntersection.neighbor() && it._gridView.indexSet().containsForSubDomain(_subDomain2,hostIntersection.outside())) {
63 ++it._hostIntersectionIterator;
66 if (!incrementToNextValidEntity(it)) {
72 template<
typename Iterator>
73 void increment(Iterator& it) {
74 ++it._hostIntersectionIterator;
75 incrementToNextValidPosition(it);
78 template<
typename Iterator>
79 void incrementToStartPosition(Iterator& it)
81 if (incrementToNextValidEntity(it)) {
82 incrementToNextValidPosition(it);
86 SubDomainToSubDomainController(SubDomainIndex subDomain1, SubDomainIndex subDomain2)
87 : _subDomain1(subDomain1)
88 , _subDomain2(subDomain2)
91 SubDomainIndex subDomain1()
const
96 SubDomainIndex subDomain2()
const
101 const SubDomainIndex _subDomain1;
102 const SubDomainIndex _subDomain2;
106template<
typename Gr
idImp>
109 typename GridImp::LeafGridView,
110 typename detail::HostGridAccessor<GridImp>::Type::LeafGridView,
111 SubDomainToSubDomainController<typename GridImp::SubDomainIndex>
115 template<
typename,
typename,
typename,
typename>
118 template<
int,
int,
typename>
121 template<
typename,
typename>
127 typename GridImp::LeafGridView,
128 typename GridImp::HostGrid::LeafGridView,
132 typedef typename Base::Intersection::SubDomainIndex SubDomainIndex;
135 Base(grid.leafGridView(),grid._hostGrid.leafGridView(),
Controller(subDomain1,subDomain2),end)
141template<
typename Gr
idImp>
144 typename GridImp::LevelGridView,
145 typename detail::HostGridAccessor<GridImp>::Type::LevelGridView,
146 SubDomainToSubDomainController<typename GridImp::SubDomainIndex>
150 template<
typename,
typename,
typename,
typename>
153 template<
int,
int,
typename>
156 template<
typename,
typename>
162 typename GridImp::LevelGridView,
163 typename GridImp::HostGrid::LevelGridView,
167 typedef typename Base::Intersection::SubDomainIndex SubDomainIndex;
170 Base(grid.levelGridView(level),grid._hostGrid.levelGridView(level),
Controller(subDomain1,subDomain2),end)
Definition: multidomaingrid.hh:8
Definition: entity.hh:144
A meta grid for dividing an existing DUNE grid into subdomains that can be accessed as a grid in thei...
Definition: multidomaingrid/multidomaingrid.hh:241
Definition: subdomaininterfaceiterator.hh:355
Definition: subdomaintosubdomaininterfaceiterator.hh:19
An intersection that forms part of the interface between two subdomains.
Definition: subdomaininterfaceiterator.hh:32
Definition: subdomaintosubdomaininterfaceiterator.hh:113
Definition: subdomaintosubdomaininterfaceiterator.hh:148