Tatooine
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Static Private Member Functions | Private Attributes | List of all members
tatooine::autonomous_particle< Real, NumDimensions > Struct Template Reference

#include <autonomous_particle.h>

Inheritance diagram for tatooine::autonomous_particle< Real, NumDimensions >:
[legend]
Collaboration diagram for tatooine::autonomous_particle< Real, NumDimensions >:
[legend]

Public Types

using split_behaviors = detail::autonomous_particle::split_behaviors< Real, NumDimensions >
 
using this_type = autonomous_particle< Real, NumDimensions >
 
using simple_particle_type = particle< Real, NumDimensions >
 
using real_type = Real
 
using vec_type = vec< real_type, NumDimensions >
 
using mat_type = mat< real_type, NumDimensions, NumDimensions >
 
using pos_type = vec_type
 
using container_type = std::vector< this_type >
 
using simple_particle_container_type = std::vector< simple_particle_type >
 
using ellipse_type = geometry::hyper_ellipse< Real, NumDimensions >
 
using parent_type = ellipse_type
 
using sampler_type = detail::autonomous_particle::sampler< Real, NumDimensions >
 
using hierarchy_pair = detail::autonomous_particle::hierarchy_pair
 
- Public Types inherited from tatooine::geometry::hyper_ellipse< Real, NumDimensions >
using this_type = hyper_ellipse< Real, NumDimensions >
 
using vec_type = vec< Real, NumDimensions >
 
using pos_type = vec_type
 
using mat_type = mat< Real, NumDimensions, NumDimensions >
 
using real_type = Real
 

