3#ifndef DUNE_MMESH_INTERFACE_INTERSECTIONITERATOR_HH
4#define DUNE_MMESH_INTERFACE_INTERSECTIONITERATOR_HH
11#include <dune/grid/common/intersection.hh>
27template <
class Gr
idImp>
29 enum { dimension = GridImp::dimension };
31 enum { dimensionworld = GridImp::dimensionworld };
34 typedef typename GridImp::ctype ctype;
36 typedef typename GridImp::template MMeshInterfaceEntity<0>
40 typedef Dune::Intersection<
const GridImp,
49 const GridImp* grid,
const MMeshInterfaceEntity& hostEntity)
50 : grid_(grid), hostEntity_(hostEntity), i_(0), nbIdx_(0) {
51 const auto& indexSet = grid_->leafIndexSet();
52 const auto& cgalIndex =
53 MMeshInterfaceImpl::computeCGALIndices<MMeshInterfaceEntity, dimension>(
56 for (
int d = 0; d < dimension + 1; ++d) {
57 std::array<std::size_t, dimension> ids;
58 if constexpr (dimension == 1) {
59 ids[0] = indexSet.vertexIndexMap().at(
60 hostEntity.first->vertex(cgalIndex[d])->info().id);
63 ids[0] = indexSet.vertexIndexMap().at(
64 hostEntity.first->vertex(cgalIndex[d == 2 ? 1 : 0])->info().id);
65 ids[1] = indexSet.vertexIndexMap().at(
66 hostEntity.first->vertex(cgalIndex[d == 0 ? 1 : 2])->info().id);
70 std::sort(ids.begin(), ids.end());
71 maxNbIdx_[d] = (int)indexSet.indexMap().at(ids).size() - 2;
72 }
catch (std::exception& e) {
73 DUNE_THROW(InvalidStateException, e.what());
82 const GridImp* grid,
const MMeshInterfaceEntity& hostEntity,
84 : grid_(grid), hostEntity_(hostEntity), i_(dimension + 1), nbIdx_(0) {}
88 return hostEntity_ == other.hostEntity_ && i_ == other.i_ &&
89 nbIdx_ == other.nbIdx_;
94 if (maxNbIdx_[i_] != -1 and nbIdx_ < maxNbIdx_[i_])
112 if (i_ == dimension + 1)
return false;
113 if (grid_->entity(hostEntity_).partitionType() == GhostEntity)
114 return maxNbIdx_[i_] == -1 ||
115 dereference().outside().partitionType() == GhostEntity;
119 const GridImp* grid_;
120 MMeshInterfaceEntity hostEntity_;
123 std::array<int, dimension + 1> maxNbIdx_;
Iterator over all element neighborsMesh entities of codimension 0 ("elements") allow to visit all nei...
Definition: intersectioniterator.hh:28
MMeshInterfaceGridLeafIntersectionIterator(const GridImp *grid, const MMeshInterfaceEntity &hostEntity)
constructor for (begin) iterator
Definition: intersectioniterator.hh:48
MMeshInterfaceGridLeafIntersectionIterator(const GridImp *grid, const MMeshInterfaceEntity &hostEntity, bool endDummy)
constructor for end iterator
Definition: intersectioniterator.hh:81
Intersection dereference() const
dereferencing
Definition: intersectioniterator.hh:105
void increment()
prefix increment
Definition: intersectioniterator.hh:93
bool equals(const MMeshInterfaceGridLeafIntersectionIterator &other) const
returns if iterators reference same intersection
Definition: intersectioniterator.hh:87
MMeshInterfaceGridLeafIntersectionIterator()
default constructor
Definition: intersectioniterator.hh:45
An intersection with a leaf neighbor elementMesh entities of codimension 0 ("elements") allow to visi...
Definition: intersections.hh:36
The MMeshInterfaceGridEntity class.
The MMeshInterfaceGridLeafIntersection and MMeshLevelIntersection classes.