From cf24533db0f7cef52bfc8a17128345beae807c4e Mon Sep 17 00:00:00 2001 From: Luca Heltai <luca.heltai@sissa.it> Date: Sun, 10 May 2020 00:49:10 +0200 Subject: [PATCH] Added another test, and images to the documentation. --- doc/doxygen/images/rtree-process-0.png | Bin 0 -> 7584 bytes doc/doxygen/images/rtree-process-1.png | Bin 0 -> 6033 bytes doc/doxygen/images/rtree-process-2.png | Bin 0 -> 7616 bytes include/deal.II/numerics/rtree.h | 97 +++++++++---- tests/boost/extract_reprsentative_set_02.cc | 94 ++++++++++++ ...ive_set_02.with_p4est=true.mpirun=3.output | 134 ++++++++++++++++++ 6 files changed, 301 insertions(+), 24 deletions(-) create mode 100644 doc/doxygen/images/rtree-process-0.png create mode 100644 doc/doxygen/images/rtree-process-1.png create mode 100644 doc/doxygen/images/rtree-process-2.png create mode 100644 tests/boost/extract_reprsentative_set_02.cc create mode 100644 tests/boost/extract_reprsentative_set_02.with_p4est=true.mpirun=3.output diff --git a/doc/doxygen/images/rtree-process-0.png b/doc/doxygen/images/rtree-process-0.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0506659d71c5c8145744efa4d6260ee1e7f12f GIT binary patch literal 7584 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 F{s)D9yq*96 literal 0 HcmV?d00001 diff --git a/doc/doxygen/images/rtree-process-1.png b/doc/doxygen/images/rtree-process-1.png new file mode 100644 index 0000000000000000000000000000000000000000..97264a95268c867de7fb9f938770be1dec241351 GIT binary patch literal 6033 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 IF*WYL0PZ}CvH$=8 literal 0 HcmV?d00001 diff --git a/doc/doxygen/images/rtree-process-2.png b/doc/doxygen/images/rtree-process-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fc04332fc01af3a64db970c46e6b29ed938536 GIT binary patch literal 7616 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 literal 0 HcmV?d00001 diff --git a/include/deal.II/numerics/rtree.h b/include/deal.II/numerics/rtree.h index 339c7d8343..b230debecc 100644 --- a/include/deal.II/numerics/rtree.h +++ b/include/deal.II/numerics/rtree.h @@ -264,7 +264,7 @@ struct ExtractLevelVisitor * Since an RTree object is a balanced tree, you can expect each entry of the * resulting vector to contain roughly the same number of children, and * ultimately, the same number of leaf objects. If you request for a level that - * is not present in the RTree, an empty vector is returned. + * is not present in the RTree, the last level is returned. * * A typical usage of this function is in the context of * parallel::distributed::Triangulation objects, where one would like to @@ -277,35 +277,41 @@ struct ExtractLevelVisitor * computations. If however one constructs an RTree containing these bounding * boxes (for example, by calling * GridTools::Cache::get_cell_bounding_boxes_rtree()), and then extracts one of - * the first levels of the RTree, only a handful of BoundingBoxes would be + * the first levels of the RTree, only a handful of BoundingBox objects would be * returned, allowing the user to have a very efficient description of the * geometry of the domain, and of its distribution among processes. * + * An example usage is given by the following snippet of code: + * @code + * parallel::distributed::Triangulation<2> tria(MPI_COMM_WORLD); + * GridGenerator::hyper_ball(tria); + * tria.refine_global(4); + * + * std::vector<BoundingBox<2>> all_boxes(tria.n_locally_owned_active_cells()); + * unsigned int i = 0; + * for (const auto &cell : tria.active_cell_iterators()) + * if (cell->is_locally_owned()) + * all_boxes[i++] = cell->bounding_box(); + * + * const auto tree = pack_rtree(all_boxes); + * const auto boxes = extract_rtree_level(tree, 1); + * @endcode + * + * When run on three processes, the complete set of the BoundingBox objects + * surrounding only the locally owned cells and the second level of the rtree + * constructed with those boxes would look like in the following pictures (one + * image per process): + * + * @image html rtree-process-0.png + * @image html rtree-process-1.png + * @image html rtree-process-2.png + * * @author Luca Heltai, 2020. */ template <typename Rtree> -inline std::vector< - BoundingBox<boost::geometry::dimension<typename Rtree::value_type>::value>> -extract_rtree_level(Rtree const &tree, const unsigned int level) -{ - constexpr unsigned int dim = - boost::geometry::dimension<typename Rtree::value_type>::value; - - using RtreeView = - boost::geometry::index::detail::rtree::utilities::view<Rtree>; - RtreeView rtv(tree); - - std::vector<BoundingBox<dim>> boxes; - - ExtractLevelVisitor<typename RtreeView::value_type, - typename RtreeView::options_type, - typename RtreeView::translator_type, - typename RtreeView::box_type, - typename RtreeView::allocators_type> - extract_level_visitor(rtv.translator(), level, boxes); - rtv.apply_visitor(extract_level_visitor); - return boxes; -} +inline std::vector<BoundingBox< + boost::geometry::dimension<typename Rtree::indexable_type>::value>> +extract_rtree_level(const Rtree &tree, const unsigned int level); @@ -401,6 +407,49 @@ ExtractLevelVisitor<Value, Options, Translator, Box, Allocators>:: operator()(const ExtractLevelVisitor::Leaf &) {} + + +template <typename Rtree> +inline std::vector<BoundingBox< + boost::geometry::dimension<typename Rtree::indexable_type>::value>> +extract_rtree_level(const Rtree &tree, const unsigned int level) +{ + constexpr unsigned int dim = + boost::geometry::dimension<typename Rtree::indexable_type>::value; + + using RtreeView = + boost::geometry::index::detail::rtree::utilities::view<Rtree>; + RtreeView rtv(tree); + + std::vector<BoundingBox<dim>> boxes; + + const unsigned int target_level = + std::min<unsigned int>(level, rtv.depth() - 1); + // There should always be at least one level. + Assert(target_level >= 0, ExcInternalError()); + + ExtractLevelVisitor<typename RtreeView::value_type, + typename RtreeView::options_type, + typename RtreeView::translator_type, + typename RtreeView::box_type, + typename RtreeView::allocators_type> + extract_level_visitor(rtv.translator(), target_level, boxes); + rtv.apply_visitor(extract_level_visitor); + return boxes; +} + + + +template <class Rtree> +unsigned int +n_levels(const Rtree &tree) +{ + boost::geometry::index::detail::rtree::utilities::view<Rtree> rtv(tree); + return rtv.depth(); +} + + + #endif DEAL_II_NAMESPACE_CLOSE diff --git a/tests/boost/extract_reprsentative_set_02.cc b/tests/boost/extract_reprsentative_set_02.cc new file mode 100644 index 0000000000..f49bdb408c --- /dev/null +++ b/tests/boost/extract_reprsentative_set_02.cc @@ -0,0 +1,94 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +// Extract a representative vector of BoundingBox objects from an RTree + +#include <deal.II/base/patterns.h> + +#include <deal.II/boost_adaptors/bounding_box.h> +#include <deal.II/boost_adaptors/point.h> + +#include <deal.II/distributed/tria.h> + +#include <deal.II/grid/grid_generator.h> +#include <deal.II/grid/grid_tools_cache.h> + +#include <deal.II/numerics/rtree.h> + +#include <boost/geometry/index/indexable.hpp> + +#include <algorithm> + +#include "../tests.h" + + +std::string +print(const BoundingBox<2> &box) +{ + std::stringstream str; + + const auto p = box.get_boundary_points(); + const auto p1 = p.first; + const auto p2 = p.second; + + str << p1 << std::endl + << p2[0] << " " << p1[1] << std::endl + << p2 << std::endl + << p1[0] << " " << p2[1] << std::endl + << p1 << std::endl; + return str.str(); +} + + +int +main(int argc, char **argv) +{ + auto mpi_init = Utilities::MPI::MPI_InitFinalize(argc, argv); + MPILogInitAll log; + + parallel::distributed::Triangulation<2> tria(MPI_COMM_WORLD); + + GridGenerator::hyper_ball(tria); + tria.refine_global(3); + + std::vector<BoundingBox<2>> all_boxes(tria.n_locally_owned_active_cells()); + unsigned int i = 0; + for (const auto &cell : tria.active_cell_iterators()) + if (cell->is_locally_owned()) + all_boxes[i++] = cell->bounding_box(); + + const auto tree = pack_rtree(all_boxes); + const auto boxes = extract_rtree_level(tree, 0); + deallog << "LEVEL 0: N boxes: " << boxes.size() << std::endl; + + // Uncomment the following lines to generate the images of the documentation + + // std::ofstream ofile( + // "output_" + + // std::to_string(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD)) + + // ".gpl"); + // + // std::ofstream all( + // "all_" + std::to_string(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD)) + // + + // ".gpl"); + + + for (const auto &b : boxes) + deallog << print(b) << std::endl; + + // for (const auto &b : all_boxes) + // all << print(b); +} \ No newline at end of file diff --git a/tests/boost/extract_reprsentative_set_02.with_p4est=true.mpirun=3.output b/tests/boost/extract_reprsentative_set_02.with_p4est=true.mpirun=3.output new file mode 100644 index 0000000000..ba95e51838 --- /dev/null +++ b/tests/boost/extract_reprsentative_set_02.with_p4est=true.mpirun=3.output @@ -0,0 +1,134 @@ + +DEAL:0::LEVEL 0: N boxes: 7 +DEAL:0::-0.92388 -0.92388 +-0.297335 -0.92388 +-0.297335 -0.297335 +-0.92388 -0.297335 +-0.92388 -0.92388 + +DEAL:0::-1 -0.382683 +-0.603553 -0.382683 +-0.603553 0.707107 +-1 0.707107 +-1 -0.382683 + +DEAL:0::-0.748551 -0.459948 +-0.34467 -0.459948 +-0.34467 0.283171 +-0.748551 0.283171 +-0.748551 -0.459948 + +DEAL:0::-0.382683 -1 +0.707107 -1 +0.707107 -0.603553 +-0.382683 -0.603553 +-0.382683 -1 + +DEAL:0::-0.459948 -0.748551 +0.603553 -0.748551 +0.603553 -0.475682 +-0.459948 -0.475682 +-0.459948 -0.748551 + +DEAL:0::-0.396447 -0.558058 +0.0861675 -0.558058 +0.0861675 0 +-0.396447 0 +-0.396447 -0.558058 + +DEAL:0::-4.16334e-17 -0.558058 +0.5 -0.558058 +0.5 -0.292893 +-4.16334e-17 -0.292893 +-4.16334e-17 -0.558058 + + +DEAL:1::LEVEL 0: N boxes: 7 +DEAL:1::-0.292893 -0.292893 +0 -0.292893 +0 0.0732233 +-0.292893 0.0732233 +-0.292893 -0.292893 + +DEAL:1::-0.748551 -5.55112e-17 +-0.34467 -5.55112e-17 +-0.34467 0.603553 +-0.748551 0.603553 +-0.748551 -5.55112e-17 + +DEAL:1::-0.381282 -1.38778e-17 +0 -1.38778e-17 +0 0.34467 +-0.381282 0.34467 +-0.381282 -1.38778e-17 + +DEAL:1::-0.0732233 -0.292893 +0.292893 -0.292893 +0.292893 0 +-0.0732233 0 +-0.0732233 -0.292893 + +DEAL:1::0.5 -0.707107 +1 -0.707107 +1 -5.55112e-17 +0.5 -5.55112e-17 +0.5 -0.707107 + +DEAL:1::-0.0732233 -0.0732233 +0.292893 -0.0732233 +0.292893 0.292893 +-0.0732233 0.292893 +-0.0732233 -0.0732233 + +DEAL:1::0.21967 -0.0732233 +1 -0.0732233 +1 0.382683 +0.21967 0.382683 +0.21967 -0.0732233 + + + +DEAL:2::LEVEL 0: N boxes: 7 +DEAL:2::-0.448223 0.292893 +0.297335 0.292893 +0.297335 0.503141 +-0.448223 0.503141 +-0.448223 0.292893 + +DEAL:2::-0.707107 0.433058 +-0.0991117 0.433058 +-0.0991117 0.980785 +-0.707107 0.980785 +-0.707107 0.433058 + +DEAL:2::-0.19509 0.433058 +0.316342 0.433058 +0.316342 1 +-0.19509 1 +-0.19509 0.433058 + +DEAL:2::0.292893 -0.448223 +0.475682 -0.448223 +0.475682 0.34467 +0.292893 0.34467 +0.292893 -0.448223 + +DEAL:2::0.414752 -0.5 +0.823223 -0.5 +0.823223 0.336167 +0.414752 0.336167 +0.414752 -0.5 + +DEAL:2::0.158171 0.258502 +0.55557 0.258502 +0.55557 0.980785 +0.158171 0.980785 +0.158171 0.258502 + +DEAL:2::0.417474 0.224112 +0.92388 0.224112 +0.92388 0.83147 +0.417474 0.83147 +0.417474 0.224112 + + -- 2.39.5