dune-multidomaingrid 2.9
Loading...
Searching...
No Matches
subdomaingrid.hh
Go to the documentation of this file.
1#ifndef DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HH
2#define DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HH
3
4#include <memory>
5#include <string>
6
8
11
22
23
24namespace Dune {
25
26namespace mdgrid {
27
28
29// forward declaration in correct namespace
30template<typename,typename>
31class MultiDomainGrid;
32
33namespace subdomain {
34
35template<typename MDGrid>
36class SubDomainGrid;
37
38template<typename MDGrid>
40
41private:
42
43 static const int dim = MDGrid::dimension;
44 static const int dimw = MDGrid::dimensionworld;
45
46public:
47
48 struct Traits
49 {
52
53
55 const Grid,
57 const Grid,
59 const Grid,
60 typename MDGrid::LeafIndexSetImp
61 >,
62 typename MDGrid::LeafGridView::Intersection
63 >
64 >;
65
67 const Grid,
69 const Grid,
71 const Grid,
72 typename MDGrid::LevelIndexSetImp
73 >,
74 typename MDGrid::LevelGridView::Intersection
75 >
76 >;
77
79 const Grid,
81 const Grid,
83 const Grid,
84 typename MDGrid::LeafIndexSetImp
85 >,
86 typename MDGrid::LeafGridView::IntersectionIterator
87 >,
89 const Grid,
91 const Grid,
92 typename MDGrid::LeafIndexSetImp
93 >,
94 typename MDGrid::LeafGridView::Intersection
95 >
96 >;
97
99 const Grid,
101 const Grid,
103 const Grid,
104 typename MDGrid::LevelIndexSetImp
105 >,
106 typename MDGrid::LevelGridView::IntersectionIterator
107 >,
109 const Grid,
111 const Grid,
112 typename MDGrid::LevelIndexSetImp
113 >,
114 typename MDGrid::LevelGridView::Intersection
115 >
116 >;
117
119
122
123 template <int cd>
124 struct Codim
125 {
126
129
131
133
134 template <PartitionIteratorType pitype>
136 {
137
139 cd,
140 const Grid,
142 typename Traits::LevelGridView,
143 typename MDGrid::LevelGridView::template Codim<cd>::template Partition<pitype>::Iterator,
144 cd,
145 pitype,
146 const Grid
147 >
148 >;
149
151 cd,
152 const Grid,
154 typename Traits::LeafGridView,
155 typename MDGrid::LeafGridView::template Codim<cd>::template Partition<pitype>::Iterator,
156 cd,
157 pitype,
158 const Grid
159 >
160 >;
161 };
162
165
166 private:
167 friend class Dune::Entity<cd, dim, const Grid, EntityWrapper>;
168
169 };
170
173
175 const Grid,
177 const Grid,
178 typename MDGrid::HostGrid::Traits::GlobalIdSet
179 >,
180 typename MDGrid::HostGrid::Traits::GlobalIdSet::IdType
181 >;
182
184 const Grid,
186 const Grid,
187 typename MDGrid::HostGrid::Traits::LocalIdSet
188 >,
189 typename MDGrid::HostGrid::Traits::LocalIdSet::IdType
190 >;
191
193 [[deprecated("Use Communication. Will be removed after release 2.9")]]
194 = typename MDGrid::CollectiveCommunication;
195
196 using Communication = typename MDGrid::Communication;
197 };
198
199};
200
201
202template<typename MDGrid>
204 public GridDefaultImplementation<MDGrid::dimension,
205 MDGrid::dimensionworld,
206 typename MDGrid::ctype,
207 SubDomainGridFamily<MDGrid> > {
208
209 template<typename,typename>
210 friend class ::Dune::mdgrid::MultiDomainGrid;
211
212 template<int codim, int dim, typename GridImp>
213 friend class EntityWrapperBase;
214
215 template<int codim, int dim, typename GridImp>
216 friend class EntityWrapper;
217
218 template<typename, typename, int codim, PartitionIteratorType pitype, typename GridImp>
219 friend class IteratorWrapper;
220
221 template<typename GridImp>
223
224 template<int mydim, int coorddim, typename GridImp>
225 friend class GeometryWrapper;
226
227 template<int mydim, int coorddim, typename GridImp>
229
230 template<typename GridImp, typename WrappedIndexSet>
231 friend class IndexSetWrapper;
232
233 template<typename GridImp, typename WrappedIdSet>
234 friend class IdSetWrapper;
235
236 template<typename GridImp>
237 friend struct ::Dune::mdgrid::detail::HostGridAccessor;
238
239 template<typename,typename,typename>
241
242 template<typename,typename,typename>
244
245 template<typename>
246 friend class LevelGridView;
247
248 template<typename>
249 friend class LeafGridView;
250
251 typedef GridDefaultImplementation<MDGrid::dimension,
252 MDGrid::dimensionworld,
253 typename MDGrid::ctype,
255 > BaseT;
256
258
259public:
260
261 using MultiDomainGrid = MDGrid;
262
263 using HostGrid = typename MDGrid::HostGrid;
264
265private:
266
267 typedef IndexSetWrapper<const SubDomainGrid<MDGrid>, typename MDGrid::LevelIndexSetImp> LevelIndexSetImp;
268
269 typedef IndexSetWrapper<const SubDomainGrid<MDGrid>, typename MDGrid::LeafIndexSetImp> LeafIndexSetImp;
270
271 typedef IdSetWrapper<const SubDomainGrid<MDGrid>, typename HostGrid::Traits::GlobalIdSet> GlobalIdSetImp;
272
273 typedef IdSetWrapper<const SubDomainGrid<MDGrid>, typename HostGrid::Traits::LocalIdSet> LocalIdSetImp;
274
275public:
276
278 typedef typename GridFamily::Traits Traits;
279
281 typedef typename MDGrid::ctype ctype;
282
284 typedef typename MDGrid::SubDomainIndex SubDomainIndex;
285
287
288 using BaseT::dimension;
290
293
294 template<typename EntitySeed>
295 typename Traits::template Codim<EntitySeed::codimension>::Entity
297 {
298 return
300 this,
301 typename MDGrid::template Codim<EntitySeed::codimension>::Entity(
302 _grid.entity(entitySeed)
303 )
304 );
305 }
306
307 int maxLevel() const {
308 return _grid.maxLevel();
309 }
310
311 template<int codim>
312 typename Traits::template Codim<codim>::LevelIterator lbegin(int level) const {
313 return IteratorWrapper<
314 typename Traits::LevelGridView,
315 typename MultiDomainGrid::LevelGridView::template Codim<codim>::template Partition<All_Partition>::Iterator,
316 codim,
318 const GridImp>(
319 this,
320 &this->levelGridView(level).indexSet(),
321 _grid.levelGridView(level).template begin<codim>(),
322 _grid.levelGridView(level).template end<codim>()
323 );
324 }
325
326 template<int codim>
327 typename Traits::template Codim<codim>::LevelIterator lend(int level) const {
328 return IteratorWrapper<
329 typename Traits::LevelGridView,
330 typename MultiDomainGrid::LevelGridView::template Codim<codim>::template Partition<All_Partition>::Iterator,
331 codim,
333 const GridImp>(
334 this,
335 &this->levelGridView(level).indexSet(),
336 _grid.levelGridView(level).template end<codim>(),
337 _grid.levelGridView(level).template end<codim>()
338 );
339 }
340
341 template<int codim, PartitionIteratorType pitype>
342 typename Traits::template Codim<codim>::template Partition<pitype>::LevelIterator lbegin(int level) const {
343 return IteratorWrapper<
344 typename Traits::LevelGridView,
345 typename MultiDomainGrid::LevelGridView::template Codim<codim>::template Partition<pitype>::Iterator,
346 codim,
347 pitype,
348 const GridImp>(
349 this,
350 &this->levelGridView(level).indexSet(),
351 _grid.levelGridView(level).template begin<codim,pitype>(),
352 _grid.levelGridView(level).template end<codim,pitype>()
353 );
354 }
355
356 template<int codim, PartitionIteratorType pitype>
357 typename Traits::template Codim<codim>::template Partition<pitype>::LevelIterator lend(int level) const {
358 return IteratorWrapper<
359 typename Traits::LevelGridView,
360 typename MultiDomainGrid::LevelGridView::template Codim<codim>::template Partition<pitype>::Iterator,
361 codim,
362 pitype,
363 const GridImp>(
364 this,
365 &this->levelGridView(level).indexSet(),
366 _grid.levelGridView(level).template end<codim,pitype>(),
367 _grid.levelGridView(level).template end<codim,pitype>()
368 );
369 }
370
371 template<int codim>
372 typename Traits::template Codim<codim>::LeafIterator leafbegin() const {
373 return IteratorWrapper<
374 typename Traits::LeafGridView,
375 typename MultiDomainGrid::LeafGridView::template Codim<codim>::template Partition<All_Partition>::Iterator,
376 codim,
378 const GridImp>(
379 this,
380 &this->leafGridView().indexSet(),
381 _grid.leafGridView().template begin<codim>(),
382 _grid.leafGridView().template end<codim>()
383 );
384 }
385
386 template<int codim>
387 typename Traits::template Codim<codim>::LeafIterator leafend() const {
388 return IteratorWrapper<
389 typename Traits::LeafGridView,
390 typename MultiDomainGrid::LeafGridView::template Codim<codim>::template Partition<All_Partition>::Iterator,
391 codim,
393 const GridImp>(
394 this,
395 &this->leafGridView().indexSet(),
396 _grid.leafGridView().template end<codim>(),
397 _grid.leafGridView().template end<codim>()
398 );
399 }
400
401 template<int codim, PartitionIteratorType pitype>
402 typename Traits::template Codim<codim>::template Partition<pitype>::LeafIterator leafbegin() const {
403 return IteratorWrapper<
404 typename Traits::LeafGridView,
405 typename MultiDomainGrid::LeafGridView::template Codim<codim>::template Partition<pitype>::Iterator,
406 codim,
407 pitype,
408 const GridImp>(
409 this,
410 &this->leafGridView().indexSet(),
411 _grid.leafGridView().template begin<codim,pitype>(),
412 _grid.leafGridView().template end<codim,pitype>()
413 );
414 }
415
416 template<int codim, PartitionIteratorType pitype>
417 typename Traits::template Codim<codim>::template Partition<pitype>::LeafIterator leafend() const {
418 return IteratorWrapper<
419 typename Traits::LeafGridView,
420 typename MultiDomainGrid::LeafGridView::template Codim<codim>::template Partition<pitype>::Iterator,
421 codim,
422 pitype,
423 const GridImp>(
424 this,
425 &this->leafGridView().indexSet(),
426 _grid.leafGridView().template end<codim,pitype>(),
427 _grid.leafGridView().template end<codim,pitype>()
428 );
429 }
430
431 int size(int level, int codim) const {
432 assert(level <= maxLevel());
433 return _levelIndexSets[level]->size(codim);
434 }
435
436 int size(int codim) const {
437 return _leafIndexSet.size(codim);
438 }
439
440 int size(int level, GeometryType type) const {
441 assert(level <= maxLevel());
442 return _levelIndexSets[level]->size(type);
443 }
444
445 int size(GeometryType type) const {
446 // TODO: check this (perhaps return sum over levelindexsets?)
447 return _leafIndexSet.size(type);
448 }
449
450 const typename Traits::GlobalIdSet& globalIdSet() const {
451 return _globalIdSet;
452 }
453
454 const typename Traits::LocalIdSet& localIdSet() const {
455 return _localIdSet;
456 }
457
458 const typename Traits::LevelIndexSet& levelIndexSet(int level) const {
459 if (!_grid.supportLevelIndexSets()) {
460 DUNE_THROW(GridError,"level index set support not enabled for this grid");
461 }
462 assert(level <= maxLevel());
463 assert(_levelIndexSets[level]);
464 return *_levelIndexSets[level];
465 }
466
467 const typename Traits::LeafIndexSet& leafIndexSet() const {
468 return _leafIndexSet;
469 }
470
472
478 void globalRefine(int refCount) {
479 DUNE_THROW(NotImplemented,"grid modification only allowed on the MultiDomainGrid");
480 }
481
483
493 bool mark(int refCount, const typename Traits::template Codim<0>::Entity& e) {
494 return _grid.mark(refCount,multiDomainEntity(e));
495 }
496
498
505 int getMark(const typename Traits::template Codim<0>::Entity& e) {
506 return _grid.getMark(multiDomainEntity(e));
507 }
508
510
516 bool preAdapt() {
517 DUNE_THROW(NotImplemented,"grid modification only allowed on the MultiDomainGrid");
518 }
519
521
527 bool adapt() {
528 DUNE_THROW(NotImplemented,"grid modification only allowed on the MultiDomainGrid");
529 }
530
532
538 void postAdapt() {
539 DUNE_THROW(NotImplemented,"grid modification only allowed on the MultiDomainGrid");
540 }
541
542 int overlapSize(int level, int codim) const {
543 return _grid.overlapSize(level,codim);
544 }
545
546 int overlapSize(int codim) const {
547 return _grid.overlapSize(codim);
548 }
549
550 int ghostSize(int level, int codim) const {
551 return _grid.ghostSize(level,codim);
552 }
553
554 int ghostSize(int codim) const {
555 return _grid.ghostSize(codim);
556 }
557
558 const typename Traits::Communication& comm() const {
559 return _grid.comm();
560 }
561
562 template<typename DataHandleImp, typename DataTypeImp>
566 int level) const
567 {
569 _grid._hostGrid.levelGridView(level).communicate(datahandle,iftype,dir);
570 }
571
572 template<typename DataHandleImp, typename DataTypeImp>
580
581 size_t numBoundarySegments() const
582 {
583 return _grid.numBoundarySegments();
584 }
585
589 const MDGrid& multiDomainGrid() const {
590 return _grid;
591 }
592
595 return _subDomain;
596 }
597
598 void update() {
599 if (_grid.supportLevelIndexSets()) {
600 while (_levelIndexSets.size() <= static_cast<std::size_t>(maxLevel())) {
601 _levelIndexSets.push_back(std::make_shared<LevelIndexSetImp>(*this,_grid.levelIndexSet(_levelIndexSets.size())));
602 }
603 }
604 }
605
606 bool operator==(const SubDomainGrid& rhs) const {
607 return (&_grid == &rhs._grid && _subDomain == rhs._subDomain);
608 }
609
612
613 template <
614 class EntityType,
619
621 template <
622 class EntityType,
624 static const EntityType&
626 return e;
627 }
628
629 template <
630 class EntityType,
632 static const typename MDGrid::Traits::template Codim<EntityType::codimension>::Entity &
634 return e.impl().multiDomainEntity();
635 }
636
637 template<typename EntityType>
638 static const typename MDGrid::template HostEntity<EntityType>::type& hostEntity(const EntityType& e) {
639 return e.impl().hostEntity();
640 }
641
642 static const auto& multiDomainIntersection(const typename Traits::LeafIntersection& is) {
643 return is.impl().multiDomainIntersection();
644 }
645
646 static const auto& multiDomainIntersection(const typename Traits::LevelIntersection& is) {
647 return is.impl().multiDomainIntersection();
648 }
649
652 typename Traits::LeafIntersectionIterator subDomainIntersectionIterator(const typename MDGrid::LeafSubDomainInterfaceIterator it) const {
653 assert(_subDomain == it->subDomain1() || _subDomain == it->subDomain2());
654 if (_subDomain == it->subDomain1())
656 const GridImp,
657 typename GridImp::LeafGridView::IndexSet,
658 typename MDGrid::LeafGridView::IntersectionIterator
659 >(
660 &this->leafGridView().indexSet(),
661 it->firstMultiDomainIntersectionIterator()
662 );
663 else
665 const GridImp,
666 typename GridImp::LeafGridView::IndexSet,
667 typename MDGrid::LeafGridView::IntersectionIterator
668 >(
669 &this->leafGridView().indexSet(),
670 it->secondMultiDomainIntersectionIterator()
671 );
672 }
673
674 typename Traits::LevelIntersectionIterator subDomainIntersectionIterator(const typename MDGrid::LevelSubDomainInterfaceIterator it) const {
675 assert(_subDomain == it->subDomain1() || _subDomain == it->subDomain2());
676 if (_subDomain == it->subDomain1())
678 const GridImp,
679 typename GridImp::LevelGridView::IndexSet,
680 typename MDGrid::LevelGridView::IntersectionIterator
681 >(
682 &this->levelGridView(it->firstMultiDomainIntersectionIterator()->inside().level()).indexSet(),
683 it->firstMultiDomainIntersectionIterator()
684 );
685 else
687 const GridImp,
688 typename GridImp::LevelGridView::IndexSet,
689 typename MDGrid::LevelGridView::IntersectionIterator
690 >(
691 &this->levelGridView(it->secondMultiDomainIntersectionIterator()->inside().level()).indexSet(),
692 it->secondMultiDomainIntersectionIterator()
693 );
694 }
695
696 template<typename Intersection>
697 IntersectionType intersectionType(const Intersection& intersection) const {
698 return intersection.impl().intersectionType();
699 }
700
701private:
702
703 MDGrid& _grid;
704 SubDomainIndex _subDomain;
705 GlobalIdSetImp _globalIdSet;
706 LocalIdSetImp _localIdSet;
707 LeafIndexSetImp _leafIndexSet;
709
710 SubDomainGrid(MDGrid& grid, SubDomainIndex subDomain) :
711 _grid(grid),
712 _subDomain(subDomain),
713 _globalIdSet(*this,grid._hostGrid.globalIdSet()),
714 _localIdSet(*this,grid._hostGrid.localIdSet()),
715 _leafIndexSet(*this,grid.leafIndexSet())
716 {
717 update();
718 }
719
720 template<typename EntityType>
721 bool containsMultiDomainEntity(const EntityType& e) const {
722 if (_grid.supportLevelIndexSets())
723 return levelIndexSet(e.level()).containsMultiDomainEntity(e);
724 else
725 return leafIndexSet().containsMultiDomainEntity(e);
726 }
727
728 template<typename EntityType>
729 bool containsHostEntity(const EntityType& e) const {
730 if (_grid.supportLevelIndexSets())
731 return levelIndexSet(e.level()).containsHostEntity(e);
732 else
733 return leafIndexSet().containsHostEntity(e);
734 }
735
736 SubDomainGrid(const SubDomainGrid& rv);
737 SubDomainGrid& operator=(const SubDomainGrid& rv);
738
739
740 template<typename Impl>
741 struct DataHandleWrapper
742 : public Dune::CommDataHandleIF<DataHandleWrapper<Impl>,
743 typename Impl::DataType
744 >
745 {
746
747 bool contains(int dim, int codim) const
748 {
749 return _impl.contains(dim,codim); // TODO: check if codim supported
750 }
751
752 bool fixedSize(int dim, int codim) const
753 {
754 //_impl.fixedSize(dim,codim); // TODO: warning if true?
755 return false;
756 }
757
758 template<typename Entity>
759 std::size_t size(const Entity& e) const
760 {
761 if (_grid.containsHostEntity(e))
762 return _impl.size(_grid.subDomainEntity(_grid._grid.wrapHostEntity(e)));
763 else
764 return 0;
765 }
766
767 template<typename MessageBufferImp, typename Entity>
768 void gather(MessageBufferImp& buf, const Entity& e) const
769 {
770 if (_grid.containsHostEntity(e))
771 _impl.gather(buf,_grid.subDomainEntity(_grid._grid.wrapHostEntity(e)));
772 }
773
774 template<typename MessageBufferImp, typename Entity>
775 void scatter(MessageBufferImp& buf, const Entity& e, std::size_t n)
776 {
777 if (_grid.containsHostEntity(e))
778 _impl.scatter(buf,_grid.subDomainEntity(_grid._grid.wrapHostEntity(e)),n);
779 }
780
781 DataHandleWrapper(Impl& impl, const SubDomainGrid<MDGrid>& grid)
782 : _impl(impl)
783 , _grid(grid)
784 {}
785
786 Impl& _impl;
787 const SubDomainGrid<MDGrid>& _grid;
788
789 };
790
791};
792
793} // namespace subdomain
794
795} // namespace mdgrid
796
797} // namespace Dune
798
799#endif // DUNE_MULTIDOMAINGRID_MULTIDOMAINGRID_HH
bool setContains(const ArrayBasedSet< SI, capacity > &a, const ArrayBasedSet< SI, capacity > &b)
std::size_t fixedSize
int size() const
SLList< T, A > & operator=(const SLList< T, A > &other)
size_type dim() const
#define DUNE_THROW(E, m)
CommunicationDirection
InterfaceType
All_Partition
const IndexSet & indexSet() const
const Grid & grid() const
Implementation & impl()
Implementation & impl()
Implementation & impl()
GridImp::template Codim< cd >::Entity Entity
Definition subdomaingrid/entity.hh:168
static constexpr int dimension
static constexpr int dimensionworld
Definition subdomaingrid/entity.hh:157
Definition subdomaingrid/intersectioniterator.hh:19
Definition subdomaingrid/hierarchiciterator.hh:17
Definition subdomaingrid.hh:207
Traits::template Codim< codim >::LevelIterator lend(int level) const
Definition subdomaingrid.hh:327
MDGrid MultiDomainGrid
Definition subdomaingrid.hh:261
bool preAdapt()
Use MultiDomainGrid::preAdapt() instead of this method.
Definition subdomaingrid.hh:516
Traits::template Codim< EntityType::codimension >::Entity subDomainEntity(const EntityType &mdEntity) const
Definition subdomaingrid.hh:616
int overlapSize(int codim) const
Definition subdomaingrid.hh:546
bool adapt()
Use MultiDomainGrid::adapt() instead of this method.
Definition subdomaingrid.hh:527
size_t numBoundarySegments() const
Definition subdomaingrid.hh:581
static const MDGrid::Traits::template Codim< EntityType::codimension >::Entity & multiDomainEntity(const EntityType &e)
Definition subdomaingrid.hh:633
Traits::template Codim< codim >::LeafIterator leafbegin() const
Definition subdomaingrid.hh:372
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator lend(int level) const
Definition subdomaingrid.hh:357
const Traits::LocalIdSet & localIdSet() const
Definition subdomaingrid.hh:454
int size(GeometryType type) const
Definition subdomaingrid.hh:445
Traits::LeafIntersectionIterator subDomainIntersectionIterator(const typename MDGrid::LeafSubDomainInterfaceIterator it) const
Definition subdomaingrid.hh:652
static const EntityType & multiDomainEntity(const EntityType &e)
specialization for -parent- multidomain entity
Definition subdomaingrid.hh:625
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafbegin() const
Definition subdomaingrid.hh:402
static const auto & multiDomainIntersection(const typename Traits::LevelIntersection &is)
Definition subdomaingrid.hh:646
int ghostSize(int codim) const
Definition subdomaingrid.hh:554
IntersectionType
Definition subdomaingrid.hh:286
@ foreign
Definition subdomaingrid.hh:286
@ neighbor
Definition subdomaingrid.hh:286
@ processor
Definition subdomaingrid.hh:286
@ boundary
Definition subdomaingrid.hh:286
Traits::template Codim< codim >::LeafIterator leafend() const
Definition subdomaingrid.hh:387
void update()
Definition subdomaingrid.hh:598
SubDomainIndex domain() const
Return our subdomain number.
Definition subdomaingrid.hh:594
int size(int codim) const
Definition subdomaingrid.hh:436
typename MDGrid::HostGrid HostGrid
Definition subdomaingrid.hh:263
int size(int level, int codim) const
Definition subdomaingrid.hh:431
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator lbegin(int level) const
Definition subdomaingrid.hh:342
Traits::LevelIntersectionIterator subDomainIntersectionIterator(const typename MDGrid::LevelSubDomainInterfaceIterator it) const
Definition subdomaingrid.hh:674
void communicate(CommDataHandleIF< DataHandleImp, DataTypeImp > &data, InterfaceType iftype, CommunicationDirection dir) const
Definition subdomaingrid.hh:573
int size(int level, GeometryType type) const
Definition subdomaingrid.hh:440
void communicate(CommDataHandleIF< DataHandleImp, DataTypeImp > &data, InterfaceType iftype, CommunicationDirection dir, int level) const
Definition subdomaingrid.hh:563
const Traits::Communication & comm() const
Definition subdomaingrid.hh:558
const Traits::LeafIndexSet & leafIndexSet() const
Definition subdomaingrid.hh:467
bool operator==(const SubDomainGrid &rhs) const
Definition subdomaingrid.hh:606
GridFamily::Traits Traits
Definition subdomaingrid.hh:278
const Traits::GlobalIdSet & globalIdSet() const
Definition subdomaingrid.hh:450
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Definition subdomaingrid.hh:312
IntersectionType intersectionType(const Intersection &intersection) const
Definition subdomaingrid.hh:697
bool mark(int refCount, const typename Traits::template Codim< 0 >::Entity &e)
Mark the entity e for grid refinement across ALL subdomains.
Definition subdomaingrid.hh:493
MDGrid::SubDomainIndex SubDomainIndex
The type used for subdomain numbers.
Definition subdomaingrid.hh:284
MDGrid::ctype ctype
The type used for coordinates.
Definition subdomaingrid.hh:281
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafend() const
Definition subdomaingrid.hh:417
SubDomainGridFamily< MDGrid > GridFamily
Definition subdomaingrid.hh:277
const MDGrid & multiDomainGrid() const
Get the MultiDomainGrid that we are part of.
Definition subdomaingrid.hh:589
int maxLevel() const
Definition subdomaingrid.hh:307
int overlapSize(int level, int codim) const
Definition subdomaingrid.hh:542
void postAdapt()
Use MultiDomainGrid::postAdapt() instead of this method.
Definition subdomaingrid.hh:538
const Traits::LevelIndexSet & levelIndexSet(int level) const
Definition subdomaingrid.hh:458
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &entitySeed) const
Definition subdomaingrid.hh:296
void globalRefine(int refCount)
Use MultiDomainGrid::globalRefine() instead of this method.
Definition subdomaingrid.hh:478
static const MDGrid::template HostEntity< EntityType >::type & hostEntity(const EntityType &e)
Definition subdomaingrid.hh:638
int getMark(const typename Traits::template Codim< 0 >::Entity &e)
Retrieve the refinement mark of entity e.
Definition subdomaingrid.hh:505
static const auto & multiDomainIntersection(const typename Traits::LeafIntersection &is)
Definition subdomaingrid.hh:642
int ghostSize(int level, int codim) const
Definition subdomaingrid.hh:550
Definition subdomaingrid/entity.hh:38
Definition subdomaingrid/entity.hh:79
Definition subdomaingrid/geometry.hh:14
Definition subdomaingrid/idsets.hh:21
Definition subdomaingrid/indexsets.hh:31
IndexType size(GeometryType type) const
Definition subdomaingrid/indexsets.hh:89
Definition subdomaingrid/intersection.hh:19
Definition subdomaingrid/iterator.hh:28
Definition subdomaingrid/localgeometry.hh:14
Definition subdomaingrid.hh:39
typename MDGrid::Communication Communication
Definition subdomaingrid.hh:196
typename MDGrid::CollectiveCommunication CollectiveCommunication
Definition subdomaingrid.hh:194
Dune::GridView< LeafGridViewTraits< const Grid > > LeafGridView
Definition subdomaingrid.hh:121
SubDomainGrid< MDGrid > Grid
The type that is implementing the grid.
Definition subdomaingrid.hh:51
Dune::GridView< LevelGridViewTraits< const Grid > > LevelGridView
Definition subdomaingrid.hh:120
typename Partition< All_Partition >::LevelIterator LevelIterator
Definition subdomaingrid.hh:164
typename Partition< All_Partition >::LeafIterator LeafIterator
Definition subdomaingrid.hh:163
HostGrid::template Codim< codim >::Entity HostEntity