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;
138 std::size_t
offset = 0, std::size_t
n = 1)
140 for (std::size_t
i = 0;
i <
perm.size(); ++
i)
141 for (std::size_t
b = 0;
b <
n; ++
b)
148 std::span<E>
data, std::span<const int>
emap,
151 for (std::size_t
i = 0;
i <
perm.size(); ++
i)
152 for (std::size_t
b = 0;
b <
n; ++
b)
169 const std::size_t dim =
perm.size();
171 for (std::size_t
b = 0;
b <
n; ++
b)
173 for (std::size_t
i = 0;
i < dim; ++
i)
197template <std::
floating_po
int T>
198std::vector<std::size_t>
201 return math::transpose_lu<T>(
A);
235template <
typename T,
typename E>
237 md::mdspan<
const T, md::dextents<std::size_t, 2>> M,
238 std::span<E>
data, std::size_t
offset = 0, std::size_t
n = 1)
240 using U =
typename impl::scalar_value_type_t<E>;
242 const std::size_t dim =
v_size_t.size();
244 for (std::size_t
b = 0;
b <
n; ++
b)
246 for (std::size_t
i = 0;
i < dim; ++
i)
248 for (std::size_t
j =
i + 1;
j < dim; ++
j)
255 for (std::size_t
i = 1;
i <= dim; ++
i)
258 for (std::size_t
j = 0;
j < dim -
i; ++
j)
275template <
typename T,
typename E>
277 std::span<const std::size_t>
v_size_t,
278 md::mdspan<
const T, md::dextents<std::size_t, 2>> M, std::span<E>
data,
279 std::size_t
offset = 0, std::size_t
n = 1)
281 using U =
typename impl::scalar_value_type_t<E>;
283 const std::size_t dim =
v_size_t.size();
286 for (std::size_t
b = 0;
b <
n; ++
b)
288 for (std::size_t
i = 0;
i < dim; ++
i)
290 for (std::size_t
j =
i + 1;
j < dim; ++
j)
296 for (std::size_t
i = 1;
i <= dim; ++
i)
299 *=
static_cast<U>(M(dim -
i, dim -
i));
300 for (std::size_t
j = 0;
j < dim -
i; ++
j)
A finite element.
Definition finite-element.h:137
Matrix and permutation pre-computation.
Definition precompute.h:18
std::vector< std::size_t > prepare_matrix(std::pair< std::vector< T >, std::array< std::size_t, 2 > > &A)
Prepare a square matrix.
Definition precompute.h:199
void apply_permutation(std::span< const std::size_t > perm, std::span< E > data, std::size_t offset=0, std::size_t n=1)
Apply a (precomputed) permutation .
Definition precompute.h:137
void apply_inv_permutation_right(std::span< const std::size_t > perm, std::span< E > data, std::size_t offset=0, std::size_t n=1)
Apply a (precomputed) permutation to some transposed data.
Definition precompute.h:165
void prepare_permutation(std::span< std::size_t > perm)
Prepare a permutation.
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 n=1)
Permutation of mapped data.
Definition precompute.h:147
void apply_tranpose_matrix_right(std::span< const std::size_t > v_size_t, md::mdspan< const T, md::dextents< std::size_t, 2 > > M, std::span< E > data, std::size_t offset=0, std::size_t n=1)
Apply a (precomputed) matrix to some transposed data.
Definition precompute.h:276
void apply_matrix(std::span< const std::size_t > v_size_t, md::mdspan< const T, md::dextents< std::size_t, 2 > > M, std::span< E > data, std::size_t offset=0, std::size_t n=1)
Apply a (precomputed) matrix.
Definition precompute.h:236