34namespace triqs::mesh {
45 requires(std::tuple_size_v<T> >= 1)
46 auto pop_front_tuple(T
const &tup) {
47 return [&]<
size_t... Is>(std::index_sequence<Is...>) {
48 return std::tie(std::get<Is + 1>(tup)...);
49 }(std::make_index_sequence<std::tuple_size_v<T> - 1>{});
63 template <Mesh M>
FORCEINLINE auto evaluate(M
const &,
auto const &f,
typename M::index_t
const &n) {
return f(n); }
85 FORCEINLINE auto evaluate(
Mesh auto const &,
auto const &f, nda::range::all_t) {
return f(nda::range::all_t{}); }
100 template <Mesh M>
FORCEINLINE auto evaluate(M
const &m,
auto const &f,
typename M::mesh_point_t
const &mp) {
102 return evaluate(m, f, mp.value());
148 template <
typename... Ds,
typename X1,
typename... Xs>
149 FORCEINLINE auto evaluate(std::tuple<Ds...>
const &tup,
auto const &f, X1
const &x1, Xs
const &...xs) {
150 auto const &d1 = std::get<0>(tup);
151 if constexpr (
sizeof...(Ds) > 1) {
153 detail::pop_front_tuple(tup),
154 [f, &x1, &d1](
auto const &...ys) __attribute__((always_inline)) {
155 return evaluate(d1, [f, &ys...](
auto const &y1) __attribute__((always_inline)) {
return f(y1, ys...); }, x1);
159 return evaluate(d1, f, x1);
178 return evaluate(m.components(), f, xs...);
Product mesh type for combining multiple meshes.
Concept for a mesh with values.
#define FORCEINLINE
Force-inline attribute portable across GCC and Clang.
Provides concepts for mesh points and meshes.
Provides various utilities used with Meshes.
Provides a product mesh type.
Lazy struct used in various function overloads as a placeholder for the closest mesh point to a given...