9#include <dolfinx/common/defines.h>
10#include <dolfinx/common/types.h>
13namespace dolfinx::fem::impl
18template <dolfinx::scalar T, std::
floating_po
int U = scalar_value_t<T>>
19using kernelptr_t = void (*)(T*,
const T*,
const T*,
const U*,
const int*,
20 const std::uint8_t*,
void*);
25template <dolfinx::scalar T, std::
floating_po
int U = scalar_value_t<T>>
26using kernel_t = std::function<void(T*,
const T*,
const T*,
const U*,
27 const int*,
const std::uint8_t*,
void*)>;
34template <dolfinx::scalar T, std::
floating_po
int U = scalar_value_t<T>>
35constexpr kernel_t<T, U> extract_kernel(
const ufcx_integral* integral)
37 if constexpr (std::is_same_v<T, float>)
38 return integral->tabulate_tensor_float32;
39 else if constexpr (std::is_same_v<T, double>)
40 return integral->tabulate_tensor_float64;
41#ifndef DOLFINX_NO_STDC_COMPLEX_KERNELS
42 else if constexpr (std::is_same_v<T, std::complex<float>>
45 return reinterpret_cast<kernelptr_t<T, U>
>(
46 integral->tabulate_tensor_complex64);
48 else if constexpr (std::is_same_v<T, std::complex<double>>
51 return reinterpret_cast<kernelptr_t<T, U>
>(
52 integral->tabulate_tensor_complex128);
56 throw std::runtime_error(
"Could not extract kernel from ufcx integral.");
consteval bool has_complex_ufcx_kernels()
Definition defines.h:99