Public Member Functions

 autonomous_particle (autonomous_particle const &other)=default
 { More...
 
 autonomous_particle (autonomous_particle &&other) noexcept=default
 
auto operator= (autonomous_particle const &other) -> autonomous_particle &=default
 
auto operator= (autonomous_particle &&other) noexcept -> autonomous_particle &=default
 
 ~autonomous_particle ()=default
 
 autonomous_particle (ellipse_type const &ell, real_type const t, std::uint64_t const id)
 
 autonomous_particle (ellipse_type const &ell, real_type const t, std::atomic_uint64_t &uuid_generator)
 
 autonomous_particle (ellipse_type const &ell, real_type const t, std::uint8_t max_split_depth, std::uint64_t const id)
 
 autonomous_particle (ellipse_type const &ell, real_type const t, std::uint8_t max_split_depth, std::atomic_uint64_t &uuid_generator)
 
 autonomous_particle (pos_type const &x, real_type const t, real_type const r, std::uint64_t const id)
 
 autonomous_particle (pos_type const &x, real_type const t, real_type const r, std::atomic_uint64_t &uuid_generator)
 
 autonomous_particle (pos_type const &x, real_type const t, real_type const r, std::uint8_t max_split_depth, std::uint64_t const id)
 
 autonomous_particle (pos_type const &x, real_type const t, real_type const r, std::uint8_t max_split_depth, std::atomic_uint64_t &uuid_generator)
 
 autonomous_particle (ellipse_type const &ell, real_type const t, pos_type const &x0, mat_type const &nabla_phi, std::uint8_t const split_depth, std::uint8_t const max_split_depth, std::uint64_t const id)
 
 autonomous_particle (ellipse_type const &ell, real_type const t, pos_type const &x0, mat_type const &nabla_phi, std::uint8_t const split_depth, std::uint8_t const max_split_depth, std::atomic_uint64_t &uuid_generator)
 
auto x0 () -> auto &
 
auto x0 () const -> auto const &
 
auto x0 (std::size_t i) const
 
auto x () -> auto &
 
auto x () const -> auto const &
 
auto x (std::size_t const i) const
 
auto t () -> auto &
 
auto t () const
 
auto nabla_phi () const -> auto const &
 
auto S0 () const
 
auto initial_ellipse () const
 
auto split_depth () const
 
auto max_split_depth () const
 
auto id () const
 
template<split_behavior SplitBehavior, typename Flowmap >
auto advect (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 
template<typename Flowmap >
auto advect_with_two_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 Advects single particle. More...
 
template<typename Flowmap >
auto advect_with_three_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 Advects single particle. More...
 
template<typename Flowmap >
auto advect_with_three_and_four_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 Advects single particle. More...
 
template<typename Flowmap >
auto advect_with_five_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 Advects single particle. More...
 
template<typename Flowmap >
auto advect_with_seven_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, std::atomic_uint64_t &uuid_generator) const
 Advects single particle. More...
 
template<split_behavior SplitBehavior = typename split_behaviors::three_splits, typename Flowmap >
auto advect_until_split (Flowmap phi, real_type stepwidth, real_type const t_end, container_type &splitted_particles, container_type &finished_particles, simple_particle_container_type &simple_particles, std::vector< hierarchy_pair > &, std::mutex &, std::atomic_uint64_t &uuid_generator) const
 
auto sampler () const
 
auto discretize (std::size_t const n, forward_tag const) const
 
auto discretize (std::size_t const n, backward_tag const) const
 
auto center () const -> auto const &
 
auto center () -> auto &
 
auto center (std::size_t const i) const
 
auto center (std::size_t const i) -> auto &
 
auto discretize (std::size_t const num_vertices=32) const
 
auto discretize (std::size_t const num_subdivisions=2) const
 
auto S () const -> auto const &
 
auto S () -> auto &
 
- Public Member Functions inherited from tatooine::geometry::hyper_ellipse< Real, NumDimensions >
constexpr hyper_ellipse ()
 defaults to unit hypersphere More...
 
constexpr hyper_ellipse (hyper_ellipse const &)=default
 
constexpr hyper_ellipse (hyper_ellipse &&) noexcept=default
 
constexpr auto operator= (hyper_ellipse const &) -> hyper_ellipse &=default
 
constexpr auto operator= (hyper_ellipse &&) noexcept -> hyper_ellipse &=default
 
 ~hyper_ellipse ()=default
 
constexpr hyper_ellipse (Real const radius)
 Sets up a sphere with specified radius. More...
 
constexpr hyper_ellipse (Real const radius, vec_type const &center)
 Sets up a sphere with specified radius and origin point. More...
 
constexpr hyper_ellipse (vec_type const &center, Real const radius)
 Sets up a sphere with specified radius and origin point. More...
 
constexpr hyper_ellipse (fixed_size_vec< NumDimensions > auto const &center, fixed_size_quadratic_mat< NumDimensions > auto const &S)
 Sets up a sphere with specified radius and origin point. More...
 
constexpr hyper_ellipse (vec_type const &center, arithmetic auto const ... radii)
 Sets up a sphere with specified radii. More...
 
constexpr hyper_ellipse (arithmetic auto const ... radii)
 Sets up a sphere with specified radii. More...
 
constexpr hyper_ellipse (fixed_size_vec< NumDimensions > auto const &...points)
 Fits an ellipse through specified points. More...
 
constexpr hyper_ellipse (fixed_size_quadratic_mat< NumDimensions > auto const &H)
 Fits an ellipse through specified points. More...
 
auto S () const -> auto const &
 
auto S () -> auto &
 
auto center () const -> auto const &
 
auto center () -> auto &
 
auto center (std::size_t const i) const
 
auto center (std::size_t const i) -> auto &
 
auto local_coordinate (pos_type const &x) const
 
auto squared_euclidean_distance_to_center (pos_type const &x) const
 
auto euclidean_distance_to_center (pos_type const &x) const
 
auto squared_local_euclidean_distance_to_center (pos_type const &x) const
 
auto local_distance_to_center (pos_type const &x) const
 
constexpr auto distance_to_boundary (pos_type const &x) const
 Computes euclidean distance to nearest boundary point. More...
 
auto local_nearest_point_boundary (pos_type const &x) const
 
auto nearest_point_boundary (pos_type const &x) const
 
constexpr auto fit (fixed_size_vec< NumDimensions > auto const &...points)
 Fits an ellipse through specified points. More...
 
constexpr auto fit (fixed_size_quadratic_mat< NumDimensions > auto const &H)
 
template<typename V , typename VReal >
constexpr auto nearest_point_on_boundary (base_tensor< V, VReal, NumDimensions > const &x) const
 
constexpr auto is_inside (pos_type const &x) const
 
auto discretize (std::size_t const num_vertices=32) const
 
auto discretize (std::size_t const num_subdivisions=2) const
 
auto main_axes () const
 
auto radii () const
 Returns a the radii of the hyper ellipse as a vector. More...
 
auto base_coordinate_system () const
 Returns a the radii of the hyper ellipse as a vector. More...
 

Static Public Member Functions

static constexpr auto num_dimensions () -> std::size_t
 
template<split_behavior SplitBehavior, typename Flowmap >
static auto advect (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
template<typename Flowmap >
static auto advect_with_two_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
template<typename Flowmap >
static auto advect_with_three_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
template<typename Flowmap >
static auto advect_with_three_and_four_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
template<typename Flowmap >
static auto advect_with_five_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
template<typename Flowmap >
static auto advect_with_seven_splits (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type const &initial_particles, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::uint8_t const max_split_depth, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid_small_filling_gaps (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid_small_filling_gaps (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::uint8_t const max_split_depth, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid_filling_gaps (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::atomic_uint64_t &uuid_generator)
 
static auto particles_from_grid_filling_gaps (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::uint8_t const max_split_depth, std::atomic_uint64_t &uuid_generator)
 
template<std::size_t... Is>
static auto particles_from_grid_filling_gaps (real_type const t0, uniform_rectilinear_grid< Real, NumDimensions > const &g, std::uint8_t const max_split_depth, std::atomic_uint64_t &uuid_generator, std::index_sequence< Is... >)
 
template<split_behavior SplitBehavior, typename Flowmap >
static auto advect (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
template<typename Flowmap >
static auto advect_with_two_splits (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
template<typename Flowmap >
static auto advect_with_three_splits (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
template<typename Flowmap >
static auto advect_with_three_and_four_splits (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
template<typename Flowmap >
static auto advect_with_five_splits (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
template<typename Flowmap >
static auto advect_with_seven_splits (Flowmap &&phi, real_type const stepwidth, real_type const t0, real_type const t_end, uniform_rectilinear_grid< Real, NumDimensions > const &g)
 
- Static Public Member Functions inherited from tatooine::geometry::hyper_ellipse< Real, NumDimensions >
static auto constexpr num_dimensions ()
 

Static Public Attributes

static constexpr auto half = 1 / Real(2)
 
static constexpr auto default_max_split_depth = 6
 

Static Private Member Functions

static auto mutex () -> auto &
 
template<split_behavior SplitBehavior, typename Flowmap >
static auto advect (Flowmap &&phi, real_type const stepwidth, real_type const t_end, container_type particles, std::vector< hierarchy_pair > &hierarchy_pairs, std::mutex &hierarchy_mutex, std::atomic_uint64_t &uuid_generator)
 
static auto num_threads ()
 
static auto distribute_particles_to_thread_containers (std::size_t const num_threads, container_type &particles, auto &particles_per_thread)
 
template<split_behavior SplitBehavior, typename Flowmap >
static auto advect_particle_pools (std::size_t const, Flowmap &&phi, real_type const stepwidth, real_type const t_end, auto &particles_per_thread, std::vector< hierarchy_pair > &hierarchy_pairs, std::mutex &hierarchy_mutex, std::atomic_uint64_t &uuid_generator)
 
static auto gather_particles (container_type &particles, container_type &finished_particles, simple_particle_container_type &simple_particles, auto &particles_per_thread)
 

Private Attributes

pos_type m_x0 = {}
 
real_type m_t = {}
 
mat_type m_nabla_phi = {}
 
std::uint8_t m_split_depth = 0
 
std::uint8_t m_max_split_depth = default_max_split_depth
 
std::uint64_t m_id = std::numeric_limits<std::uint64_t>::max()
 

Member Typedef Documentation

◆ container_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::container_type = std::vector<this_type>

◆ ellipse_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::ellipse_type = geometry::hyper_ellipse<Real, NumDimensions>

◆ hierarchy_pair

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::hierarchy_pair = detail::autonomous_particle::hierarchy_pair

◆ mat_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::mat_type = mat<real_type, NumDimensions, NumDimensions>

◆ parent_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::parent_type = ellipse_type

◆ pos_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::pos_type = vec_type

◆ real_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::real_type = Real

◆ sampler_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::sampler_type = detail::autonomous_particle::sampler<Real, NumDimensions>

◆ simple_particle_container_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::simple_particle_container_type = std::vector<simple_particle_type>

◆ simple_particle_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::simple_particle_type = particle<Real, NumDimensions>

◆ split_behaviors

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::split_behaviors = detail::autonomous_particle::split_behaviors<Real, NumDimensions>

◆ this_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::this_type = autonomous_particle<Real, NumDimensions>

◆ vec_type

template<floating_point Real, std::size_t NumDimensions>
using tatooine::autonomous_particle< Real, NumDimensions >::vec_type = vec<real_type, NumDimensions>

Constructor & Destructor Documentation

◆ autonomous_particle() [1/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( autonomous_particle< Real, NumDimensions > const &  other)
default

{

◆ autonomous_particle() [2/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( autonomous_particle< Real, NumDimensions > &&  other)
defaultnoexcept

◆ ~autonomous_particle()

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::~autonomous_particle ( )
default

◆ autonomous_particle() [3/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
std::uint64_t const  id 
)
inline

◆ autonomous_particle() [4/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
std::atomic_uint64_t &  uuid_generator 
)
inline

◆ autonomous_particle() [5/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
std::uint8_t  max_split_depth,
std::uint64_t const  id 
)
inline

◆ autonomous_particle() [6/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
std::uint8_t  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inline

◆ autonomous_particle() [7/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( pos_type const &  x,
real_type const  t,
real_type const  r,
std::uint64_t const  id 
)
inline

◆ autonomous_particle() [8/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( pos_type const &  x,
real_type const  t,
real_type const  r,
std::atomic_uint64_t &  uuid_generator 
)
inline

◆ autonomous_particle() [9/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( pos_type const &  x,
real_type const  t,
real_type const  r,
std::uint8_t  max_split_depth,
std::uint64_t const  id 
)
inline

◆ autonomous_particle() [10/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( pos_type const &  x,
real_type const  t,
real_type const  r,
std::uint8_t  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inline

◆ autonomous_particle() [11/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
pos_type const &  x0,
mat_type const &  nabla_phi,
std::uint8_t const  split_depth,
std::uint8_t const  max_split_depth,
std::uint64_t const  id 
)
inline

◆ autonomous_particle() [12/12]

template<floating_point Real, std::size_t NumDimensions>
tatooine::autonomous_particle< Real, NumDimensions >::autonomous_particle ( ellipse_type const &  ell,
real_type const  t,
pos_type const &  x0,
mat_type const &  nabla_phi,
std::uint8_t const  split_depth,
std::uint8_t const  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inline

Member Function Documentation

◆ advect() [1/4]

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior, typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

Advects all particles in particles container in the flowmap phi until time t_end is reached.

The split behavior is defined in the type SplitBehavior.

Parameters
phiFlow map of a vector field.
stepwidthStep size of advection. (This is independent of the numerical integrators's step width.)
t_endEnd of time of advetion.

◆ advect() [2/4]

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior, typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

Advects all particles in particles container in the flowmap phi until time t_end is reached.

The split behavior is defined in the type SplitBehavior.

Parameters
phiFlow map of a vector field.
stepwidthStep size of advection. (This is independent of the numerical integrators's step width.)
t_endEnd of time of advetion.
particlesParticles to be advected.

◆ advect() [3/4]

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior, typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type  particles,
std::vector< hierarchy_pair > &  hierarchy_pairs,
std::mutex &  hierarchy_mutex,
std::atomic_uint64_t &  uuid_generator 
)
inlinestaticprivate

Advects all particles in particles container in the flowmap phi until time t_end is reached.

The split behavior is defined in the type SplitBehavior.

Parameters
phiFlow map of a vector field.
stepwidthStep size of advection. (This is independent of the numerical integrators's step width.)
t_endEnd of time of advetion.
initial_particlesParticles to be advected.

◆ advect() [4/4]

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior, typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

◆ advect_particle_pools()

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior, typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_particle_pools ( std::size_t const  ,
Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
auto &  particles_per_thread,
std::vector< hierarchy_pair > &  hierarchy_pairs,
std::mutex &  hierarchy_mutex,
std::atomic_uint64_t &  uuid_generator 
)
inlinestaticprivate

◆ advect_until_split()

template<floating_point Real, std::size_t NumDimensions>
template<split_behavior SplitBehavior = typename split_behaviors::three_splits, typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_until_split ( Flowmap  phi,
real_type  stepwidth,
real_type const  t_end,
container_type splitted_particles,
container_type finished_particles,
simple_particle_container_type simple_particles,
std::vector< hierarchy_pair > &  ,
std::mutex &  ,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Old split criterion!

Advectes the particle in the flowmap phi until either a split needs to be performed or time t_end is reached.

The split behavior is defined in the type SplitBehavior.

Parameters
phiFlow map of a vector field.
stepwidthStep size of advection. (This is independent of the numerical integrators's step width.)
t_endEnd of time of advetion.
splitted_particlesSplitted particles (Their time is smaller than t_end.)
finished_particlesFinished particles (Their time is equal to / t_end.) New split criterion!

Advectes the particle in the flowmap phi until either a split needs to be performed or time t_end is reached.

The split behavior is defined in the type SplitBehavior.

Parameters
phiFlow map of a vector field.
stepwidthStep size of advection. (This is independent of the numerical integrators's step width.)
t_endEnd of time of advetion.
splitted_particlesSplitted particles (Their time is smaller than t_end.)
finished_particlesFinished particles (Their time is equal to / t_end.)

◆ advect_with_five_splits() [1/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_five_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

◆ advect_with_five_splits() [2/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_five_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ advect_with_five_splits() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_five_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Advects single particle.

◆ advect_with_seven_splits() [1/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_seven_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

◆ advect_with_seven_splits() [2/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_seven_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ advect_with_seven_splits() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_seven_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Advects single particle.

◆ advect_with_three_and_four_splits() [1/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_and_four_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

◆ advect_with_three_and_four_splits() [2/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_and_four_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ advect_with_three_and_four_splits() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_and_four_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Advects single particle.

◆ advect_with_three_splits() [1/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

◆ advect_with_three_splits() [2/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ advect_with_three_splits() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_three_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Advects single particle.

◆ advect_with_two_splits() [1/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_two_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t0,
real_type const  t_end,
uniform_rectilinear_grid< Real, NumDimensions > const &  g 
)
inlinestatic

◆ advect_with_two_splits() [2/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
static auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_two_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
container_type const &  initial_particles,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ advect_with_two_splits() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<typename Flowmap >
auto tatooine::autonomous_particle< Real, NumDimensions >::advect_with_two_splits ( Flowmap &&  phi,
real_type const  stepwidth,
real_type const  t_end,
std::atomic_uint64_t &  uuid_generator 
) const
inline

Advects single particle.

◆ center() [1/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::center ( ) -> auto &
inline

◆ center() [2/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::center ( ) const -> auto const &
inline

◆ center() [3/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::center ( std::size_t const  i) -> auto &
inline

◆ center() [4/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::center ( std::size_t const  i) const
inline

◆ discretize() [1/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::discretize ( std::size_t const  n,
backward_tag const   
) const
inline

◆ discretize() [2/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::discretize ( std::size_t const  n,
forward_tag const   
) const
inline

◆ discretize() [3/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::discretize ( std::size_t const  num_subdivisions = 2) const
inline

◆ discretize() [4/4]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::discretize ( std::size_t const  num_vertices = 32) const
inline

◆ distribute_particles_to_thread_containers()

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::distribute_particles_to_thread_containers ( std::size_t const  num_threads,
container_type particles,
auto &  particles_per_thread 
)
inlinestaticprivate

◆ gather_particles()

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::gather_particles ( container_type particles,
container_type finished_particles,
simple_particle_container_type simple_particles,
auto &  particles_per_thread 
)
inlinestaticprivate

◆ id()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::id ( ) const
inline

◆ initial_ellipse()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::initial_ellipse ( ) const
inline

◆ max_split_depth()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::max_split_depth ( ) const
inline

◆ mutex()

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::mutex ( ) -> auto &
inlinestaticprivate

◆ nabla_phi()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::nabla_phi ( ) const -> auto const &
inline

◆ num_dimensions()

template<floating_point Real, std::size_t NumDimensions>
static constexpr auto tatooine::autonomous_particle< Real, NumDimensions >::num_dimensions ( ) -> std::size_t
inlinestaticconstexpr

◆ num_threads()

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::num_threads ( )
inlinestaticprivate

◆ operator=() [1/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::operator= ( autonomous_particle< Real, NumDimensions > &&  other) -> autonomous_particle &=default
defaultnoexcept

◆ operator=() [2/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::operator= ( autonomous_particle< Real, NumDimensions > const &  other) -> autonomous_particle &=default
default

◆ particles_from_grid() [1/2]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ particles_from_grid() [2/2]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::uint8_t const  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ particles_from_grid_filling_gaps() [1/3]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid_filling_gaps ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ particles_from_grid_filling_gaps() [2/3]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid_filling_gaps ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::uint8_t const  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ particles_from_grid_filling_gaps() [3/3]

template<floating_point Real, std::size_t NumDimensions>
template<std::size_t... Is>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid_filling_gaps ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::uint8_t const  max_split_depth,
std::atomic_uint64_t &  uuid_generator,
std::index_sequence< Is... >   
)
inlinestatic

◆ particles_from_grid_small_filling_gaps() [1/2]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid_small_filling_gaps ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ particles_from_grid_small_filling_gaps() [2/2]

template<floating_point Real, std::size_t NumDimensions>
static auto tatooine::autonomous_particle< Real, NumDimensions >::particles_from_grid_small_filling_gaps ( real_type const  t0,
uniform_rectilinear_grid< Real, NumDimensions > const &  g,
std::uint8_t const  max_split_depth,
std::atomic_uint64_t &  uuid_generator 
)
inlinestatic

◆ S() [1/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::S ( ) -> auto &
inline

◆ S() [2/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::geometry::hyper_ellipse< Real, NumDimensions >::S ( ) const -> auto const &
inline

◆ S0()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::S0 ( ) const
inline

◆ sampler()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::sampler ( ) const
inline

◆ split_depth()

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::split_depth ( ) const
inline

◆ t() [1/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::t ( ) -> auto &
inline

◆ t() [2/2]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::t ( ) const
inline

◆ x() [1/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x ( ) -> auto &
inline

◆ x() [2/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x ( ) const -> auto const &
inline

◆ x() [3/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x ( std::size_t const  i) const
inline

◆ x0() [1/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x0 ( ) -> auto &
inline

◆ x0() [2/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x0 ( ) const -> auto const &
inline

◆ x0() [3/3]

template<floating_point Real, std::size_t NumDimensions>
auto tatooine::autonomous_particle< Real, NumDimensions >::x0 ( std::size_t  i) const
inline

Member Data Documentation

◆ default_max_split_depth

template<floating_point Real, std::size_t NumDimensions>
constexpr auto tatooine::autonomous_particle< Real, NumDimensions >::default_max_split_depth = 6
staticconstexpr

◆ half

template<floating_point Real, std::size_t NumDimensions>
constexpr auto tatooine::autonomous_particle< Real, NumDimensions >::half = 1 / Real(2)
staticconstexpr

◆ m_id

template<floating_point Real, std::size_t NumDimensions>
std::uint64_t tatooine::autonomous_particle< Real, NumDimensions >::m_id = std::numeric_limits<std::uint64_t>::max()
private

◆ m_max_split_depth

template<floating_point Real, std::size_t NumDimensions>
std::uint8_t tatooine::autonomous_particle< Real, NumDimensions >::m_max_split_depth = default_max_split_depth
private

◆ m_nabla_phi

template<floating_point Real, std::size_t NumDimensions>
mat_type tatooine::autonomous_particle< Real, NumDimensions >::m_nabla_phi = {}
private

◆ m_split_depth

template<floating_point Real, std::size_t NumDimensions>
std::uint8_t tatooine::autonomous_particle< Real, NumDimensions >::m_split_depth = 0
private

◆ m_t

template<floating_point Real, std::size_t NumDimensions>
real_type tatooine::autonomous_particle< Real, NumDimensions >::m_t = {}
private

◆ m_x0

template<floating_point Real, std::size_t NumDimensions>
pos_type tatooine::autonomous_particle< Real, NumDimensions >::m_x0 = {}
private

The documentation for this struct was generated from the following file: