13 #include "libmesh/nanoflann.hpp" 14 #include "libmesh/point.h" 17 #if NANOFLANN_VERSION < 0x150 22 template <
typename T,
typename U>
27 KDTree::KDTree(std::vector<Point> & master_points,
unsigned int max_leaf_size)
28 : _point_list_adaptor(master_points.begin(), master_points.end()),
30 LIBMESH_DIM, _point_list_adaptor,
nanoflann::KDTreeSingleIndexAdaptorParams(max_leaf_size)))
32 mooseAssert(
_kd_tree !=
nullptr,
"KDTree was not properly initialized.");
39 unsigned int patch_size,
40 std::vector<std::size_t> & return_index)
42 std::vector<Real> return_dist_sqr(patch_size);
43 neighborSearch(query_point, patch_size, return_index, return_dist_sqr);
48 unsigned int patch_size,
49 std::vector<std::size_t> & return_index,
50 std::vector<Real> & return_dist_sqr)
52 return_index.resize(patch_size);
54 std::size_t n_result =
55 _kd_tree->knnSearch(&query_point(0), patch_size, return_index.data(), return_dist_sqr.data());
60 return_index.resize(n_result);
61 return_dist_sqr.resize(n_result);
KDTree(std::vector< Point > &master_points, unsigned int max_leaf_size)
std::unique_ptr< KdTreeT > _kd_tree
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
void neighborSearch(const Point &query_point, unsigned int patch_size, std::vector< std::size_t > &return_index)
PointListAdaptor< Point > _point_list_adaptor
nanoflann::KDTreeSingleIndexAdaptor< nanoflann::L2_Simple_Adaptor< Real, PointListAdaptor< Point >, Real, std::size_t >, PointListAdaptor< Point >, LIBMESH_DIM, std::size_t > KdTreeT
std::size_t numberCandidatePoints()
std::pair< T, U > ResultItem
void radiusSearch(const Point &query_point, Real radius, std::vector< nanoflann::ResultItem< std::size_t, Real >> &indices_dist)
SearchParams SearchParameters
size_t kdtree_get_point_count() const
Must return the number of data points.