libMesh
Public Types | Public Member Functions | Private Attributes | List of all members
libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim > Class Template Reference

This class adapts list of libMesh Point types for use in a nanoflann KD-Tree. More...

#include <meshfree_interpolation.h>

Public Types

typedef Real coord_t
 libMesh Point coordinate type More...
 

Public Member Functions

 PointListAdaptor (const std::vector< Point > &pts)
 
size_t kdtree_get_point_count () const
 Must return the number of data points. More...
 
coord_t kdtree_distance (const coord_t *p1, const size_t idx_p2, size_t size) const
 
coord_t kdtree_get_pt (const size_t idx, int dim) const
 
template<class BBOX >
bool kdtree_get_bbox (BBOX &) const
 Optional bounding-box computation. More...
 

Private Attributes

const std::vector< Point > & _pts
 

Detailed Description

template<unsigned int KDDim>
template<unsigned int PLDim>
class libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >

This class adapts list of libMesh Point types for use in a nanoflann KD-Tree.

For more on the basic idea see examples/pointcloud_adaptor_example.cpp in the nanoflann source tree.

Definition at line 192 of file meshfree_interpolation.h.

Member Typedef Documentation

◆ coord_t

template<unsigned int KDDim>
template<unsigned int PLDim>
typedef Real libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::coord_t

libMesh Point coordinate type

Definition at line 205 of file meshfree_interpolation.h.

Constructor & Destructor Documentation

◆ PointListAdaptor()

template<unsigned int KDDim>
template<unsigned int PLDim>
libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::PointListAdaptor ( const std::vector< Point > &  pts)

Definition at line 198 of file meshfree_interpolation.h.

198  :
199  _pts(pts)
200  {}

Member Function Documentation

◆ kdtree_distance()

template<unsigned int KDDim>
template<unsigned int PLDim>
coord_t libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::kdtree_distance ( const coord_t p1,
const size_t  idx_p2,
size_t  size 
) const
Returns
The distance between the vector "p1[0:size-1]" and the data point with index "idx_p2" stored in the class

Definition at line 216 of file meshfree_interpolation.h.

217  {
218  libmesh_assert_equal_to (size, PLDim);
219  libmesh_assert_less (idx_p2, _pts.size());
220 
221  const Point & p2(_pts[idx_p2]);
222 
223  switch (size)
224  {
225  case 3:
226  {
227  const coord_t d0=p1[0] - p2(0);
228  const coord_t d1=p1[1] - p2(1);
229  const coord_t d2=p1[2] - p2(2);
230 
231  return d0*d0 + d1*d1 + d2*d2;
232  }
233 
234  case 2:
235  {
236  const coord_t d0=p1[0] - p2(0);
237  const coord_t d1=p1[1] - p2(1);
238 
239  return d0*d0 + d1*d1;
240  }
241 
242  case 1:
243  {
244  const coord_t d0=p1[0] - p2(0);
245 
246  return d0*d0;
247  }
248 
249  default:
250  libmesh_error_msg("ERROR: unknown size " << size);
251  }
252 
253  return -1.;
254  }

◆ kdtree_get_bbox()

template<unsigned int KDDim>
template<unsigned int PLDim>
template<class BBOX >
bool libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::kdtree_get_bbox ( BBOX &  ) const

Optional bounding-box computation.

Returns
true if the BBOX was already computed by the class and returned in bb so we can avoid redoing it, or false to default to a standard bbox computation loop.

Look at bb.size() to find out the expected dimensionality (e.g. 2 or 3 for point clouds)

Definition at line 285 of file meshfree_interpolation.h.

285 { return false; }

◆ kdtree_get_point_count()

template<unsigned int KDDim>
template<unsigned int PLDim>
size_t libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::kdtree_get_point_count ( ) const

Must return the number of data points.

Definition at line 210 of file meshfree_interpolation.h.

210 { return _pts.size(); }

◆ kdtree_get_pt()

template<unsigned int KDDim>
template<unsigned int PLDim>
coord_t libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::kdtree_get_pt ( const size_t  idx,
int  dim 
) const
Returns
The dim'th component of the idx'th point in the class: Since this is inlined and the "dim" argument is typically an immediate value, the "if's" are actually solved at compile time.

Definition at line 261 of file meshfree_interpolation.h.

262  {
263  libmesh_assert_less (dim, (int) PLDim);
264  libmesh_assert_less (idx, _pts.size());
265  libmesh_assert_less (dim, 3);
266 
267  const Point & p(_pts[idx]);
268 
269  if (dim==0) return p(0);
270  if (dim==1) return p(1);
271  return p(2);
272  }

Member Data Documentation

◆ _pts

template<unsigned int KDDim>
template<unsigned int PLDim>
const std::vector<Point>& libMesh::InverseDistanceInterpolation< KDDim >::PointListAdaptor< PLDim >::_pts
private

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