1#ifndef TATOOINE_REGULAR_FLOWMAP_DISCRETIZATION_H
2#define TATOOINE_REGULAR_FLOWMAP_DISCRETIZATION_H
13template <
typename Real, std::
size_t NumDimensions>
19 template <std::size_t M,
typename... Ts>
24 template <
typename... Ts>
53 typename forward_grid_type::template typed_vertex_property_type<pos_type>;
55 template natural_neighbor_coordinates_sampler_type<pos_type>;
59 typename backward_grid_type::template typed_vertex_property_type<
62 typename backward_grid_type::
63 template natural_neighbor_coordinates_sampler_type<pos_type>;
78 std::unique_ptr<backward_grid_vertex_property_sampler_type>
82 template <
typename Flowmap,
typename ExecutionPolicy,
integral Int,
88 ExecutionPolicy execution_policy,
98 template <
typename Flowmap,
typename ExecutionPolicy, std::size_t... Is>
112 "flowmap_discretization")},
118 "flowmap_discretization")},
122 min(Is),
max(Is),
static_cast<std::size_t
>(resolution)}...};
124 grid.vertices().iterate_positions(
129 [&](
auto const& x)
mutable {
130 if constexpr (
requires {
flowmap.use_caching(
false); }) {
135 "flowmap_discretization" );
139 std::make_unique<forward_grid_vertex_property_sampler_type>(
150 std::make_unique<backward_grid_vertex_property_sampler_type>(
158 .template vertex_property<
160 "flowmap_discretization")},
163 "flowmap_discretization")} {}
170 template <
typename Flowmap,
typename ExecutionPolicy>
172 ExecutionPolicy execution_policy,
178 std::make_index_sequence<NumDimensions>{},
179 std::forward<Flowmap>(
flowmap),
187 sizeof...(resolution) == NumDimensions,
188 "Number of resolution components does not match number of dimensions.");
190 std::decay_t<Flowmap>::num_dimensions() == NumDimensions,
191 "Number of dimensions of flowmap does not match number of dimensions.");
194 template <
typename Flowmap,
typename ExecutionPolicy,
integral Int>
196 ExecutionPolicy execution_policy,
202 std::make_index_sequence<NumDimensions>{},
203 std::forward<Flowmap>(
flowmap),
211 std::decay_t<Flowmap>::num_dimensions() == NumDimensions,
212 "Number of dimensions of flowmap does not match number of dimensions.");
215 template <
typename Flowmap>
221 std::make_index_sequence<NumDimensions>{},
222 std::forward<Flowmap>(flowmap),
227 default_execution_policy,
230 sizeof...(resolution) == NumDimensions,
231 "Number of resolution components does not match number of dimensions.");
233 std::decay_t<Flowmap>::num_dimensions() == NumDimensions,
234 "Number of dimensions of flowmap does not match number of dimensions.");
237 template <
typename Flowmap,
integral Int>
243 std::make_index_sequence<NumDimensions>{},
244 std::forward<Flowmap>(flowmap),
249 default_execution_policy,
252 std::decay_t<Flowmap>::num_dimensions() == NumDimensions,
253 "Number of dimensions of flowmap does not match number of dimensions.");
262 m_forward_grid{std::move(other.m_forward_grid)},
263 m_forward_flowmap_discretization{
264 &m_forward_grid.template vertex_property<pos_type>(
265 "flowmap_discretization")},
266 m_forward_sampler{std::move(other.m_forward_sampler)},
268 m_backward_grid{std::move(other.m_backward_grid)},
269 m_backward_flowmap_discretization{
270 &m_backward_grid.template vertex_property<pos_type>(
271 "flowmap_discretization")},
272 m_backward_sampler{std::move(other.m_backward_sampler)} {}
274 auto read(filesystem::path
const&) {}
275 auto write(filesystem::path
const&) {}
279 return m_forward_grid;
285 return m_backward_grid;
289 return m_backward_grid;
295 return *m_forward_sampler;
299 return *m_forward_sampler;
303 return *m_backward_sampler;
307 return *m_backward_sampler;
313 return *m_forward_flowmap_discretization;
317 return *m_backward_flowmap_discretization;
327 return sampler(direction)(x);
Definition: grid_edge.h:16
Definition: rectilinear_grid.h:38
Definition: concepts.h:33
Definition: concepts.h:21
static constexpr parallel_t parallel
Definition: tags.h:60
Definition: algorithm.h:6
auto flowmap(vectorfield< V, Real, NumDimensions > const &v, tag::numerical_t)
Definition: numerical_flowmap.h:412
constexpr auto max(A &&a, B &&b)
Definition: math.h:20
constexpr auto min(A &&a, B &&b)
Definition: math.h:15
static constexpr forward_tag forward
Definition: tags.h:9
Definition: linspace.h:26
Definition: pointset.h:69
Definition: regular_flowmap_discretization.h:20
typename grid_type_creator< M - 1, linspace< Real >, Ts... >::type type
Definition: regular_flowmap_discretization.h:21
Samples a flow map by advecting particles from a uniform rectilinear grid.
Definition: regular_flowmap_discretization.h:14
vec< Real, NumDimensions > vec_type
Definition: regular_flowmap_discretization.h:17
typename backward_grid_type::template typed_vertex_property_type< pos_type > backward_grid_vertex_property_type
Definition: regular_flowmap_discretization.h:60
auto sampler(forward_tag const) -> auto &
Definition: regular_flowmap_discretization.h:298
auto sampler(forward_tag const) const -> auto const &
Definition: regular_flowmap_discretization.h:294
auto grid(backward_tag const) -> auto &
Definition: regular_flowmap_discretization.h:288
regular_flowmap_discretization(filesystem::path const &p)
Definition: regular_flowmap_discretization.h:165
auto grid(backward_tag const) const -> auto const &
Definition: regular_flowmap_discretization.h:284
auto sample(pos_type const &x, forward_or_backward_tag auto const direction) const
Definition: regular_flowmap_discretization.h:325
auto flowmap(forward_tag const) -> auto const &
Definition: regular_flowmap_discretization.h:312
auto read(filesystem::path const &)
Definition: regular_flowmap_discretization.h:274
regular_flowmap_discretization(Flowmap &&flowmap, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, vec< Int, NumDimensions > const &resolution)
Definition: regular_flowmap_discretization.h:238
Real real_type
Definition: regular_flowmap_discretization.h:15
regular_flowmap_discretization(regular_flowmap_discretization &&other) noexcept
Definition: regular_flowmap_discretization.h:256
regular_flowmap_discretization(std::index_sequence< Is... >, Flowmap &&flowmap, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, ExecutionPolicy, integral auto const ... resolution)
Definition: regular_flowmap_discretization.h:99
pointset< Real, NumDimensions > forward_grid_type
Definition: regular_flowmap_discretization.h:51
Real m_t1
Definition: regular_flowmap_discretization.h:67
auto sampler(backward_tag const) -> auto &
Definition: regular_flowmap_discretization.h:306
regular_flowmap_discretization(Flowmap &&flowmap, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, integral auto const ... resolution)
Definition: regular_flowmap_discretization.h:216
std::unique_ptr< forward_grid_vertex_property_sampler_type > m_forward_sampler
Definition: regular_flowmap_discretization.h:72
auto sampler(backward_tag const) const -> auto const &
Definition: regular_flowmap_discretization.h:302
static auto constexpr num_dimensions()
Definition: regular_flowmap_discretization.h:16
regular_flowmap_discretization(Flowmap &&flowmap, ExecutionPolicy execution_policy, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, vec< Int, NumDimensions > const &resolution)
Definition: regular_flowmap_discretization.h:195
auto flowmap(backward_tag const) -> auto const &
Definition: regular_flowmap_discretization.h:316
auto grid(forward_tag const) -> auto &
Definition: regular_flowmap_discretization.h:282
auto grid(forward_tag const) const -> auto const &
Definition: regular_flowmap_discretization.h:278
forward_grid_vertex_property_type * m_forward_flowmap_discretization
Definition: regular_flowmap_discretization.h:71
regular_flowmap_discretization()
Definition: regular_flowmap_discretization.h:156
pointset< Real, NumDimensions > backward_grid_type
Definition: regular_flowmap_discretization.h:57
backward_grid_vertex_property_type * m_backward_flowmap_discretization
Definition: regular_flowmap_discretization.h:76
typename forward_grid_type::template typed_vertex_property_type< pos_type > forward_grid_vertex_property_type
Definition: regular_flowmap_discretization.h:53
regular_flowmap_discretization(std::index_sequence< Is... > seq, Flowmap &&flowmap, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, ExecutionPolicy execution_policy, vec< Int, NumDimensions > const &resolution)
Definition: regular_flowmap_discretization.h:84
Real m_tau
Definition: regular_flowmap_discretization.h:68
regular_flowmap_discretization(Flowmap &&flowmap, ExecutionPolicy execution_policy, arithmetic auto const t0, arithmetic auto const tau, pos_type const &min, pos_type const &max, integral auto const ... resolution)
Definition: regular_flowmap_discretization.h:171
Real m_t0
Definition: regular_flowmap_discretization.h:66
forward_grid_type m_forward_grid
Definition: regular_flowmap_discretization.h:70
typename forward_grid_type::template natural_neighbor_coordinates_sampler_type< pos_type > forward_grid_vertex_property_sampler_type
Definition: regular_flowmap_discretization.h:55
std::unique_ptr< backward_grid_vertex_property_sampler_type > m_backward_sampler
Definition: regular_flowmap_discretization.h:79
static constexpr auto default_execution_policy
Definition: regular_flowmap_discretization.h:80
backward_grid_type m_backward_grid
Definition: regular_flowmap_discretization.h:75
typename backward_grid_type::template natural_neighbor_coordinates_sampler_type< pos_type > backward_grid_vertex_property_sampler_type
Definition: regular_flowmap_discretization.h:63
auto write(filesystem::path const &)
Definition: regular_flowmap_discretization.h:275