23template <
typename T,
typename =
void>
24struct scalar_value_type
31struct scalar_value_type<
T,
std::
void_t<typename T::value_type>>
33 typedef typename T::value_type value_type;
37using scalar_value_type_t =
typename scalar_value_type<T>::value_type;
144 for (std::size_t
i = 0;
i <
perm.size(); ++
i)
157 std::span<E>
data, std::span<const int>
emap,
160 for (std::size_t
i = 0;
i <
perm.size(); ++
i)
181 const std::size_t dim =
perm.size();
186 for (std::size_t
i = 0;
i < dim; ++
i)
210template <std::
floating_po
int T>
211std::vector<std::size_t>
214 return math::transpose_lu<T>(
A);
250template <
typename T,
typename E>
252 std::span<const std::size_t>
v_size_t,
253 MDSPAN_IMPL_STANDARD_NAMESPACE::mdspan<
254 const T, MDSPAN_IMPL_STANDARD_NAMESPACE::dextents<std::size_t, 2>>
258 using U =
typename impl::scalar_value_type_t<E>;
260 const std::size_t dim =
v_size_t.size();
264 for (std::size_t
i = 0;
i < dim; ++
i)
266 for (std::size_t
j =
i + 1;
j < dim; ++
j)
272 for (std::size_t
i = 1;
i <= dim; ++
i)
275 *=
static_cast<U>(M(dim -
i, dim -
i));
276 for (std::size_t
j = 0;
j < dim -
i; ++
j)
279 +=
static_cast<U>(M(dim -
i,
j))
292template <
typename T,
typename E>
294 std::span<const std::size_t>
v_size_t,
295 MDSPAN_IMPL_STANDARD_NAMESPACE::mdspan<
296 const T, MDSPAN_IMPL_STANDARD_NAMESPACE::dextents<std::size_t, 2>>
300 using U =
typename impl::scalar_value_type_t<E>;
302 const std::size_t dim =
v_size_t.size();
308 for (std::size_t
i = 0;
i < dim; ++
i)
310 for (std::size_t
j =
i + 1;
j < dim; ++
j)
316 for (std::size_t
i = 1;
i <= dim; ++
i)
319 *=
static_cast<U>(M(dim -
i, dim -
i));
320 for (std::size_t
j = 0;
j < dim -
i; ++
j)
A finite element.
Definition finite-element.h:139
Matrix and permutation precomputation.
Definition precompute.h:17
void apply_permutation(std::span< const std::size_t > perm, std::span< E > data, std::size_t offset=0, std::size_t block_size=1)
Definition precompute.h:141
void apply_permutation_to_transpose(std::span< const std::size_t > perm, std::span< E > data, std::size_t offset=0, std::size_t block_size=1)
Definition precompute.h:177
void apply_matrix_to_transpose(std::span< const std::size_t > v_size_t, MDSPAN_IMPL_STANDARD_NAMESPACE::mdspan< const T, MDSPAN_IMPL_STANDARD_NAMESPACE::dextents< std::size_t, 2 > > M, std::span< E > data, std::size_t offset=0, std::size_t block_size=1)
Apply a (precomputed) matrix to some transposed data.
Definition precompute.h:293
std::vector< std::size_t > prepare_matrix(std::pair< std::vector< T >, std::array< std::size_t, 2 > > &A)
Definition precompute.h:212
void prepare_permutation(std::span< std::size_t > perm)
Definition precompute.cpp:10
void apply_permutation_mapped(std::span< const std::size_t > perm, std::span< E > data, std::span< const int > emap, std::size_t block_size=1)
Permutation of mapped data.
Definition precompute.h:156
void apply_matrix(std::span< const std::size_t > v_size_t, MDSPAN_IMPL_STANDARD_NAMESPACE::mdspan< const T, MDSPAN_IMPL_STANDARD_NAMESPACE::dextents< std::size_t, 2 > > M, std::span< E > data, std::size_t offset=0, std::size_t block_size=1)
Apply a (precomputed) matrix.
Definition precompute.h:251