5#ifndef DUNE_GRID_CONCEPT_ENTITY_HH
6#define DUNE_GRID_CONCEPT_ENTITY_HH
13#include <dune/grid/common/gridenums.hh>
14#include <dune/grid/concepts/geometry.hh>
15#include <dune/grid/concepts/archetypes/entity.hh>
25concept EntitySeed = std::semiregular<S> &&
requires(
const S seed)
27 { S::codimension } -> std::convertible_to<int>;
28 { seed.isValid() } -> std::convertible_to<bool>;
43requires(
const E e,
unsigned int codim)
45 requires E::mydimension == (E::dimension - E::codimension);
46 { e.level() } -> std::convertible_to<int>;
47 { e.partitionType() } -> std::same_as<Dune::PartitionType>;
48 { e.geometry() } -> std::same_as<typename E::Geometry>;
49 { e.type() } -> std::same_as<Dune::GeometryType>;
50 { e.subEntities(codim) } -> std::convertible_to<unsigned int>;
51 { e.seed() } -> std::same_as<typename E::EntitySeed>;
60 template<
class E,
int codim>
61 concept EntityCodimExtended =
69 requires(
const E e,
int subEntity)
71 { e.template subEntity<codim>(subEntity) } -> std::same_as<typename E::template Codim<codim>::Entity>;
75 template<
typename E, std::size_t... c>
76 void entityAllCodimsExtended(std::integer_sequence<std::size_t,c...>)
77 requires (EntityCodimExtended<E,int(c)> &&...);
91requires(
const E e,
int maxLevel)
93 requires (E::codimension == 0);
94 { e.father() } -> std::same_as<E>;
95 { e.hasFather() } -> std::convertible_to<bool>;
96 { e.isLeaf() } -> std::convertible_to<bool>;
97 { e.isRegular() } -> std::convertible_to<bool>;
98 { e.geometryInFather() } -> std::same_as<typename E::LocalGeometry>;
99 { e.hbegin(maxLevel) } -> std::same_as<typename E::HierarchicIterator>;
100 { e.hend(maxLevel) } -> std::same_as<typename E::HierarchicIterator>;
101 { e.isNew() } -> std::convertible_to<bool>;
102 { e.mightVanish() } -> std::convertible_to<bool>;
103 { e.hasBoundaryIntersections() } -> std::convertible_to<bool>;
105 requires std::same_as<E, typename E::template Codim<0>::Entity>;
107Impl::EntityCodimExtended<E,0> &&
109 Impl::entityAllCodimsExtended<E>(
range(from, to).to_integer_sequence());
Model of a grid entity with extended requirements for codimension 0.
Definition: entity.hh:89
Model of a grid entity for any codimension.
Definition: entity.hh:40
Model of an entity seed.
Definition: entity.hh:25
Model of a grid entity.
Definition: entity.hh:119
Model of a geometry object.
Definition: geometry.hh:29
std::integral_constant< std::size_t, i > index_constant
An index constant with value i.
Definition: indices.hh:29
static constexpr IntegralRange< std::decay_t< T > > range(T &&from, U &&to) noexcept
free standing function for setting up a range based for loop over an integer range for (auto i: range...
Definition: rangeutilities.hh:288
Namespace for concepts.
Definition: concept.hh:33
Utilities for reduction like operations on ranges.
Static tag representing a codimension.
Definition: dimension.hh:24
A unique label for each type of element that can occur in a grid.