32# if ARBORX_VERSION_MAJOR < 2
43 template <
int dim,
typename Number>
55 const ::Point<3, float> &
56 get(
unsigned int i)
const;
59 std::vector<::Point<3, float>>
points;
77 template <
int dim,
typename Number>
102 template <
int dim,
typename Number>
133 template <
int dim,
typename Number>
146 const ::BoundingBox<3, float> &
147 get(
unsigned int i)
const;
168 template <
int dim,
typename Number>
192 template <
int dim,
typename Number>
224 template <
int dim,
typename Number>
238 const std::pair<::Point<3, float>,
float> &
239 get(
unsigned int)
const;
242 std::vector<std::pair<::Point<3, float>,
float>>
spheres;
260 template <
int dim,
typename Number>
286 template <
int dim,
typename Number>
307 template <
int dim,
typename Number>
308 ArborX::Point<dim, Number>
309 to_arborx_point(const ::Point<dim, Number> &p)
311 if constexpr (dim == 1)
316 if constexpr (dim == 2)
321 if constexpr (dim == 3)
323 return {p[0], p[1], p[2]};
331 struct IndexableGetter
333 template <
int dim,
typename Number>
334 ArborX::Point<dim, Number>
336 unsigned int> &pair)
const
338 return to_arborx_point(pair.value);
343 template <
int dim,
typename Number>
344 ArborX::Box<dim, Number>
345 operator()(
const ArborX::PairValueIndex<::BoundingBox<dim, Number>,
346 unsigned int> &pair)
const
348 const auto boundary_points = pair.value.get_boundary_points();
349 const ::Point<dim, Number> min_corner = boundary_points.first;
350 const ::Point<dim, Number> max_corner = boundary_points.second;
351 return {to_arborx_point(min_corner), to_arborx_point(max_corner)};
356 template <
int dim,
typename Number>
357 ArborX::Sphere<dim, Number>
358 operator()(
const ArborX::PairValueIndex<
359 std::pair<::Point<dim, Number>, Number>,
360 unsigned int> &pair)
const
362 return {to_arborx_point(pair.value.first), pair.value.second};
373 template <
typename Query,
typename Value,
typename Output>
375 operator()(
const Query &,
const Value &
value,
const Output &out)
const
387 struct ExtractIndexRank
391 template <
typename Predicate,
typename Value,
typename Output>
393 operator()(
const Predicate &,
394 const ArborX::PairValueIndex<Value> &
value,
395 const Output &out)
const
397 out({
value.index, rank});
409 template <
int dim,
typename Number>
418 const std::vector<::Point<dim, Number>> &
points);
429 const ::Point<dim, Number> &
430 get(
unsigned int i)
const;
435 static constexpr bool is_nearest =
false;
438 std::vector<::Point<dim, Number>>
points;
448 template <
int dim,
typename Number>
474 const ::Point<dim, Number> &
475 get(
unsigned int i)
const;
481 static constexpr bool is_nearest =
true;
484 std::vector<::Point<dim, Number>>
points;
495 template <
int dim,
typename Number>
515 const ::BoundingBox<dim, Number> &
516 get(
unsigned int i)
const;
521 static constexpr bool is_nearest =
false;
534 template <
int dim,
typename Number>
562 const ::BoundingBox<dim, Number> &
563 get(
unsigned int i)
const;
568 static constexpr bool is_nearest =
true;
582 template <
int dim,
typename Number>
591 const std::vector<std::pair<::Point<dim, Number>, Number>>
603 const std::pair<::Point<dim, Number>, Number> &
604 get(
unsigned int)
const;
609 static constexpr bool is_nearest =
false;
612 std::vector<std::pair<::Point<dim, Number>, Number>>
spheres;
622 template <
int dim,
typename Number>
632 const std::vector<std::pair<::Point<dim, Number>, Number>> &
spheres,
650 const std::pair<::Point<dim, Number>, Number> &
651 get(
unsigned int)
const;
656 static constexpr bool is_nearest =
true;
659 std::vector<std::pair<::Point<dim, Number>, Number>>
spheres;
672# if ARBORX_VERSION_MAJOR < 2
677 template <
int dim,
typename Number>
678 struct AccessTraits<
std::vector<::Point<dim, Number>>, PrimitivesTag>
701 template <
int dim,
typename Number>
702 struct AccessTraits<
std::vector<::BoundingBox<dim, Number>>,
726 template <
int dim,
typename Number>
728 std::vector<std::pair<::Point<dim, Number>, Number>>,
751 template <
typename T>
755 std::is_same_v<T, ::Point<T::dimension, float>> ||
756 std::is_same_v<T, ::Point<T::dimension, double>> ||
757 std::is_same_v<T, ::BoundingBox<T::dimension, float>> ||
758 std::is_same_v<T, ::BoundingBox<T::dimension, double>> ||
759 std::is_same_v<T, std::pair<::Point<T::dimension, float>, float>> ||
761 std::pair<::Point<T::dimension, double>, double>>>>
763 using memory_space = Kokkos::HostSpace;
769 size(
const std::vector<T> &v);
775 get(
const std::vector<T> &v, std::size_t i);
781# if ARBORX_VERSION_MAJOR < 2
795 size(const ::ArborXWrappers::PointIntersectPredicate &pt_intersect);
802 get(const ::ArborXWrappers::PointIntersectPredicate &pt_intersect,
821 size(const ::ArborXWrappers::PointNearestPredicate &pt_nearest);
829 get(const ::ArborXWrappers::PointNearestPredicate &pt_nearest,
849 size(const ::ArborXWrappers::BoundingBoxIntersectPredicate
858 const ::ArborXWrappers::BoundingBoxIntersectPredicate &bb_intersect,
878 size(const ::ArborXWrappers::BoundingBoxNearestPredicate &bb_nearest);
886 get(const ::ArborXWrappers::BoundingBoxNearestPredicate &bb_nearest,
906 size(const ::ArborXWrappers::SphereIntersectPredicate &sph_intersect);
913 get(const ::ArborXWrappers::SphereIntersectPredicate &sph_intersect,
932 size(const ::ArborXWrappers::SphereNearestPredicate &sph_nearest);
940 get(const ::ArborXWrappers::SphereNearestPredicate &sph_nearest,
947 template <
int dim,
typename Number>
951 using memory_space = Kokkos::HostSpace;
957 size(const ::ArborXWrappers::PointIntersectPredicate<dim, Number>
965 get(const ::ArborXWrappers::PointIntersectPredicate<dim, Number>
975 template <
int dim,
typename Number>
979 using memory_space = Kokkos::HostSpace;
985 size(const ::ArborXWrappers::PointNearestPredicate<dim, Number>
994 get(const ::ArborXWrappers::PointNearestPredicate<dim, Number>
1005 template <
int dim,
typename Number>
1006 struct AccessTraits<
1007 ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>>
1009 using memory_space = Kokkos::HostSpace;
1016 const ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>
1024 get(const ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>
1035 template <
int dim,
typename Number>
1036 struct AccessTraits<
1037 ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>>
1039 using memory_space = Kokkos::HostSpace;
1045 size(const ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>
1054 get(const ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>
1065 template <
int dim,
typename Number>
1066 struct AccessTraits<
1067 ::ArborXWrappers::SphereIntersectPredicate<dim, Number>>
1069 using memory_space = Kokkos::HostSpace;
1075 size(const ::ArborXWrappers::SphereIntersectPredicate<dim, Number>
1083 get(const ::ArborXWrappers::SphereIntersectPredicate<dim, Number>
1093 template <
int dim,
typename Number>
1094 struct AccessTraits<
1095 ::ArborXWrappers::SphereNearestPredicate<dim, Number>>
1097 using memory_space = Kokkos::HostSpace;
1103 size(const ::ArborXWrappers::SphereNearestPredicate<dim, Number>
1112 get(const ::ArborXWrappers::SphereNearestPredicate<dim, Number>
1124# if ARBORX_VERSION_MAJOR < 2
1126 AccessTraits<::ArborXWrappers::PointIntersectPredicate, PredicatesTag>::
1127 size(const ::ArborXWrappers::PointIntersectPredicate &pt_intersect)
1129 return pt_intersect.size();
1135 AccessTraits<::ArborXWrappers::PointIntersectPredicate, PredicatesTag>::
1136 get(const ::ArborXWrappers::PointIntersectPredicate &pt_intersect,
1139 const auto dealii_point = pt_intersect.get(i);
1140 return intersects(
Point{dealii_point[0], dealii_point[1], dealii_point[2]});
1146 AccessTraits<::ArborXWrappers::PointNearestPredicate, PredicatesTag>::
1147 size(const ::ArborXWrappers::PointNearestPredicate &pt_nearest)
1149 return pt_nearest.size();
1155 AccessTraits<::ArborXWrappers::PointNearestPredicate, PredicatesTag>::
1156 get(const ::ArborXWrappers::PointNearestPredicate &pt_nearest,
1159 const auto dealii_point = pt_nearest.get(i);
1160 return nearest(
Point{dealii_point[0], dealii_point[1], dealii_point[2]},
1161 pt_nearest.get_n_nearest_neighbors());
1170 const ::ArborXWrappers::BoundingBoxIntersectPredicate &bb_intersect)
1172 return bb_intersect.
size();
1181 const ::ArborXWrappers::BoundingBoxIntersectPredicate &bb_intersect,
1185 const ::Point<3, float> min_corner = boundary_points.first;
1186 const ::Point<3, float> max_corner = boundary_points.second;
1188 return intersects(Box{{min_corner[0], min_corner[1], min_corner[2]},
1189 {max_corner[0], max_corner[1], max_corner[2]}});
1197 size(const ::ArborXWrappers::BoundingBoxNearestPredicate &bb_nearest)
1199 return bb_nearest.
size();
1207 get(const ::ArborXWrappers::BoundingBoxNearestPredicate &bb_nearest,
1211 const ::Point<3, float> min_corner = boundary_points.first;
1212 const ::Point<3, float> max_corner = boundary_points.second;
1214 return nearest(Box{{min_corner[0], min_corner[1], min_corner[2]},
1215 {max_corner[0], max_corner[1], max_corner[2]}},
1216 bb_nearest.get_n_nearest_neighbors());
1224 size(const ::ArborXWrappers::SphereIntersectPredicate &sph_intersect)
1226 return sph_intersect.
size();
1234 get(const ::ArborXWrappers::SphereIntersectPredicate &sph_intersect,
1237 const auto sphere = sph_intersect.
get(i);
1239 Sphere{{sphere.first[0], sphere.first[1], sphere.first[2]},
1246 AccessTraits<::ArborXWrappers::SphereNearestPredicate, PredicatesTag>::
1247 size(const ::ArborXWrappers::SphereNearestPredicate &sph_nearest)
1249 return sph_nearest.size();
1255 AccessTraits<::ArborXWrappers::SphereNearestPredicate, PredicatesTag>::
1256 get(const ::ArborXWrappers::SphereNearestPredicate &sph_nearest,
1259 const auto sphere = sph_nearest.get(i);
1260 return nearest(Sphere{{sphere.first[0], sphere.first[1], sphere.first[2]},
1262 sph_nearest.get_n_nearest_neighbors());
1265 template <
int dim,
typename Number>
1267 AccessTraits<::ArborXWrappers::PointIntersectPredicate<dim, Number>>::
1268 size(const ::ArborXWrappers::PointIntersectPredicate<dim, Number>
1271 return pt_intersect.size();
1276 template <
int dim,
typename Number>
1278 AccessTraits<::ArborXWrappers::PointIntersectPredicate<dim, Number>>::
1279 get(const ::ArborXWrappers::PointIntersectPredicate<dim, Number>
1284 ::ArborXWrappers::internal::to_arborx_point(pt_intersect.get(i)));
1289 template <
int dim,
typename Number>
1291 AccessTraits<::ArborXWrappers::PointNearestPredicate<dim, Number>>::
1292 size(const ::ArborXWrappers::PointNearestPredicate<dim, Number>
1295 return pt_nearest.size();
1300 template <
int dim,
typename Number>
1302 AccessTraits<::ArborXWrappers::PointNearestPredicate<dim, Number>>::get(
1303 const ::ArborXWrappers::PointNearestPredicate<dim, Number>
1307 return nearest(::ArborXWrappers::internal::to_arborx_point(
1309 pt_nearest.get_n_nearest_neighbors());
1314 template <
int dim,
typename Number>
1317 ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>>::
1319 const ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>
1322 return bb_intersect.size();
1327 template <
int dim,
typename Number>
1330 ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>>::
1331 get(const ::ArborXWrappers::BoundingBoxIntersectPredicate<dim, Number>
1335 const auto boundary_points = bb_intersect.get(i).get_boundary_points();
1336 const ::Point<dim, Number> min_corner = boundary_points.first;
1337 const ::Point<dim, Number> max_corner = boundary_points.second;
1340 Box{::ArborXWrappers::internal::to_arborx_point(min_corner),
1341 ::ArborXWrappers::internal::to_arborx_point(max_corner)});
1346 template <
int dim,
typename Number>
1349 ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>>::
1350 size(const ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>
1353 return bb_nearest.size();
1358 template <
int dim,
typename Number>
1361 ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>>::
1362 get(const ::ArborXWrappers::BoundingBoxNearestPredicate<dim, Number>
1366 const auto boundary_points = bb_nearest.get(i).get_boundary_points();
1367 const ::Point<dim, Number> min_corner = boundary_points.first;
1368 const ::Point<dim, Number> max_corner = boundary_points.second;
1371 Box{::ArborXWrappers::internal::to_arborx_point(min_corner),
1372 ::ArborXWrappers::internal::to_arborx_point(max_corner)},
1373 bb_nearest.get_n_nearest_neighbors());
1378 template <
int dim,
typename Number>
1380 AccessTraits<::ArborXWrappers::SphereIntersectPredicate<dim, Number>>::
1381 size(const ::ArborXWrappers::SphereIntersectPredicate<dim, Number>
1384 return sph_intersect.size();
1389 template <
int dim,
typename Number>
1391 AccessTraits<::ArborXWrappers::SphereIntersectPredicate<dim, Number>>::
1392 get(const ::ArborXWrappers::SphereIntersectPredicate<dim, Number>
1396 const auto sphere = sph_intersect.get(i);
1398 Sphere{::ArborXWrappers::internal::to_arborx_point(sphere.first),
1404 template <
int dim,
typename Number>
1406 AccessTraits<::ArborXWrappers::SphereNearestPredicate<dim, Number>>::
1407 size(const ::ArborXWrappers::SphereNearestPredicate<dim, Number>
1410 return sph_nearest.size();
1415 template <
int dim,
typename Number>
1417 AccessTraits<::ArborXWrappers::SphereNearestPredicate<dim, Number>>::
1418 get(const ::ArborXWrappers::SphereNearestPredicate<dim, Number>
1422 const auto sphere = sph_nearest.get(i);
1423 return nearest(Sphere{::ArborXWrappers::internal::to_arborx_point(
1426 sph_nearest.get_n_nearest_neighbors());