8#include <basix/mdspan.hpp>
11#include <dolfinx/common/types.h>
19template <
class U,
class T>
21 = std::is_invocable_v<U, std::span<T>, std::span<const std::uint32_t>,
28template <
class U,
class T,
class G = dolfinx::scalar_value_t<T>>
29concept FEkernel = std::is_invocable_v<U, T*,
const T*,
const T*,
const G*,
30 const int*,
const std::uint8_t*,
void*>;
35 = std::is_convertible_v<
36 std::remove_cvref_t<T>,
37 md::mdspan<const std::int32_t, md::dextents<std::size_t, 2>>>
38 or std::is_convertible_v<
39 std::remove_cvref_t<T>,
40 md::mdspan<const std::int32_t, md::dextents<std::size_t, 1>>>;
51concept DofMapPackBase =
requires(
const std::remove_cvref_t<T>& t) {
52 requires std::tuple_size_v<std::remove_cvref_t<T>> == 3;
53 requires std::is_convertible_v<
54 std::remove_cvref_t<decltype(std::get<0>(t))>,
55 md::mdspan<
const std::int32_t, md::dextents<std::size_t, 2>>>;
56 { std::get<1>(t) } -> std::convertible_to<int>;
65 = DofMapPackBase<T> and
requires(
const std::remove_cvref_t<T>& t) {
66 { std::get<2>(t)[0] } -> std::convertible_to<std::int32_t>;
74 = DofMapPackBase<T> and
requires(
const std::remove_cvref_t<T>& t) {
75 { std::get<2>(t)(0, 0) } -> std::convertible_to<std::int32_t>;
83 = DofMapPackBase<T> and
requires(
const std::remove_cvref_t<T>& t) {
84 { std::get<2>(t)(0, 0, 0) } -> std::convertible_to<std::int32_t>;
Concept for the degree-of-freedom map data passed to the cell assembly kernel, whose (2) entry is a f...
Definition traits.h:65
Concept for the degree-of-freedom map data passed to the entity assembly kernel, whose (2) entry is i...
Definition traits.h:74
Concept for the degree-of-freedom map data passed to the interior facet assembly kernel,...
Definition traits.h:83
Finite element cell kernel concept.
Definition traits.h:29
Concept for mdspan of rank 1 or 2.
Definition traits.h:35
Finite element method functionality.
Definition assemble_expression_impl.h:23