From abb6e7b7f43f0dbaeac350c36513c15d58c612c7 Mon Sep 17 00:00:00 2001 From: Giovanni Alzetta Date: Thu, 28 Sep 2017 19:46:02 +0000 Subject: [PATCH] Added method get_neighbor_type and EnumClass NeighborType in BoundingBox class. Added function compute_mesh_predicate_bounding_box to grid tools --- doc/doxygen/images/bounding_box_predicate.png | Bin 0 -> 158259 bytes .../changes/minor/20171020GiovanniAlzetta | 3 + include/deal.II/base/bounding_box.h | 43 ++- include/deal.II/grid/grid_tools.h | 51 +++- source/base/bounding_box.cc | 86 +++++- source/grid/grid_tools.cc | 169 +++++++++++ source/grid/grid_tools.inst.in | 7 + tests/base/bounding_box_3.cc | 235 ++++++++++++++++ tests/base/bounding_box_3.output | 248 +++++++++++++++++ ...s_compute_mesh_predicate_bounding_box_1.cc | 121 ++++++++ ...ding_box_1.with_p4est=true.mpirun=2.output | 115 ++++++++ ...ding_box_1.with_p4est=true.mpirun=3.output | 263 ++++++++++++++++++ ...ding_box_1.with_p4est=true.mpirun=4.output | 231 +++++++++++++++ 13 files changed, 1568 insertions(+), 4 deletions(-) create mode 100644 doc/doxygen/images/bounding_box_predicate.png create mode 100644 doc/news/changes/minor/20171020GiovanniAlzetta create mode 100644 tests/base/bounding_box_3.cc create mode 100644 tests/base/bounding_box_3.output create mode 100644 tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.cc create mode 100644 tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=2.output create mode 100644 tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=3.output create mode 100644 tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=4.output diff --git a/doc/doxygen/images/bounding_box_predicate.png b/doc/doxygen/images/bounding_box_predicate.png new file mode 100644 index 0000000000000000000000000000000000000000..09172d924d386ec89d3d75d041f5b1e5d46b4f7d GIT binary patch literal 158259 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 +(Giovanni Alzetta, 2017/10/20) diff --git a/include/deal.II/base/bounding_box.h b/include/deal.II/base/bounding_box.h index 075e53f5a8..302e9c5fa5 100644 --- a/include/deal.II/base/bounding_box.h +++ b/include/deal.II/base/bounding_box.h @@ -23,6 +23,39 @@ DEAL_II_NAMESPACE_OPEN +/** + * The enumerator NeighborType describes the neighboring relation between + * two bounding boxes. + */ +enum class NeighborType +{ + /** + * not neighbours: the intersection is empty + */ + not_neighbors = 0, + + /** + * simple neighbors: the boxes intersect with an intersection of dimension at most spacedim - 2 + */ + simple_neighbors = 1, + + /** + * attached neighbors: neighbors with an intersection of dimension > spacedim - 2 + */ + attached_neighbors = 2, + + /** + * mergeable neighbors: neighbors which can be expressed with a single Bounding Box, e.g. + * @code + * .--V--W .-----V + * | | | = | | + * V--W--. V-----. + * @endcode + * or one is inside the other + */ + mergeable_neighbors = 3 +}; + /** * A class that represents a bounding box in a space with arbitrary dimension * spacedim. @@ -76,6 +109,14 @@ public: */ const std::pair,Point> &get_boundary_points () const; + /** + * Check if the current object and @p other_bbox are neighbors, i.e. if the boxes + * have dimension spacedim, check if their intersection is non empty. + * + * Return an enumerator of type NeighborType. + */ + NeighborType get_neighbor_type (const BoundingBox &other_bbox) const; + /** * Enlarge the current object so that it contains @p other_bbox . * If the current object already contains @p other_bbox then it is not changed @@ -84,7 +125,7 @@ public: void merge_with(const BoundingBox &other_bbox); /** - * Return true if the point is inside the Bounding Box, false otherwise + * Return true if the point is inside the Bounding Box, false otherwise. */ bool point_inside (const Point &p) const; diff --git a/include/deal.II/grid/grid_tools.h b/include/deal.II/grid/grid_tools.h index f5d842f74b..1738c80516 100644 --- a/include/deal.II/grid/grid_tools.h +++ b/include/deal.II/grid/grid_tools.h @@ -17,6 +17,7 @@ #define dealii_grid_tools_h +#include #include #include #include @@ -1199,7 +1200,6 @@ namespace GridTools compute_ghost_cell_layer_within_distance ( const MeshType &mesh, const double layer_thickness); - /** * Compute and return a bounding box, defined through a pair of points * bottom left and top right, that surrounds a subdomain of the @p mesh. @@ -1221,6 +1221,55 @@ namespace GridTools ( const MeshType &mesh, const std::function &predicate ); + /** + * Compute a collection of bounding boxes so that all active cells for which the given predicate is true, are + * completely enclosed in at least one of the bounding boxes. Notice the cover is only guaranteed to contain + * all these active cells but it's not necessarily exact i.e. it can include a bigger area than their union. + * + * For each cell at a given refinement level containing active cells for which @p predicate is true, + * the function creates a bounding box of its children for which @p predicate is true. + * + * This results in a cover of all active cells for which @p predicate is true; the parameters + * @p allow_merge and @p max_boxes are used to reduce the number of cells at a computational cost and + * covering a bigger n-dimensional volume. + * + * The parameters to control the algorithm are: + * - @p predicate : the property of the cells to enclose e.g. IteratorFilters::LocallyOwnedCell . + * The predicate is tested only on active cells. + * - @p refinement_level : it defines the level at which the initial bounding box are created. The refinement + * should be set to a coarse refinement level. A bounding box is created for each active cell at coarser + * level than @p refinement_level; if @p refinement_level is higher than the number of levels of the + * triangulation an exception is thrown. + * - @p allow_merge : This flag allows for box merging and, by default, is false. The algorithm has a cost of + * O(N^2) where N is the number of the bounding boxes created from the refinement level; for this reason, if + * the flag is set to true, make sure to choose wisely a coarse enough @p refinement_level. + * - @p max_boxes : the maximum number of bounding boxes to compute. If more are created the smaller ones are + * merged with neighbors. By default after merging the boxes which can be expressed as a single one no + * more boxes are merged. See the BoundingBox::get_neighbor_type () function for details. + * Notice only neighboring cells are merged (see the @p get_neighbor_type function in bounding box class): if + * the target number of bounding boxes max_boxes can't be reached by merging neighbors an exception is thrown + * + * The following image describes an example of the algorithm with @p refinement_level = 2, @p allow_merge = true + * and @p max_boxes = 1. The cells with the property predicate are in red, the area of a bounding box is + * slightly orange. + * @image html bounding_box_predicate.png + * - 1. In black we can see the cells of the current level. + * - 2. For each cell containing the red area a bounding box is created: by default these are returned. + * - 3. Because @p allow_merge = true the number of bounding boxes is reduced while not changing the cover. + * If @p max_boxes was left as default or bigger than 1 these two boxes would be returned. + * - 4. Because @p max_boxes = 1 the smallest bounding box is merged to the bigger one. + * Notice it is important to choose the parameters wisely. For instance, @p allow_merge = false and + * @p refinement_level = 1 returns the very same bounding box but with a fraction of the computational cost. + * + * This function does not take into account the curvature of cells and thus it is not suited for handling + * curved geometry: the mapping is assumed to be linear. + */ + template < class MeshType > + std::vector< BoundingBox< MeshType::space_dimension > > + compute_mesh_predicate_bounding_box + ( const MeshType &mesh, + const std::function &predicate, + const unsigned int &refinement_level = 0, const bool &allow_merge = false, const unsigned int &max_boxes = numbers::invalid_unsigned_int); /** * Return the adjacent cells of all the vertices. If a vertex is also a diff --git a/source/base/bounding_box.cc b/source/base/bounding_box.cc index 9390d4b8cc..42843b725e 100644 --- a/source/base/bounding_box.cc +++ b/source/base/bounding_box.cc @@ -12,7 +12,6 @@ // the top level of the deal.II distribution. // // --------------------------------------------------------------------- - #include DEAL_II_NAMESPACE_OPEN @@ -25,7 +24,10 @@ bool BoundingBox::point_inside (const Point & //Bottom left-top right convention: the point is outside if it's smaller than the //first or bigger than the second boundary point //The bounding box is defined as a closed set - if ( p[i] < this->boundary_points.first[i] || this->boundary_points.second[i] < p[i]) + if ( std::numeric_limits::epsilon()*(std::abs( this->boundary_points.first[i] + p[i]) ) + < this->boundary_points.first[i] - p[i] + || std::numeric_limits::epsilon()*(std::abs( this->boundary_points.second[i] + p[i]) ) < + p[i] - this->boundary_points.second[i] ) return false; } return true; @@ -41,6 +43,86 @@ void BoundingBox::merge_with(const BoundingBox } } +template +NeighborType BoundingBox < spacedim,Number >::get_neighbor_type (const BoundingBox &other_bbox) const +{ + if (spacedim == 1) + { + // In dimension 1 if the two bounding box are neighbors + // we can merge them + if ( this->point_inside(other_bbox.boundary_points.first) + || this->point_inside(other_bbox.boundary_points.second) ) + return NeighborType::mergeable_neighbors; + return NeighborType::not_neighbors; + } + else + { + std::vector< Point > bbox1; + bbox1.push_back(this->get_boundary_points().first); + bbox1.push_back(this->get_boundary_points().second); + std::vector< Point > bbox2; + bbox2.push_back(other_bbox.get_boundary_points().first); + bbox2.push_back(other_bbox.get_boundary_points().second); + + // Step 1: testing if the boxes are close enough to intersect + for ( unsigned int d=0 ; d::epsilon() ) > bbox2[1][d] + || bbox2[0][d] * (1 - std::numeric_limits::epsilon() ) > bbox1[1][d] ) + return NeighborType::not_neighbors; + + // The boxes intersect: we need to understand now how they intersect. + // We begin by computing the intersection: + std::vector intersect_bbox_min; + std::vector intersect_bbox_max; + for (unsigned int d=0; d < spacedim ; ++d) + { + intersect_bbox_min.push_back(std::max(bbox1[0][d],bbox2[0][d])); + intersect_bbox_max.push_back(std::min(bbox1[1][d],bbox2[1][d])); + } + + // Finding the intersection's dimension + + unsigned int intersect_dim = spacedim; + for (unsigned int d=0; d < spacedim; ++d) + if ( std::abs( intersect_bbox_min[d] - intersect_bbox_max[d] ) <= + std::numeric_limits::epsilon() * (std::abs( intersect_bbox_min[d]) + std::abs(intersect_bbox_max[d] )) ) + --intersect_dim; + + if ( intersect_dim == 0 || intersect_dim == spacedim - 2 ) + return NeighborType::simple_neighbors; + + // Checking the two mergeable cases: first if the boxes are aligned so that they can be merged + unsigned int not_align_1 = 0, not_align_2 = 0; + bool same_direction = true; + for (unsigned int d = 0; d < spacedim; ++d) + { + if (std::abs(bbox2[0][d] - bbox1[0][d]) > + std::numeric_limits::epsilon() * (std::abs( bbox2[0][d]) + std::abs(bbox1[0][d] )) ) + ++not_align_1; + if (std::abs(bbox1[1][d] - bbox2[1][d]) > + std::numeric_limits::epsilon() * (std::abs( bbox1[1][d]) + std::abs( bbox2[1][d] )) ) + ++not_align_2; + if (not_align_1 != not_align_2) + { + same_direction = false; + break; + } + } + + if ( not_align_1 <= 1 && not_align_2 <= 1 && same_direction) + return NeighborType::mergeable_neighbors; + + // Second: one box is contained/equal to the other + if ( (this->point_inside(bbox2[0]) && this->point_inside(bbox2[1]) ) + || (other_bbox.point_inside(bbox1[0]) && other_bbox.point_inside(bbox1[1]) ) ) + return NeighborType::mergeable_neighbors; + + // Degenerate and mergeable cases have been found, it remains: + return NeighborType::attached_neighbors; + } + +} + template const std::pair,Point> &BoundingBox::get_boundary_points () const { diff --git a/source/grid/grid_tools.cc b/source/grid/grid_tools.cc index 6dd0b32123..b80ab57142 100644 --- a/source/grid/grid_tools.cc +++ b/source/grid/grid_tools.cc @@ -55,6 +55,7 @@ #include #include #include +#include DEAL_II_NAMESPACE_OPEN @@ -2167,6 +2168,174 @@ next_cell: + namespace internal + { + namespace BoundingBoxPredicate + { + template < class MeshType > + std::tuple< BoundingBox < MeshType::space_dimension >, bool > + compute_cell_predicate_bounding_box + (const typename MeshType::cell_iterator &parent_cell, + const std::function &predicate) + { + bool has_predicate = false; // Start assuming there's no cells with predicate inside + std::vector< typename MeshType::active_cell_iterator > active_cells; + if (parent_cell->active()) + active_cells = {parent_cell}; + else + //Finding all active cells descendants of the current one (or the current one if it is active) + active_cells = get_active_child_cells < MeshType > (parent_cell); + + const unsigned int spacedim = MeshType::space_dimension; + + // Looking for the first active cell which has the property predicate + unsigned int i = 0; + while ( i < active_cells.size() && !predicate(active_cells[i]) ) + ++i; + + // No active cells or no active cells with property + if ( active_cells.size() == 0 || i == active_cells.size() ) + { + BoundingBox bbox; + return std::make_tuple(bbox, has_predicate); + } + + // The two boundary points defining the boundary box + Point maxp = active_cells[i]->vertex(0); + Point minp = active_cells[i]->vertex(0); + + for (; i < active_cells.size() ; ++i) + if ( predicate(active_cells[i]) ) + for (unsigned int v=0; v::vertices_per_cell; ++v) + for ( unsigned int d=0; dvertex(v)[d]); + maxp[d] = std::max( maxp[d], active_cells[i]->vertex(v)[d]); + } + + has_predicate = true; + BoundingBox < spacedim > bbox(std::make_pair(minp,maxp)); + return std::make_tuple(bbox, has_predicate); + } + } + } + + + + template < class MeshType > + std::vector< BoundingBox > + compute_mesh_predicate_bounding_box + (const MeshType &mesh, + const std::function &predicate, + const unsigned int &refinement_level, const bool &allow_merge, const unsigned int &max_boxes) + { + // Algorithm brief description: begin with creating bounding boxes of all cells at + // refinement_level (and coarser levels if there are active cells) which have the predicate + // property. These are then merged + + Assert( refinement_level <= mesh.n_levels(), + ExcMessage ( "Error: refinement level is higher then total levels in the triangulation!") ); + + const unsigned int spacedim = MeshType::space_dimension; + std::vector< BoundingBox < spacedim > > bounding_boxes; + + // Creating a bounding box for all active cell on coarser level + + for (unsigned int i=0; i < refinement_level; ++i) + for (typename MeshType::cell_iterator cell: mesh.active_cell_iterators_on_level(i)) + { + bool has_predicate = false; + BoundingBox < spacedim > bbox; + std::tie(bbox, has_predicate) = + internal::BoundingBoxPredicate::compute_cell_predicate_bounding_box (cell, predicate); + if (has_predicate) + bounding_boxes.push_back(bbox); + } + + // Creating a Bounding Box for all cells on the chosen refinement_level + for (typename MeshType::cell_iterator cell: mesh.cell_iterators_on_level(refinement_level)) + { + bool has_predicate = false; + BoundingBox < spacedim > bbox; + std::tie(bbox, has_predicate) = + internal::BoundingBoxPredicate::compute_cell_predicate_bounding_box (cell, predicate); + if (has_predicate) + bounding_boxes.push_back(bbox); + } + + if ( !allow_merge) + // If merging is not requested return the created bounding_boxes + return bounding_boxes; + else + { + // Merging part of the algorithm + // Part 1: merging neighbors + // This array stores the indices of arrays we have already merged + std::vector merged_boxes_idx; + bool found_neighbors = true; + + // We merge only nighbors which can be expressed by a single bounding box + // e.g. in 1d [0,1] and [1,2] can be described with [0,2] without losing anything + while (found_neighbors) + { + found_neighbors = false; + for (unsigned int i=0; i > merged_b_boxes; + for (unsigned int i=0; i max_boxes) && (spacedim > 1) ) + { + std::vector volumes; + for (unsigned int i=0; i< merged_b_boxes.size(); ++i) + volumes.push_back(merged_b_boxes[i].volume()); + + while ( merged_b_boxes.size() > max_boxes) + { + unsigned int min_idx = std::min_element(volumes.begin(),volumes.end()) - + volumes.begin(); + volumes.erase(volumes.begin() + min_idx); + //Finding a neighbor + bool not_removed = true; + for (unsigned int i=0; i std::vector::active_cell_iterator> > vertex_to_cell_map(const Triangulation &triangulation) diff --git a/source/grid/grid_tools.inst.in b/source/grid/grid_tools.inst.in index c4de24d473..9d1246976c 100644 --- a/source/grid/grid_tools.inst.in +++ b/source/grid/grid_tools.inst.in @@ -27,6 +27,12 @@ for (X : TRIANGULATIONS; deal_II_dimension : DIMENSIONS ; deal_II_space_dimensio const std::vector > > &, const dealii::internal::ActiveCellIterator::type &, const std::vector &); + + template + std::vector < BoundingBox< deal_II_space_dimension > > + compute_mesh_predicate_bounding_box< X > + (const X &, const std::function::type&)> &, + const unsigned int &, const bool&, const unsigned int &); \} #endif @@ -100,6 +106,7 @@ for (X : TRIANGULATION_AND_DOFHANDLERS; deal_II_dimension : DIMENSIONS ; deal_II compute_bounding_box (const X &, const std::function::type&)> &); + template std::list > get_finest_common_cells (const X &mesh_1, diff --git a/tests/base/bounding_box_3.cc b/tests/base/bounding_box_3.cc new file mode 100644 index 0000000000..9baa6172f0 --- /dev/null +++ b/tests/base/bounding_box_3.cc @@ -0,0 +1,235 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2017 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 at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + + +// test for BoundingBox which tests the function +// get_neighbor_type + +#include "../tests.h" + +#include +#include + +template +void test_bounding_box() +{ + + std::pair,Point> unit; + for (int i=0; i a(unit); + + deallog << "Bounding box boundaries A: " << std::endl; + deallog << a.get_boundary_points().first << std::endl; + deallog << a.get_boundary_points().second << std::endl; + deallog << "Is neighbor of itself: " << (int) a.get_neighbor_type (a) << std::endl; + + // This is a simple neighbor + std::pair,Point> second; + for (int i=0; i b(second); + + deallog << "Bounding box boundaries B: " << std::endl; + deallog << b.get_boundary_points().first << std::endl; + deallog << b.get_boundary_points().second << std::endl; + + deallog << "Is neighbor A with B: " << (int) a.get_neighbor_type (b) << std::endl; + deallog << "Is neighbor B with A: " << (int) b.get_neighbor_type (a) << std::endl; + deallog << "Is neighbor B with B: " << (int) b.get_neighbor_type (b) << std::endl; + + // Testing the two 3d only cases + if (spacedim == 3) + { + std::pair,Point> second_1; + second_1.first[0] = 0.0; + second_1.second[0] = 1.0; + for (int i=1; i b_1(second_1); + + deallog << "Bounding box boundaries B1: " << std::endl; + deallog << b_1.get_boundary_points().first << std::endl; + deallog << b_1.get_boundary_points().second << std::endl; + + deallog << "Is neighbor A with B1: " << (int) a.get_neighbor_type (b_1) << std::endl; + deallog << "Is neighbor B1 with A: " << (int) b_1.get_neighbor_type (a) << std::endl; + deallog << "Is neighbor B1 with B: " << (int) b_1.get_neighbor_type (b_1) << std::endl; + + //Case of partial edge which is still simple neighbor + //Note: in dimension 1 everything is only either not neighbor or mergeable + //neighbor + second_1.first[0] = 0.2; + + BoundingBox b_2(second_1); + + deallog << "Bounding box boundaries B2: " << std::endl; + deallog << b_2.get_boundary_points().first << std::endl; + deallog << b_2.get_boundary_points().second << std::endl; + + deallog << "Is neighbor A with B2: " << (int) a.get_neighbor_type (b_2) << std::endl; + deallog << "Is neighbor B2 with A: " << (int) b_2.get_neighbor_type (a) << std::endl; + deallog << "Is neighbor B2 with B: " << (int) b_2.get_neighbor_type (b_2) << std::endl; + + //Case which is attached_neighbor + + second_1.first[0] = 0.0; + second_1.first[2] = 0.8; + + BoundingBox b_3(second_1); + + deallog << "Bounding box boundaries B3: " << std::endl; + deallog << b_3.get_boundary_points().first << std::endl; + deallog << b_3.get_boundary_points().second << std::endl; + + deallog << "Is neighbor A with B3: " << (int) a.get_neighbor_type (b_3) << std::endl; + deallog << "Is neighbor B3 with A: " << (int) b_3.get_neighbor_type (a) << std::endl; + deallog << "Is neighbor B3 with B: " << (int) b_3.get_neighbor_type (b_3) << std::endl; + } + + // C contains both A and B + BoundingBox c(std::make_pair(unit.first,second.second)); + deallog << "Bounding box boundaries C: " << std::endl; + deallog << c.get_boundary_points().first << std::endl; + deallog << c.get_boundary_points().second << std::endl; + + deallog << "Is neighbor C with B: " << (int) c.get_neighbor_type (b) << std::endl; + deallog << "Is neighbor B with C: " << (int) b.get_neighbor_type (c) << std::endl; + deallog << "Is neighbor A with C: " << (int) a.get_neighbor_type (c) << std::endl; + deallog << "Is neighbor C with A: " << (int) c.get_neighbor_type (a) << std::endl; + deallog << "Is neighbor C with C: " << (int) c.get_neighbor_type (c) << std::endl; + + // D contains A, intersects with B + unit.second *= 1.4; + BoundingBox d(unit); + + deallog << "Bounding box boundaries D: " << std::endl; + deallog << d.get_boundary_points().first << std::endl; + deallog << d.get_boundary_points().second << std::endl; + + deallog << "Is neighbor D with A: " << (int) d.get_neighbor_type (a) << std::endl; + deallog << "Vice-versa: " << (int) a.get_neighbor_type (d) << std::endl; + deallog << "Is neighbor D with B: " << (int) d.get_neighbor_type (b) << std::endl; + deallog << "Vice-versa: " << (int) b.get_neighbor_type (d) << std::endl; + deallog << "Is neighbor D with C: " << (int) d.get_neighbor_type (c) << std::endl; + deallog << "Vice-versa: " << (int) c.get_neighbor_type (d) << std::endl; + deallog << "Is neighbor D with D: " << (int) d.get_neighbor_type (d) << std::endl; + + for (int i=0; i e(second); + + deallog << "Bounding box boundaries E: " << std::endl; + deallog << e.get_boundary_points().first << std::endl; + deallog << e.get_boundary_points().second << std::endl; + + deallog << "Is neighbor E with A: " << (int) e.get_neighbor_type (a) << std::endl; + deallog << "Vice-versa: " << (int) a.get_neighbor_type (e) << std::endl; + deallog << "Is neighbor E with B: " << (int) e.get_neighbor_type (b) << std::endl; + deallog << "Vice-versa: " << (int) b.get_neighbor_type (e) << std::endl; + deallog << "Is neighbor E with C: " << (int) e.get_neighbor_type (c) << std::endl; + deallog << "Vice-versa: " << (int) c.get_neighbor_type (e) << std::endl; + deallog << "Is neighbor E with D: " << (int) e.get_neighbor_type (d) << std::endl; + deallog << "Vice-versa: " << (int) d.get_neighbor_type (e) << std::endl; + deallog << "Is neighbor E with E: " << (int) e.get_neighbor_type (e) << std::endl; + + // A and F are mergeable because one next to the other + for (int i=0; i f(second); + + deallog << "Bounding box boundaries F: " << std::endl; + deallog << f.get_boundary_points().first << std::endl; + deallog << f.get_boundary_points().second << std::endl; + + deallog << "Is neighbor F with A: " << (int) f.get_neighbor_type (a) << std::endl; + deallog << "Vice-versa: " << (int) a.get_neighbor_type (f) << std::endl; + deallog << "Is neighbor F with B: " << (int) f.get_neighbor_type (b) << std::endl; + deallog << "Vice-versa: " << (int) b.get_neighbor_type (f) << std::endl; + deallog << "Is neighbor F with C: " << (int) f.get_neighbor_type (c) << std::endl; + deallog << "Vice-versa: " << (int) c.get_neighbor_type (f) << std::endl; + deallog << "Is neighbor F with D: " << (int) f.get_neighbor_type (d) << std::endl; + deallog << "Vice-versa: " << (int) d.get_neighbor_type (f) << std::endl; + deallog << "Is neighbor F with E: " << (int) f.get_neighbor_type (e) << std::endl; + deallog << "Vice-versa: " << (int) e.get_neighbor_type (f) << std::endl; + deallog << "Is neighbor F with F: " << (int) f.get_neighbor_type (f) << std::endl; + + deallog << "End test for dimension " << spacedim << std::endl; + deallog << std::endl; + + // G is mergeable with A and F and C.. + second.first[0] -= 0.2; + second.second[0] -= 0.2; + + BoundingBox g(second); + + deallog << "Bounding box boundaries G: " << std::endl; + deallog << g.get_boundary_points().first << std::endl; + deallog << g.get_boundary_points().second << std::endl; + + deallog << "Is neighbor G with A: " << (int) g.get_neighbor_type (a) << std::endl; + deallog << "Vice-versa: " << (int) a.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with B: " << (int) g.get_neighbor_type (b) << std::endl; + deallog << "Vice-versa: " << (int) b.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with C: " << (int) g.get_neighbor_type (c) << std::endl; + deallog << "Vice-versa: " << (int) c.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with D: " << (int) g.get_neighbor_type (d) << std::endl; + deallog << "Vice-versa: " << (int) d.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with E: " << (int) g.get_neighbor_type (e) << std::endl; + deallog << "Vice-versa: " << (int) e.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with F: " << (int) g.get_neighbor_type (f) << std::endl; + deallog << "Vice-versa: " << (int) f.get_neighbor_type (g) << std::endl; + deallog << "Is neighbor G with G: " << (int) g.get_neighbor_type (g) << std::endl; + + deallog << "End test for dimension " << spacedim << std::endl; + deallog << std::endl; +} + +int main() +{ + initlog(); + + deallog << "Test: Bounding Box class Is neighbor and volume functions" << std::endl; + deallog << std::endl << "Test for dimension 1" << std::endl; + test_bounding_box<1>(); + + deallog << std::endl << "Test for dimension 2" << std::endl; + test_bounding_box<2>(); + + deallog << std::endl << "Test for dimension 3" << std::endl; + test_bounding_box<3>(); +} diff --git a/tests/base/bounding_box_3.output b/tests/base/bounding_box_3.output new file mode 100644 index 0000000000..d12f6c43b7 --- /dev/null +++ b/tests/base/bounding_box_3.output @@ -0,0 +1,248 @@ + +DEAL::Test: Bounding Box class Is neighbor and volume functions +DEAL:: +DEAL::Test for dimension 1 +DEAL::Bounding box boundaries A: +DEAL::0.00000 +DEAL::1.00000 +DEAL::Is neighbor of itself: 3 +DEAL::Bounding box boundaries B: +DEAL::1.00000 +DEAL::2.00000 +DEAL::Is neighbor A with B: 3 +DEAL::Is neighbor B with A: 3 +DEAL::Is neighbor B with B: 3 +DEAL::Bounding box boundaries C: +DEAL::0.00000 +DEAL::2.00000 +DEAL::Is neighbor C with B: 3 +DEAL::Is neighbor B with C: 3 +DEAL::Is neighbor A with C: 3 +DEAL::Is neighbor C with A: 3 +DEAL::Is neighbor C with C: 3 +DEAL::Bounding box boundaries D: +DEAL::0.00000 +DEAL::1.40000 +DEAL::Is neighbor D with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with B: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with D: 3 +DEAL::Bounding box boundaries E: +DEAL::-10.0000 +DEAL::-8.00000 +DEAL::Is neighbor E with A: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with B: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with C: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with D: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with E: 3 +DEAL::Bounding box boundaries F: +DEAL::1.00000 +DEAL::2.00000 +DEAL::Is neighbor F with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with B: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with D: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor F with F: 3 +DEAL::End test for dimension 1 +DEAL:: +DEAL::Bounding box boundaries G: +DEAL::0.800000 +DEAL::1.80000 +DEAL::Is neighbor G with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with B: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with C: 0 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with D: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor G with F: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with G: 3 +DEAL::End test for dimension 1 +DEAL:: +DEAL:: +DEAL::Test for dimension 2 +DEAL::Bounding box boundaries A: +DEAL::0.00000 0.00000 +DEAL::1.00000 1.00000 +DEAL::Is neighbor of itself: 3 +DEAL::Bounding box boundaries B: +DEAL::1.00000 1.00000 +DEAL::2.00000 2.00000 +DEAL::Is neighbor A with B: 1 +DEAL::Is neighbor B with A: 1 +DEAL::Is neighbor B with B: 3 +DEAL::Bounding box boundaries C: +DEAL::0.00000 0.00000 +DEAL::2.00000 2.00000 +DEAL::Is neighbor C with B: 3 +DEAL::Is neighbor B with C: 3 +DEAL::Is neighbor A with C: 3 +DEAL::Is neighbor C with A: 3 +DEAL::Is neighbor C with C: 3 +DEAL::Bounding box boundaries D: +DEAL::0.00000 0.00000 +DEAL::1.40000 1.40000 +DEAL::Is neighbor D with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with B: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor D with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with D: 3 +DEAL::Bounding box boundaries E: +DEAL::-10.0000 -10.0000 +DEAL::-8.00000 -8.00000 +DEAL::Is neighbor E with A: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with B: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with C: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with D: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with E: 3 +DEAL::Bounding box boundaries F: +DEAL::1.00000 0.00000 +DEAL::2.00000 1.00000 +DEAL::Is neighbor F with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with B: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with D: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor F with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor F with F: 3 +DEAL::End test for dimension 2 +DEAL:: +DEAL::Bounding box boundaries G: +DEAL::0.800000 0.00000 +DEAL::1.80000 1.00000 +DEAL::Is neighbor G with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with B: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor G with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with D: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor G with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor G with F: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with G: 3 +DEAL::End test for dimension 2 +DEAL:: +DEAL:: +DEAL::Test for dimension 3 +DEAL::Bounding box boundaries A: +DEAL::0.00000 0.00000 0.00000 +DEAL::1.00000 1.00000 1.00000 +DEAL::Is neighbor of itself: 3 +DEAL::Bounding box boundaries B: +DEAL::1.00000 1.00000 1.00000 +DEAL::2.00000 2.00000 2.00000 +DEAL::Is neighbor A with B: 1 +DEAL::Is neighbor B with A: 1 +DEAL::Is neighbor B with B: 3 +DEAL::Bounding box boundaries B1: +DEAL::0.00000 1.00000 1.00000 +DEAL::1.00000 2.00000 2.00000 +DEAL::Is neighbor A with B1: 1 +DEAL::Is neighbor B1 with A: 1 +DEAL::Is neighbor B1 with B: 3 +DEAL::Bounding box boundaries B2: +DEAL::0.200000 1.00000 1.00000 +DEAL::1.00000 2.00000 2.00000 +DEAL::Is neighbor A with B2: 1 +DEAL::Is neighbor B2 with A: 1 +DEAL::Is neighbor B2 with B: 3 +DEAL::Bounding box boundaries B3: +DEAL::0.00000 1.00000 0.800000 +DEAL::1.00000 2.00000 2.00000 +DEAL::Is neighbor A with B3: 2 +DEAL::Is neighbor B3 with A: 2 +DEAL::Is neighbor B3 with B: 3 +DEAL::Bounding box boundaries C: +DEAL::0.00000 0.00000 0.00000 +DEAL::2.00000 2.00000 2.00000 +DEAL::Is neighbor C with B: 3 +DEAL::Is neighbor B with C: 3 +DEAL::Is neighbor A with C: 3 +DEAL::Is neighbor C with A: 3 +DEAL::Is neighbor C with C: 3 +DEAL::Bounding box boundaries D: +DEAL::0.00000 0.00000 0.00000 +DEAL::1.40000 1.40000 1.40000 +DEAL::Is neighbor D with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with B: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor D with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor D with D: 3 +DEAL::Bounding box boundaries E: +DEAL::-10.0000 -10.0000 -10.0000 +DEAL::-8.00000 -8.00000 -8.00000 +DEAL::Is neighbor E with A: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with B: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with C: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with D: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor E with E: 3 +DEAL::Bounding box boundaries F: +DEAL::1.00000 0.00000 0.00000 +DEAL::2.00000 1.00000 1.00000 +DEAL::Is neighbor F with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with B: 1 +DEAL::Vice-versa: 1 +DEAL::Is neighbor F with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor F with D: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor F with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor F with F: 3 +DEAL::End test for dimension 3 +DEAL:: +DEAL::Bounding box boundaries G: +DEAL::0.800000 0.00000 0.00000 +DEAL::1.80000 1.00000 1.00000 +DEAL::Is neighbor G with A: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with B: 1 +DEAL::Vice-versa: 1 +DEAL::Is neighbor G with C: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with D: 2 +DEAL::Vice-versa: 2 +DEAL::Is neighbor G with E: 0 +DEAL::Vice-versa: 0 +DEAL::Is neighbor G with F: 3 +DEAL::Vice-versa: 3 +DEAL::Is neighbor G with G: 3 +DEAL::End test for dimension 3 +DEAL:: diff --git a/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.cc b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.cc new file mode 100644 index 0000000000..6b11375a0a --- /dev/null +++ b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.cc @@ -0,0 +1,121 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2017 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 at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + + +// test for the function compute_mesh_predicate_bounding_box : as a predicate +// is_locally_owned is used and, to vary the shapes, various mpi configurations +// are used on a distributed::parallel::triangulations + + +#include "../tests.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// predicate: test if the cell is locally owned +template +bool +pred_locally_owned(const typename parallel::distributed::Triangulation::cell_iterator &cell) +{ + return cell->is_locally_owned(); +} + +template +void test_hypercube(unsigned int ref, unsigned int max_bbox) +{ + const MPI_Comm &mpi_communicator = MPI_COMM_WORLD; + deallog << "Testing hypercube for spacedim = " << spacedim + << " refinement: " << ref << " max number of boxes: " << max_bbox << std::endl; + + parallel::distributed::Triangulation tria(mpi_communicator); + GridGenerator::hyper_cube (tria); + tria.refine_global(4); + + typedef typename parallel::distributed::Triangulation::active_cell_iterator cell_iterator; + + std::function predicate = pred_locally_owned; + + std::vector< BoundingBox > local_bbox = + GridTools::compute_mesh_predicate_bounding_box < parallel::distributed::Triangulation > + ( tria, predicate, ref, true, max_bbox); + + if ( local_bbox.size() > 0) + { + deallog << "Computed Bounding Boxes:" << std::endl; + for (BoundingBox b_box: local_bbox) + { + deallog << b_box.get_boundary_points().first << std::endl; + deallog << b_box.get_boundary_points().second << std::endl; + deallog << std::endl; + } + } + else + deallog << "Has no locally owned children cells" << std::endl; + + //Checking if all the points are inside the bounding boxes + bool check = true; + + typename parallel::distributed::Triangulation< dim, spacedim >::active_cell_iterator + cell = tria.begin_active(); + typename parallel::distributed::Triangulation< dim, spacedim >::active_cell_iterator + endc = tria.last_active(); + + //Looking if every point is at least inside a bounding box + for (; cellis_locally_owned()) + for (unsigned int v=0; v::vertices_per_cell; ++v) + { + bool inside_a_box = false; + for (unsigned int i=0; i< local_bbox.size(); ++i) + { + if (local_bbox[i].point_inside(cell->vertex(v))) + inside_a_box = true; + } + if (! inside_a_box) + { + check = false; + deallog << "Point outside " << cell->vertex(v) << std::endl; + break; + } + } + deallog << "Bounding Boxes surround locally_owned cells: " << check << std::endl; + + deallog << "Current test END" << std::endl; +} + +int main (int argc, char *argv[]) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, 1); + MPILogInitAll log; + + test_hypercube<2> (0,4); + test_hypercube<2> (1,4); + test_hypercube<2> (2,4); + test_hypercube<2> (2,2); + test_hypercube<3> (0,4); + test_hypercube<3> (1,4); + test_hypercube<3> (2,4); + test_hypercube<3> (2,2); + + return 0; +} diff --git a/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=2.output b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=2.output new file mode 100644 index 0000000000..f146b0e281 --- /dev/null +++ b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=2.output @@ -0,0 +1,115 @@ + +DEAL:0::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END + +DEAL:1::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 +DEAL:1::1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 +DEAL:1::1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 +DEAL:1::1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 +DEAL:1::1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END + diff --git a/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=3.output b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=3.output new file mode 100644 index 0000000000..5969a3860b --- /dev/null +++ b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=3.output @@ -0,0 +1,263 @@ + +DEAL:0::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.875000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::0.500000 0.00000 +DEAL:0::0.875000 0.250000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.750000 0.250000 +DEAL:0:: +DEAL:0::0.00000 0.250000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::0.750000 0.00000 +DEAL:0::0.875000 0.125000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.875000 0.250000 +DEAL:0:: +DEAL:0::0.00000 0.250000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::0.00000 0.500000 0.00000 +DEAL:0::0.500000 1.00000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::0.00000 0.500000 0.00000 +DEAL:0::0.500000 1.00000 0.250000 +DEAL:0:: +DEAL:0::0.00000 0.500000 0.250000 +DEAL:0::0.250000 0.750000 0.500000 +DEAL:0:: +DEAL:0::0.250000 0.500000 0.250000 +DEAL:0::0.500000 0.750000 0.375000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.750000 0.500000 +DEAL:0:: +DEAL:0::0.00000 0.500000 0.00000 +DEAL:0::0.500000 1.00000 0.250000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END + +DEAL:1::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 +DEAL:1::1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::0.00000 0.500000 +DEAL:1::0.500000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.750000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::0.500000 0.250000 +DEAL:1::0.750000 0.500000 +DEAL:1:: +DEAL:1::0.00000 0.500000 +DEAL:1::0.500000 0.750000 +DEAL:1:: +DEAL:1::0.00000 0.750000 +DEAL:1::0.250000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::0.00000 0.500000 +DEAL:1::0.500000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.00000 0.00000 +DEAL:1::1.00000 1.00000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.250000 +DEAL:1::0.500000 1.00000 0.500000 +DEAL:1:: +DEAL:1::0.500000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::0.500000 0.500000 1.00000 +DEAL:1:: +DEAL:1::0.500000 0.00000 0.500000 +DEAL:1::1.00000 0.500000 0.750000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.250000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::0.500000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.250000 +DEAL:1:: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 0.500000 0.750000 +DEAL:1:: +DEAL:1::0.00000 0.00000 0.750000 +DEAL:1::0.500000 0.500000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::0.00000 0.00000 0.500000 +DEAL:1::1.00000 0.500000 1.00000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END + + +DEAL:2::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.125000 0.500000 +DEAL:2::1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.125000 0.750000 +DEAL:2::0.500000 1.00000 +DEAL:2:: +DEAL:2::0.500000 0.500000 +DEAL:2::1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.125000 0.875000 +DEAL:2::0.250000 1.00000 +DEAL:2:: +DEAL:2::0.250000 0.750000 +DEAL:2::1.00000 1.00000 +DEAL:2:: +DEAL:2::0.500000 0.500000 +DEAL:2::1.00000 0.750000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.125000 0.750000 +DEAL:2::1.00000 1.00000 +DEAL:2:: +DEAL:2::0.500000 0.500000 +DEAL:2::1.00000 0.750000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.00000 0.500000 +DEAL:2::1.00000 1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.500000 0.00000 0.500000 +DEAL:2::1.00000 1.00000 1.00000 +DEAL:2:: +DEAL:2::0.00000 0.500000 0.500000 +DEAL:2::0.500000 1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.500000 0.250000 0.625000 +DEAL:2::0.750000 0.500000 1.00000 +DEAL:2:: +DEAL:2::0.750000 0.250000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::0.500000 0.00000 0.750000 +DEAL:2::1.00000 0.250000 1.00000 +DEAL:2:: +DEAL:2::0.00000 0.500000 0.500000 +DEAL:2::1.00000 1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.500000 0.00000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::0.00000 0.500000 0.500000 +DEAL:2::1.00000 1.00000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END + diff --git a/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=4.output b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=4.output new file mode 100644 index 0000000000..660bd9feda --- /dev/null +++ b/tests/grid/grid_tools_compute_mesh_predicate_bounding_box_1.with_p4est=true.mpirun=4.output @@ -0,0 +1,231 @@ + +DEAL:0::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 +DEAL:0::0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END +DEAL:0::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:0::Computed Bounding Boxes: +DEAL:0::0.00000 0.00000 0.00000 +DEAL:0::1.00000 0.500000 0.500000 +DEAL:0:: +DEAL:0::Bounding Boxes surround locally_owned cells: 1 +DEAL:0::Current test END + +DEAL:1::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.500000 0.00000 +DEAL:1::1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END +DEAL:1::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:1::Computed Bounding Boxes: +DEAL:1::0.00000 0.500000 0.00000 +DEAL:1::1.00000 1.00000 0.500000 +DEAL:1:: +DEAL:1::Bounding Boxes surround locally_owned cells: 1 +DEAL:1::Current test END + + +DEAL:2::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.500000 +DEAL:2::0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.500000 +DEAL:2::0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.500000 +DEAL:2::0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.500000 +DEAL:2::0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.00000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.00000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.00000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END +DEAL:2::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:2::Computed Bounding Boxes: +DEAL:2::0.00000 0.00000 0.500000 +DEAL:2::1.00000 0.500000 1.00000 +DEAL:2:: +DEAL:2::Bounding Boxes surround locally_owned cells: 1 +DEAL:2::Current test END + + +DEAL:3::Testing hypercube for spacedim = 2 refinement: 0 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.500000 0.500000 +DEAL:3::1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 2 refinement: 1 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.500000 0.500000 +DEAL:3::1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.500000 0.500000 +DEAL:3::1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 2 refinement: 2 max number of boxes: 2 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.500000 0.500000 +DEAL:3::1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 3 refinement: 0 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.00000 0.500000 0.500000 +DEAL:3::1.00000 1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 3 refinement: 1 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.00000 0.500000 0.500000 +DEAL:3::1.00000 1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 4 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.00000 0.500000 0.500000 +DEAL:3::1.00000 1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END +DEAL:3::Testing hypercube for spacedim = 3 refinement: 2 max number of boxes: 2 +DEAL:3::Computed Bounding Boxes: +DEAL:3::0.00000 0.500000 0.500000 +DEAL:3::1.00000 1.00000 1.00000 +DEAL:3:: +DEAL:3::Bounding Boxes surround locally_owned cells: 1 +DEAL:3::Current test END + -- 2.39.5