496 if (dim < 2 or dim > 3) {
497 return "testNanoflann: only dim = 2, 3 are accepted.\n";
503 size_t N_tot = Nx * Ny;
508 lattice(L, Nx, Ny, Nz, dL, seed, x, dim);
509 std::cout <<
"Total points = " << x.size() <<
"\n";
513 std::vector<std::vector<size_t>> neigh_nflann(N_tot, std::vector<size_t>());
514 std::vector<std::vector<float>> neigh_nflann_sq_dist(N_tot,
515 std::vector<float>());
517 std::vector<std::vector<size_t>> neigh_nflann_3d(N_tot, std::vector<size_t>());
518 std::vector<std::vector<float>> neigh_nflann_3d_sq_dist(N_tot,
519 std::vector<float>());
521 std::vector<std::vector<size_t>> neigh_brute(N_tot, std::vector<size_t>());
522 std::vector<std::vector<float>> neigh_brute_sq_dist(N_tot,
523 std::vector<float>());
526 double search_r = 1.5 * L;
527 auto brute_force_search_time =
531 std::unique_ptr<nsearch::NFlannSearchKd<3>> nflann_nsearch_3d
532 = std::make_unique<nsearch::NFlannSearchKd<3>>(x, 0);
534 std::unique_ptr<nsearch::NFlannSearchKd<dim>> nflann_nsearch
535 = std::make_unique<nsearch::NFlannSearchKd<dim>>(x, 0);
537 auto nflann_tree_set_time_3d = nflann_nsearch_3d->setInputCloud();
538 auto nflann_tree_search_time_3d =
541 auto nflann_tree_set_time = nflann_nsearch->setInputCloud();
542 auto nflann_tree_search_time =
547 neigh_nflann, neigh_brute, {
"nflann_tree",
"brute_force"}, -1,
true);
550 neigh_nflann_3d, neigh_brute, {
"nflann_tree-3d",
"brute_force"}, -1,
true);
552 std::ostringstream msg;
553 msg << std::format(
" Setup times (microseconds): \n"
554 " nflann_tree_set_time = {} \n "
555 " nflann_tree_set_time_3d = {}\n",
556 nflann_tree_set_time, nflann_tree_set_time_3d);
558 msg << std::format(
" Search times (microseconds): \n"
559 " brute_force_search_time = {}\n"
560 " nflann_tree_search_time = {}\n"
561 " nflann_tree_search_time_3d = {}\n",
562 brute_force_search_time,
563 nflann_tree_search_time,
564 nflann_tree_search_time_3d);
566 msg << std::format(
" Comparison results: \n"
567 " nflann_brute_compare: \n{}\n",
568 nflann_brute_compare);
570 msg << std::format(
" Comparison results: \n"
571 " nflann_brute_compare_3d: \n{}\n",
572 nflann_brute_compare_3d);
577 std::vector<std::vector<size_t>> neigh_nflann(N_tot, std::vector<size_t>());
578 std::vector<std::vector<float>> neigh_nflann_sq_dist(N_tot,
579 std::vector<float>());
581 std::vector<std::vector<size_t>> neigh_brute(N_tot, std::vector<size_t>());
582 std::vector<std::vector<float>> neigh_brute_sq_dist(N_tot,
583 std::vector<float>());
586 double search_r = 1.5 * L;
587 auto brute_force_search_time =
591 std::unique_ptr<nsearch::NFlannSearchKd<dim>> nflann_nsearch
592 = std::make_unique<nsearch::NFlannSearchKd<dim>>(x, 0);
594 auto nflann_tree_set_time = nflann_nsearch->setInputCloud();
595 auto nflann_tree_search_time =
600 neigh_nflann, neigh_brute, {
"nflann_tree",
"brute_force"}, -1,
true);
602 std::ostringstream msg;
603 msg << std::format(
" Setup times (microseconds): \n"
604 " nflann_tree_set_time = {}\n",
605 nflann_tree_set_time);
607 msg << std::format(
" Search times (microseconds): \n"
608 " brute_force_search_time = {}\n"
609 " nflann_tree_search_time = {}\n",
610 brute_force_search_time,
611 nflann_tree_search_time);
613 msg << std::format(
" Comparison results: \n"
614 " nflann_brute_compare: \n{}\n",
615 nflann_brute_compare);
628 if (dim < 2 or dim > 3) {
629 return "testNanoflannExcludeInclude: only dim = 2, 3 are accepted.\n";
635 size_t N_tot = Nx * Ny;
640 std::vector<size_t> xTags(N_tot, 0);
641 lattice(L, Nx, Ny, Nz, dL, seed, x, dim);
643 data.d_numPoints = x.size();
644 std::cout <<
"Total points = " << x.size() <<
"\n";
646 std::vector<std::vector<size_t>> neigh_default_nflann(N_tot, std::vector<size_t>());
647 std::vector<std::vector<float>> neigh_default_nflann_sq_dist(N_tot,
648 std::vector<float>());
650 std::vector<std::vector<size_t>> neigh_exclude_nflann(N_tot, std::vector<size_t>());
651 std::vector<std::vector<float>> neigh_exclude_nflann_sq_dist(N_tot,
652 std::vector<float>());
654 std::vector<std::vector<size_t>> neigh_include_nflann(N_tot, std::vector<size_t>());
655 std::vector<std::vector<float>> neigh_include_nflann_sq_dist(N_tot,
656 std::vector<float>());
659 std::vector<std::vector<size_t>> neigh_default_brute(N_tot, std::vector<size_t>());
660 std::vector<std::vector<float>> neigh_default_brute_sq_dist(N_tot,
661 std::vector<float>());
663 std::vector<std::vector<size_t>> neigh_exclude_brute(N_tot, std::vector<size_t>());
664 std::vector<std::vector<float>> neigh_exclude_brute_sq_dist(N_tot,
665 std::vector<float>());
667 std::vector<std::vector<size_t>> neigh_include_brute(N_tot, std::vector<size_t>());
668 std::vector<std::vector<float>> neigh_include_brute_sq_dist(N_tot,
669 std::vector<float>());
672 double search_r = 3. * L;
674 data.d_defaultBruteSearchTime =
678 neigh_default_brute_sq_dist);
680 data.d_excludeBruteSearchTime =
683 neigh_exclude_brute_sq_dist,
686 data.d_includeBruteSearchTime =
689 neigh_include_brute_sq_dist,
693 std::unique_ptr<nsearch::NFlannSearchKd<dim>> nflann_nsearch
694 = std::make_unique<nsearch::NFlannSearchKd<dim>>(x, 0,
697 data.d_treeBuildTime = nflann_nsearch->setInputCloud();
700 data.d_defaultNFlannSearchTime =
702 search_r, neigh_default_nflann,
703 neigh_default_nflann_sq_dist);
706 data.d_excludeNFlannSearchTime =
708 search_r, neigh_exclude_nflann,
709 neigh_exclude_nflann_sq_dist,
713 data.d_includeNFlannSearchTime =
715 search_r, neigh_include_nflann,
716 neigh_include_nflann_sq_dist,
721 neigh_default_nflann, neigh_default_brute,
722 {
"nflann_tree_default",
"brute_force_default"}, -1,
true);
725 neigh_exclude_nflann, neigh_exclude_brute,
726 {
"nflann_tree_exclude",
"brute_force_exclude"}, -1,
true);
729 neigh_include_nflann, neigh_include_brute,
730 {
"nflann_tree_include",
"brute_force_include"}, -1,
true);
732 std::ostringstream msg;
733 msg << std::format(
" Setup times (microseconds): \n"
734 " nflann_tree_set_time = {}\n",
735 data.d_treeBuildTime);
737 msg << std::format(
" Default search times (microseconds): \n"
738 " brute_force_search_time = {}\n"
739 " nflann_tree_search_time = {}\n",
740 data.d_defaultBruteSearchTime,
741 data.d_defaultNFlannSearchTime);
743 msg << std::format(
" Exclude comparison results: \n"
744 " nflann_brute_compare: \n{}\n",
745 nflann_brute_compare_default);
747 msg << std::format(
" Exclude search times (microseconds): \n"
748 " brute_force_search_time = {}\n"
749 " nflann_tree_search_time = {}\n",
750 data.d_excludeBruteSearchTime,
751 data.d_excludeNFlannSearchTime);
753 msg << std::format(
" Exclude comparison results: \n"
754 " nflann_brute_compare: \n{}\n",
755 nflann_brute_compare_exclude);
757 msg << std::format(
" Include search times (microseconds): \n"
758 " brute_force_search_time = {}\n"
759 " nflann_tree_search_time = {}\n",
760 data.d_includeBruteSearchTime,
761 data.d_includeNFlannSearchTime);
763 msg << std::format(
" Include comparison results: \n"
764 " nflann_brute_compare: \n{}\n",
765 nflann_brute_compare_include);
768 msg << std::format(
" Nflann all search times (microseconds): \n"
772 data.d_defaultNFlannSearchTime,
773 data.d_excludeNFlannSearchTime,
774 data.d_includeNFlannSearchTime);
786 size_t N_tot = Nx * Ny * Nz;
789 lattice(L, Nx, Ny, Nz, dL, seed, x, 3);
790 std::cout <<
"Total points = " << x.size() <<
"\n";
794 = std::make_unique<nsearch::NFlannSearchKd<3>>(x, 0);
796 auto nflann_tree_set_time = nflann_nsearch->setInputCloud();
798 std::vector<size_t> err_points;
799 std::vector<util::Point> search_points;
800 std::vector<double> err_dist;
802 x, nflann_nsearch, seed, L, dL, search_points, err_points, err_dist);
810 std::ostringstream msg;
811 msg << std::format(
" Setup times (microseconds): \n"
812 " nflann_tree_set_time = {}\n",
813 nflann_tree_set_time);
815 msg << std::format(
" Comparison results: \n"
816 " nflann_compare: \n{}\n",