1#ifndef TATOOINE_FTLE_FIELD_H
2#define TATOOINE_FTLE_FIELD_H
13template <
typename FlowmapGradient>
15 :
scalarfield<ftle_field<FlowmapGradient>, typename FlowmapGradient::real_type,
16 FlowmapGradient::num_dimensions()> {
17 using real_type =
typename FlowmapGradient::real_type;
20 using vec_type =
typename FlowmapGradient::vec_type;
24 return FlowmapGradient::num_dimensions();
32 template <
typename V,
typename VReal,
size_t N,
33 template <
typename,
size_t>
typename ODESolver>
34 requires requires(V&& v,
typename V::pos_type&& x,
typename V::real_type&& t) {
38 ODESolver<VReal, N>
const&)
42 template <
typename V,
typename VReal,
size_t N>
43 requires requires(V&& v,
typename V::pos_type&& x,
typename V::real_type&& t) {
49 template <
typename V,
typename VReal,
size_t N>
50 requires requires(V&& v,
typename V::pos_type&& x,
typename V::real_type&& t) {
52 ->std::convertible_to<
typename V::tensor_type>;
59 template <
typename V,
typename VReal,
size_t N>
60 requires requires(V&& v,
typename V::pos_type&& x,
typename V::real_type&& t) {
89template <
typename V,
typename Real,
size_t N,
90 template <
typename,
size_t>
typename ODESolver>
96template <
typename V,
typename Real,
size_t N>
100template <
typename V,
typename Real,
size_t N>
104template <
typename V,
typename Real,
size_t N,
typename EpsReal>
108template <
typename... Domains,
typename Flowmap>
112 auto const fixed_time_phi = [&
flowmap, t0, tau](
auto const& x) {
117 grid.sample_to_vertex_property(fixed_time_phi,
"[ftle]_phi", exec);
118 auto const& nabla_phi =
119 grid.sample_to_vertex_property(
diff(phi),
"[ftle]_nabla_phi", exec);
122 auto const& nabla_phi_at_pos = nabla_phi(is...);
125 return gcem::log(gcem::sqrt(eigvals(
sizeof...(Domains) - 1))) /
131template <
typename... Domains,
typename Flowmap>
Definition: grid_edge.h:16
Definition: rectilinear_grid.h:38
Definition: concepts.h:33
Definition: concepts.h:21
static constexpr sequential_t sequential
Definition: tags.h:63
Definition: algorithm.h:6
auto flowmap(vectorfield< V, Real, NumDimensions > const &v, tag::numerical_t)
Definition: numerical_flowmap.h:412
auto ftle(rectilinear_grid< Domains... > &grid, Flowmap &&flowmap, arithmetic auto const t0, arithmetic auto const tau, execution_policy_tag auto const exec) -> auto &
Definition: ftle.h:109
auto transposed(dynamic_tensor auto &&t)
Definition: transposed_tensor.h:170
constexpr auto diff(polynomial< Real, Degree > const &f)
Definition: polynomial.h:179
constexpr auto eigenvalues_sym(Mat &&A)
Definition: eigenvalues.h:55
vec< real_type, NumDimensions > pos_type
Definition: field.h:20
Tensor tensor_type
Definition: field.h:18
constexpr ftle_field(vectorfield< V, VReal, N > const &v, arithmetic auto tau, vec_type const &eps)
Definition: ftle.h:63
typename FlowmapGradient::vec_type vec_type
Definition: ftle.h:20
auto flowmap_gradient() const -> const auto &
Definition: ftle.h:85
constexpr ftle_field(vectorfield< V, VReal, N > const &v, arithmetic auto tau, arithmetic auto eps)
Definition: ftle.h:54
constexpr ftle_field(vectorfield< V, VReal, N > const &v, arithmetic auto tau, ODESolver< VReal, N > const &)
Definition: ftle.h:37
ftle_field< FlowmapGradient > this_type
Definition: ftle.h:18
void set_tau(real_type tau)
Definition: ftle.h:83
FlowmapGradient m_flowmap_gradient
Definition: ftle.h:28
auto tau() -> auto &
Definition: ftle.h:82
auto flowmap_gradient() -> auto &
Definition: ftle.h:86
typename FlowmapGradient::real_type real_type
Definition: ftle.h:17
auto evaluate(pos_type const &x, real_type t) const -> tensor_type final
Definition: ftle.h:74
static auto constexpr num_dimensions()
Definition: ftle.h:23
real_type m_tau
Definition: ftle.h:29
auto tau() const
Definition: ftle.h:81
constexpr ftle_field(vectorfield< V, VReal, N > const &v, arithmetic auto tau)
Definition: ftle.h:46
Default differentiated flowmap uses central differences for differentiating.
Definition: differentiated_flowmap.h:12