KDTree implementation error

20 views
Skip to first unread message

heena patel

unread,
Jul 23, 2020, 2:55:53 PM7/23/20
to deal.II User Group

Dear all,
                          I had tried to implement KDTree in step_1 tutoria and header file for kdtree is added to the codel. It is as follows:

void first_grid()
{

  Triangulation<2> triangulation;

  GridGenerator::hyper_cube(triangulation);
  triangulation.refine_global(4);
  Point<2>  p;
   KDTree<2> tree(10,triangulation.get_vertices());
   auto w = tree.get_closest_points(p, 3);

  std::ofstream out("grid-1.svg");
  GridOut       grid_out;
  grid_out.write_svg(triangulation, out);
  std::cout << "Grid written to grid-1.svg" << std::endl;
}



It gives me error as below

/home/heena/Project/examples/step-1/step-1.cc:76:4: error: ‘KDTree’ was not declared in this scope
    KDTree<2> tree(10,triangulation.get_vertices());
    ^~~~~~
/home/heena/Project/examples/step-1/step-1.cc:76:4: note: suggested alternative: ‘free’
    KDTree<2> tree(10,triangulation.get_vertices());
    ^~~~~~
    free
/home/heena/Project/examples/step-1/step-1.cc:76:14: error: ‘tree’ was not declared in this scope
    KDTree<2> tree(10,triangulation.get_vertices());
              ^~~~
/home/heena/Project/examples/step-1/step-1.cc:76:14: note: suggested alternative: ‘free’
    KDTree<2> tree(10,triangulation.get_vertices());
              ^~~~
              free



Is there something missing?



Regards,
Heena

Bruno Turcksin

unread,
Jul 23, 2020, 3:03:15 PM7/23/20
to deal.II User Group
Heena,

You are missing an include. Try adding #include <deal.II/numerics/kdtree.h>

Best,

Bruno

heena patel

unread,
Jul 23, 2020, 11:41:49 PM7/23/20
to dea...@googlegroups.com
Dear Bruno,
                               I had already added kdree.h header file, check the question again. But it seems it does not read KDTree; something is not compatible between class and header file.

Regards,
Heena

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dealii+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/d761c989-ef92-4603-8c8e-85ec4eeb3766o%40googlegroups.com.

Luca Heltai

unread,
Jul 24, 2020, 2:30:10 AM7/24/20
to dea...@googlegroups.com
If you are using version 9.3pre of deal.II, kdtree was removed. Use RTree instead, which is faster and more flexible. 

Luca

Il giorno 24 lug 2020, alle ore 05:41, heena patel <heen...@gmail.com> ha scritto:



heena patel

unread,
Jul 24, 2020, 4:06:03 AM7/24/20
to dea...@googlegroups.com
Dear Luca,
                                I am using 9.2 version and the implementation I try to follow  from your presentation at SISSA 2018 but it gives me error. Following are the lines I added to step-1. I want to implement K nearest neighbor. I will work on your suggestion.
#include <deal.II/numerics/kdtree.h>
Point<2>  p;
   KDTree<2> tree(10,triangulation.get_vertices());
   auto w = tree.get_closest_points(p, 3);

Regards,
Heena


luca.heltai

unread,
Jul 24, 2020, 6:30:22 AM7/24/20
to Deal.II Users
Dear Heena,

here is a snippet to achieve what you want:


#include <deal.II/numerics/rtree.h>
namespace bgi = boost::geometry::index;




Point<2> p0;
const auto tree = pack_rtree(tria.get_vertices());

for (const auto &p : tree | bgi::adaptors::queried(bgi::nearest(p0, 3)))
// do something with p
std::cout << p << std::endl;

or, if you need the indices of the points:

const auto tree_of_indices = pack_rtree_of_indices(tria.get_vertices());

for (const auto &i : tree_of_indices | bgi::adaptors::queried(bgi::nearest(p0, 3)))
// do something with i
std::cout << “Closest vertex has index "<< i << std::endl;


see

https://github.com/dealii/dealii/blob/master/tests/boost/rtree_03.cc

for the example above.

L.
> To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/CAG_OxbjDa--k4K%3Dxu5KN1MZ%3DLt%2BSkouY-8cXqh2UwPE2Rv3%3D6Q%40mail.gmail.com.

luca.heltai

unread,
Jul 24, 2020, 6:31:49 AM7/24/20
to Deal.II Users
KDTree needs nanoflann to be available. Did you compile deal.II with nanoflann exnabled? Check in the summary.log if DEAL_II_WITH_NANOFLANN is ON.

RTree, on the other hand, does not require nanoflann, as it is included with boost (and it is faster than nanoflann).

L.

> On 24 Jul 2020, at 10:05, heena patel <heen...@gmail.com> wrote:
>
> To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/CAG_OxbjDa--k4K%3Dxu5KN1MZ%3DLt%2BSkouY-8cXqh2UwPE2Rv3%3D6Q%40mail.gmail.com.

heena patel

unread,
Jul 24, 2020, 11:30:36 AM7/24/20
to dea...@googlegroups.com
Dear Luca,
                             Thank you very much. It now works in both ways. Thanks for advice.

Regards,
Heena

Reply all
Reply to author
Forward
0 new messages