25 using vec = sycl::vec<flt, 3>;
33 inline vec get_size()
const {
return max_coord - min_coord; }
35 inline flt get_max_side_length()
const {
36 const vec sz = get_size();
37 return sycl::fmax(sycl::fmax(sz.x(), sz.y()), sz.z());
43 template<
class VecType>
44 bool is_coord_in_range(VecType part_pos, VecType pos_min_patch, VecType pos_max_patch);
47 inline bool is_coord_in_range<f32_3>(f32_3 part_pos, f32_3 pos_min_patch, f32_3 pos_max_patch) {
49 (pos_min_patch.x() <= part_pos.x()) && (part_pos.x() < pos_max_patch.x())
50 && (pos_min_patch.y() <= part_pos.y()) && (part_pos.y() < pos_max_patch.y())
51 && (pos_min_patch.z() <= part_pos.z()) && (part_pos.z() < pos_max_patch.z()));
55 inline bool is_coord_in_range<f64_3>(f64_3 part_pos, f64_3 pos_min_patch, f64_3 pos_max_patch) {
57 (pos_min_patch.x() <= part_pos.x()) && (part_pos.x() < pos_max_patch.x())
58 && (pos_min_patch.y() <= part_pos.y()) && (part_pos.y() < pos_max_patch.y())
59 && (pos_min_patch.z() <= part_pos.z()) && (part_pos.z() < pos_max_patch.z()));
62 template<
class VecType>
63 bool is_coord_in_range_incl_max(VecType part_pos, VecType pos_min_patch, VecType pos_max_patch);
66 inline bool is_coord_in_range_incl_max<f32_3>(
67 f32_3 part_pos, f32_3 pos_min_patch, f32_3 pos_max_patch) {
69 (pos_min_patch.x() <= part_pos.x()) && (part_pos.x() <= pos_max_patch.x())
70 && (pos_min_patch.y() <= part_pos.y()) && (part_pos.y() <= pos_max_patch.y())
71 && (pos_min_patch.z() <= part_pos.z()) && (part_pos.z() <= pos_max_patch.z()));
75 inline bool is_coord_in_range_incl_max<f64_3>(
76 f64_3 part_pos, f64_3 pos_min_patch, f64_3 pos_max_patch) {
78 (pos_min_patch.x() <= part_pos.x()) && (part_pos.x() <= pos_max_patch.x())
79 && (pos_min_patch.y() <= part_pos.y()) && (part_pos.y() <= pos_max_patch.y())
80 && (pos_min_patch.z() <= part_pos.z()) && (part_pos.z() <= pos_max_patch.z()));
83 template<
class VecType>
84 bool iscellb_inside_a(
85 VecType pos_min_cella, VecType pos_max_cella, VecType pos_min_cellb, VecType pos_max_cellb);
88 inline bool iscellb_inside_a<u32_3>(
89 u32_3 pos_min_cella, u32_3 pos_max_cella, u32_3 pos_min_cellb, u32_3 pos_max_cellb) {
91 (pos_min_cella.x() <= pos_min_cellb.x()) && (pos_min_cellb.x() < pos_max_cellb.x())
92 && (pos_max_cellb.x() <= pos_max_cella.x()) && (pos_min_cella.y() <= pos_min_cellb.y())
93 && (pos_min_cellb.y() < pos_max_cellb.y()) && (pos_max_cellb.y() <= pos_max_cella.y())
94 && (pos_min_cella.z() <= pos_min_cellb.z()) && (pos_min_cellb.z() < pos_max_cellb.z())
95 && (pos_max_cellb.z() <= pos_max_cella.z()));
99 inline bool iscellb_inside_a<f32_3>(
100 f32_3 pos_min_cella, f32_3 pos_max_cella, f32_3 pos_min_cellb, f32_3 pos_max_cellb) {
102 (pos_min_cella.x() <= pos_min_cellb.x()) && (pos_min_cellb.x() < pos_max_cellb.x())
103 && (pos_max_cellb.x() <= pos_max_cella.x()) && (pos_min_cella.y() <= pos_min_cellb.y())
104 && (pos_min_cellb.y() < pos_max_cellb.y()) && (pos_max_cellb.y() <= pos_max_cella.y())
105 && (pos_min_cella.z() <= pos_min_cellb.z()) && (pos_min_cellb.z() < pos_max_cellb.z())
106 && (pos_max_cellb.z() <= pos_max_cella.z()));
109 template<
class VecType>
111 VecType pos_min_cella, VecType pos_max_cella, VecType pos_min_cellb, VecType pos_max_cellb);
114 inline bool cella_neigh_b<f32_3>(
115 f32_3 pos_min_cella, f32_3 pos_max_cella, f32_3 pos_min_cellb, f32_3 pos_max_cellb) {
117 (sycl::fmax(pos_min_cella.x(), pos_min_cellb.x())
118 <= sycl::fmin(pos_max_cella.x(), pos_max_cellb.x()))
119 && (sycl::fmax(pos_min_cella.y(), pos_min_cellb.y())
120 <= sycl::fmin(pos_max_cella.y(), pos_max_cellb.y()))
121 && (sycl::fmax(pos_min_cella.z(), pos_min_cellb.z())
122 <= sycl::fmin(pos_max_cella.z(), pos_max_cellb.z())));
126 inline bool cella_neigh_b<f64_3>(
127 f64_3 pos_min_cella, f64_3 pos_max_cella, f64_3 pos_min_cellb, f64_3 pos_max_cellb) {
129 (sycl::fmax(pos_min_cella.x(), pos_min_cellb.x())
130 <= sycl::fmin(pos_max_cella.x(), pos_max_cellb.x()))
131 && (sycl::fmax(pos_min_cella.y(), pos_min_cellb.y())
132 <= sycl::fmin(pos_max_cella.y(), pos_max_cellb.y()))
133 && (sycl::fmax(pos_min_cella.z(), pos_min_cellb.z())
134 <= sycl::fmin(pos_max_cella.z(), pos_max_cellb.z())));
137 template<
class VecType>
138 bool intersect_not_null_cella_b(
139 VecType pos_min_cella, VecType pos_max_cella, VecType pos_min_cellb, VecType pos_max_cellb);
142 inline bool intersect_not_null_cella_b<f64_3>(
143 f64_3 pos_min_cella, f64_3 pos_max_cella, f64_3 pos_min_cellb, f64_3 pos_max_cellb) {
145 (sycl::fmax(pos_min_cella.x(), pos_min_cellb.x())
146 < sycl::fmin(pos_max_cella.x(), pos_max_cellb.x()))
147 && (sycl::fmax(pos_min_cella.y(), pos_min_cellb.y())
148 < sycl::fmin(pos_max_cella.y(), pos_max_cellb.y()))
149 && (sycl::fmax(pos_min_cella.z(), pos_min_cellb.z())
150 < sycl::fmin(pos_max_cella.z(), pos_max_cellb.z())));
154 inline bool intersect_not_null_cella_b<f32_3>(
155 f32_3 pos_min_cella, f32_3 pos_max_cella, f32_3 pos_min_cellb, f32_3 pos_max_cellb) {
157 (sycl::fmax(pos_min_cella.x(), pos_min_cellb.x())
158 < sycl::fmin(pos_max_cella.x(), pos_max_cellb.x()))
159 && (sycl::fmax(pos_min_cella.y(), pos_min_cellb.y())
160 < sycl::fmin(pos_max_cella.y(), pos_max_cellb.y()))
161 && (sycl::fmax(pos_min_cella.z(), pos_min_cellb.z())
162 < sycl::fmin(pos_max_cella.z(), pos_max_cellb.z())));
166 inline bool intersect_not_null_cella_b<u64_3>(
167 u64_3 pos_min_cella, u64_3 pos_max_cella, u64_3 pos_min_cellb, u64_3 pos_max_cellb) {
169 (sycl::max(pos_min_cella.x(), pos_min_cellb.x())
170 < sycl::min(pos_max_cella.x(), pos_max_cellb.x()))
171 && (sycl::max(pos_min_cella.y(), pos_min_cellb.y())
172 < sycl::min(pos_max_cella.y(), pos_max_cellb.y()))
173 && (sycl::max(pos_min_cella.z(), pos_min_cellb.z())
174 < sycl::min(pos_max_cella.z(), pos_max_cellb.z())));
178 inline bool intersect_not_null_cella_b<u32_3>(
179 u32_3 pos_min_cella, u32_3 pos_max_cella, u32_3 pos_min_cellb, u32_3 pos_max_cellb) {
181 (sycl::max(pos_min_cella.x(), pos_min_cellb.x())
182 < sycl::min(pos_max_cella.x(), pos_max_cellb.x()))
183 && (sycl::max(pos_min_cella.y(), pos_min_cellb.y())
184 < sycl::min(pos_max_cella.y(), pos_max_cellb.y()))
185 && (sycl::max(pos_min_cella.z(), pos_min_cellb.z())
186 < sycl::min(pos_max_cella.z(), pos_max_cellb.z())));
189 template<
class VecType>
190 std::tuple<VecType, VecType> get_intersect_cella_b(
191 VecType pos_min_cella, VecType pos_max_cella, VecType pos_min_cellb, VecType pos_max_cellb);
194 inline std::tuple<f64_3, f64_3> get_intersect_cella_b<f64_3>(
195 f64_3 pos_min_cella, f64_3 pos_max_cella, f64_3 pos_min_cellb, f64_3 pos_max_cellb) {
196 return {sycl::fmax(pos_min_cella, pos_min_cellb), sycl::fmin(pos_max_cella, pos_max_cellb)};
200 inline std::tuple<f32_3, f32_3> get_intersect_cella_b<f32_3>(
201 f32_3 pos_min_cella, f32_3 pos_max_cella, f32_3 pos_min_cellb, f32_3 pos_max_cellb) {
203 return {sycl::fmax(pos_min_cella, pos_min_cellb), sycl::fmin(pos_max_cella, pos_max_cellb)};
206 template<
class VecType>
207 typename VecType::element_type get_sq_distance_to_BBAAsurface(
208 VecType pos, VecType pos_min_cell, VecType pos_max_cell);
211 inline f32 get_sq_distance_to_BBAAsurface<f32_3>(
212 f32_3 pos, f32_3 pos_min_cell, f32_3 pos_max_cell) {
215 clamped.x() = sycl::clamp(pos.x(), pos_min_cell.x(), pos_max_cell.x());
216 clamped.y() = sycl::clamp(pos.y(), pos_min_cell.y(), pos_max_cell.y());
217 clamped.z() = sycl::clamp(pos.z(), pos_min_cell.z(), pos_max_cell.z());
221 return sycl::dot(clamped, clamped);
225 inline f64 get_sq_distance_to_BBAAsurface<f64_3>(
226 f64_3 pos, f64_3 pos_min_cell, f64_3 pos_max_cell) {
229 clamped.x() = sycl::clamp(pos.x(), pos_min_cell.x(), pos_max_cell.x());
230 clamped.y() = sycl::clamp(pos.y(), pos_min_cell.y(), pos_max_cell.y());
231 clamped.z() = sycl::clamp(pos.z(), pos_min_cell.z(), pos_max_cell.z());
235 return sycl::dot(clamped, clamped);
double f64
Alias for double.
float f32
Alias for float.