9#include <Kokkos_Core.hpp>
11#include "ddc/coordinate.hpp"
12#include "ddc/detail/macros.hpp"
13#include "ddc/discrete_element.hpp"
14#include "ddc/discrete_space.hpp"
15#include "ddc/discrete_vector.hpp"
24 using continuous_dimension_type = CDim;
26 using continuous_element_type = Coordinate<CDim>;
38 template <
class MemorySpace>
41 template <
class OMemorySpace>
44 Kokkos::View<continuous_element_type*, MemorySpace> m_points;
52 explicit Impl(std::initializer_list<continuous_element_type> points)
54 std::vector<continuous_element_type> host_points(points.begin(), points.end());
55 Kokkos::View<continuous_element_type*, Kokkos::HostSpace>
56 host(host_points.data(), host_points.size());
57 Kokkos::resize(m_points, host.extent(0));
58 Kokkos::deep_copy(m_points, host);
62 template <
class InputRange>
63 explicit inline constexpr Impl(InputRange
const& points)
65 if constexpr (Kokkos::is_view<InputRange>::value) {
66 Kokkos::deep_copy(m_points, points);
68 std::vector<continuous_element_type> host_points(points.begin(), points.end());
69 Kokkos::View<continuous_element_type*, Kokkos::HostSpace>
70 host(host_points.data(), host_points.size());
71 Kokkos::resize(m_points, host.extent(0));
72 Kokkos::deep_copy(m_points, host);
77 template <
class InputIt>
78 inline constexpr Impl(InputIt points_begin, InputIt points_end)
80 std::vector<continuous_element_type> host_points(points_begin, points_end);
81 Kokkos::View<continuous_element_type*, Kokkos::HostSpace>
82 host(host_points.data(), host_points.size());
83 Kokkos::resize(m_points, host.extent(0));
84 Kokkos::deep_copy(m_points, host);
87 template <
class OriginMemorySpace>
88 explicit Impl(
Impl<OriginMemorySpace>
const& impl)
89 : m_points(Kokkos::create_mirror_view_and_copy(MemorySpace(), impl.m_points))
99 constexpr std::size_t
size()
const
101 return m_points.size();
106 discrete_element_type
const& icoord)
const noexcept
108 return m_points(icoord.uid());
129 is_non_uniform_sampling_v<
typename DDimImpl::discrete_dimension_type>,
131std::ostream& operator<<(std::ostream& out, DDimImpl
const& mesh)
133 return out <<
"NonUniformPointSampling(" << mesh.size() <<
")";
147 return coordinate(i) - coordinate(i - 1);
154 return coordinate(i + 1) - coordinate(i);
160 return coordinate(d.front());
166 return coordinate(d.back());
172 return rmax(d) - rmin(d);
friend class DiscreteDomain
Definition: discrete_domain.hpp:26
Definition: aligned_allocator.hpp:9
DDC_INLINE_FUNCTION Coordinate< CDim > distance_at_left(DiscreteElement< NonUniformPointSampling< CDim > > i)
Definition: non_uniform_point_sampling.hpp:144
DDC_INLINE_FUNCTION Coordinate< CDim > rmax(DiscreteDomain< NonUniformPointSampling< CDim > > const &d)
Definition: non_uniform_point_sampling.hpp:164
DDC_INLINE_FUNCTION Coordinate< CDim > rlength(DiscreteDomain< NonUniformPointSampling< CDim > > const &d)
Definition: non_uniform_point_sampling.hpp:170
DDC_INLINE_FUNCTION Coordinate< CDim > coordinate(DiscreteElement< NonUniformPointSampling< CDim > > const &c)
Definition: non_uniform_point_sampling.hpp:137
DDC_INLINE_FUNCTION Coordinate< CDim > distance_at_right(DiscreteElement< NonUniformPointSampling< CDim > > i)
Definition: non_uniform_point_sampling.hpp:151
DDC_INLINE_FUNCTION Coordinate< CDim > rmin(DiscreteDomain< NonUniformPointSampling< CDim > > const &d)
Definition: non_uniform_point_sampling.hpp:158
constexpr bool is_non_uniform_sampling_v
Definition: non_uniform_point_sampling.hpp:124