5#ifndef DUNE_GRID_CONCEPTS_GRID_HH
6#define DUNE_GRID_CONCEPTS_GRID_HH
13#include <dune/common/indices.hh>
14#include <dune/geometry/type.hh>
38 template<
class G,
int codim, Dune::PartitionIteratorType partition>
39 concept GridCodimPartition =
40 EntityIterator<typename G::template Codim<codim>::template Partition<partition>::LevelIterator> &&
41 EntityIterator<typename G::template Codim<codim>::template Partition<partition>::LeafIterator>;
43 template<
class G,
int codim>
44 concept GridCodimAllPartitions =
48 GridCodimPartition<G,codim,Dune::PartitionIteratorType::Interior_Partition> &&
49 GridCodimPartition<G,codim,Dune::PartitionIteratorType::InteriorBorder_Partition> &&
50 GridCodimPartition<G,codim,Dune::PartitionIteratorType::Overlap_Partition> &&
51 GridCodimPartition<G,codim,Dune::PartitionIteratorType::OverlapFront_Partition> &&
52 GridCodimPartition<G,codim,Dune::PartitionIteratorType::All_Partition> &&
53 GridCodimPartition<G,codim,Dune::PartitionIteratorType::Ghost_Partition>
56 template<
class G,
int codim>
61 Geometry<
typename G::template Codim<codim>::Geometry> &&
62 Geometry<
typename G::template Codim<codim>::LocalGeometry> &&
63 Entity<
typename G::template Codim<codim>::Entity> &&
64 EntitySeed<
typename G::template Codim<codim>::EntitySeed> &&
65 std::same_as<
typename G::template Codim<codim>::Entity,
typename G::template Codim<0>::Entity::template Codim<codim>::Entity> &&
66 std::same_as<
typename G::template Codim<codim>::Entity,
typename G::LeafIndexSet::template Codim<codim>::Entity> &&
67 std::same_as<
typename G::template Codim<codim>::Entity,
typename G::LevelIndexSet::template Codim<codim>::Entity> &&
68 requires(
const G cg,
const typename G::template Codim<codim>::EntitySeed& seed)
70 { cg.entity(seed) } -> std::convertible_to<typename G::template Codim<codim>::Entity>;
73 requires(G g, Archetypes::CommDataHandle<std::byte>& handle)
75 { g.loadBalance(handle) } -> std::convertible_to<bool>;
77 } && GridCodimAllPartitions<G,codim>
80 template<
class G, std::size_t... c>
81 void gridAllCodims(std::index_sequence<c...>)
82 requires (GridCodim<G,int(c)> &&...);
120requires(
const G cg,
int level,
int codim, Dune::GeometryType type)
123 { G::dimension } -> std::convertible_to<int>;
124 { G::dimensionworld } -> std::convertible_to<int>;
127 requires std::same_as<G,typename G::LeafGridView::Grid>;
128 requires std::same_as<G,typename G::LevelGridView::Grid>;
130 typename G::HierarchicIterator;
133 { cg.maxLevel() } -> std::convertible_to<int>;
134 { cg.size(level, codim) } -> std::convertible_to<int>;
135 { cg.size(codim) } -> std::convertible_to<int>;
136 { cg.size(level, type) } -> std::convertible_to<int>;
137 { cg.size(type) } -> std::convertible_to<int>;
138 { cg.numBoundarySegments() } -> std::convertible_to<std::size_t>;
139 { cg.levelGridView(level) } -> std::same_as<typename G::LevelGridView>;
140 { cg.leafGridView() } -> std::same_as<typename G::LeafGridView>;
141 { cg.globalIdSet() } -> std::same_as<const typename G::GlobalIdSet&>;
142 { cg.localIdSet() } -> std::same_as<const typename G::LocalIdSet&>;
143 { cg.levelIndexSet(level) } -> std::same_as<const typename G::LevelIndexSet&>;
144 { cg.leafIndexSet() } -> std::same_as<const typename G::LeafIndexSet&>;
145 { cg.comm() } -> std::convertible_to<typename G::Communication>;
148 requires requires(G g,
int refCount,
const typename G::template Codim<0>::Entity& entity)
150 { g.mark(refCount,entity) } -> std::convertible_to<bool>;
151 { g.getMark(entity) } -> std::convertible_to<int>;
152 { g.preAdapt() } -> std::convertible_to<bool>;
153 { g.adapt() } -> std::convertible_to<bool>;
154 { g.loadBalance() } -> std::convertible_to<bool>;
155 g.globalRefine(refCount);
159Impl::GridCodim<G,0> &&
160requires (index_constant<1> from, index_constant<G::dimension+1> to) {
161 Impl::gridAllCodims<G>(range(from, to).to_integer_sequence());
Definition concepts/datahandle.hh:14
static const bool v
Definition common/capabilities.hh:59
static const bool v
Definition common/capabilities.hh:75
static const bool v
Definition common/capabilities.hh:98
Requirements for implementations of the Dune::Grid interface.
Definition concepts/grid.hh:109
Model of a grid view.
Definition concepts/gridview.hh:75
Model of an index set.
Definition concepts/indexidset.hh:55
Model of an id set.
Definition concepts/indexidset.hh:105
Model of an intersection.
Definition concepts/intersection.hh:23
Model of an intersection iterator.
Definition concepts/intersectioniterator.hh:21
A set of traits classes to store static information about grid implementation.