From: Bruno Blais Date: Mon, 21 Nov 2022 01:41:51 +0000 (-0500) Subject: Exchange ghost uses vertices w ghost_neighbors X-Git-Tag: v9.5.0-rc1~830^2~6 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc7d5e969b93a20d1e090c26b6aadaa3bd9733cd;p=dealii.git Exchange ghost uses vertices w ghost_neighbors --- diff --git a/include/deal.II/grid/grid_tools_cache.h b/include/deal.II/grid/grid_tools_cache.h index 6d0a3e4392..7b44dbda1d 100644 --- a/include/deal.II/grid/grid_tools_cache.h +++ b/include/deal.II/grid/grid_tools_cache.h @@ -75,7 +75,7 @@ namespace GridTools * @param mapping The mapping to use when computing cached objects */ Cache(const Triangulation &tria, - const Mapping & mapping = + const Mapping &mapping = (ReferenceCells::get_hypercube() #ifndef _MSC_VER .template get_default_linear_mapping() @@ -169,22 +169,11 @@ namespace GridTools get_vertex_to_neighbor_subdomain() const; /** - * Returns the std::map of std::vector of unsigned integer containing - * coinciding vertices labeled by an arbitrary element from them. This - * feature is used to identify cells which are connected by periodic - * boundaries. + * Return a map that, for each vertex, lists all the processes whose + * subdomains are adjacent to that vertex. */ - const std::map> & - get_coinciding_vertex_groups() const; - - /** - * Returns the std::map of unsigned integer containing - * the label of a group of coinciding vertices. This - * feature is used to identify cells which are connected by periodic - * boundaries. - */ - const std::map & - get_vertex_to_coinciding_vertex_group() const; + const std::map> & + get_vertices_with_ghost_neighbors() const; /** * Return a reference to the stored triangulation. @@ -310,21 +299,12 @@ namespace GridTools */ mutable std::vector> vertex_to_neighbor_subdomain; - /** - * Store an std::map of std::vector of unsigned integer containing - * coinciding vertices labeled by an arbitrary element from them. - */ - mutable std::map> - coinciding_vertex_groups; - /** * Store an std::map of unsigned integer containing - * the label of a group of coinciding vertices. - * This std::map is generally used in combination - * with the above std::map coinciding_vertex_groups. + * the set of subdomains connected to each vertices */ - mutable std::map - vertex_to_coinciding_vertex_group; + mutable std::map> + vertices_with_ghost_neighbors; /** * Storage for the status of the triangulation signal. diff --git a/include/deal.II/grid/grid_tools_cache_update_flags.h b/include/deal.II/grid/grid_tools_cache_update_flags.h index 381c3543b1..9e5750c56a 100644 --- a/include/deal.II/grid/grid_tools_cache_update_flags.h +++ b/include/deal.II/grid/grid_tools_cache_update_flags.h @@ -88,7 +88,7 @@ namespace GridTools * Update the coinciding vertex groups as well as the * vertex_to_coinciding_vertex_group */ - update_collection_of_coinciding_vertices = 0x200, + update_vertex_with_ghost_neighbors = 0x200, /** * Update all objects. diff --git a/source/grid/grid_tools_cache.cc b/source/grid/grid_tools_cache.cc index 0b8762b4a8..f808f2889c 100644 --- a/source/grid/grid_tools_cache.cc +++ b/source/grid/grid_tools_cache.cc @@ -26,7 +26,7 @@ namespace GridTools { template Cache::Cache(const Triangulation &tria, - const Mapping & mapping) + const Mapping &mapping) : update_flags(update_all) , tria(&tria) , mapping(&mapping) @@ -219,33 +219,18 @@ namespace GridTools } template - const std::map> & - Cache::get_coinciding_vertex_groups() const + const std::map> & + Cache::get_vertices_with_ghost_neighbors() const { - if (update_flags & update_collection_of_coinciding_vertices) + if (update_flags & update_vertex_with_ghost_neighbors) { - GridTools::collect_coinciding_vertices( - *tria, coinciding_vertex_groups, vertex_to_coinciding_vertex_group); + vertices_with_ghost_neighbors = + GridTools::compute_vertices_with_ghost_neighbors(*tria); - update_flags = update_flags & ~update_collection_of_coinciding_vertices; + update_flags = update_flags & ~update_vertex_with_ghost_neighbors; } - return coinciding_vertex_groups; - } - - template - const std::map & - Cache::get_vertex_to_coinciding_vertex_group() const - { - if (update_flags & update_collection_of_coinciding_vertices) - { - GridTools::collect_coinciding_vertices( - *tria, coinciding_vertex_groups, vertex_to_coinciding_vertex_group); - - update_flags = update_flags & ~update_collection_of_coinciding_vertices; - } - - return vertex_to_coinciding_vertex_group; + return vertices_with_ghost_neighbors; } #include "grid_tools_cache.inst" diff --git a/source/particles/particle_handler.cc b/source/particles/particle_handler.cc index a1c710ccf8..320dda647f 100644 --- a/source/particles/particle_handler.cc +++ b/source/particles/particle_handler.cc @@ -77,7 +77,7 @@ namespace Particles template ParticleHandler::ParticleHandler( const Triangulation &triangulation, - const Mapping & mapping, + const Mapping &mapping, const unsigned int n_properties) : triangulation(&triangulation, typeid(*this).name()) , mapping(&mapping, typeid(*this).name()) @@ -117,7 +117,7 @@ namespace Particles void ParticleHandler::initialize( const Triangulation &new_triangulation, - const Mapping & new_mapping, + const Mapping &new_mapping, const unsigned int n_properties) { clear(); @@ -577,7 +577,7 @@ namespace Particles template typename ParticleHandler::particle_iterator ParticleHandler::insert_particle( - const Particle & particle, + const Particle &particle, const typename Triangulation::active_cell_iterator &cell) { return insert_particle(particle.get_location(), @@ -623,7 +623,7 @@ namespace Particles template typename ParticleHandler::particle_iterator ParticleHandler::insert_particle( - const void *& data, + const void *&data, const typename Triangulation::active_cell_iterator &cell) { Assert(triangulation != nullptr, ExcInternalError()); @@ -648,8 +648,8 @@ namespace Particles template typename ParticleHandler::particle_iterator ParticleHandler::insert_particle( - const Point & position, - const Point & reference_position, + const Point &position, + const Point &reference_position, const types::particle_index particle_index, const typename Triangulation::active_cell_iterator &cell, const ArrayView &properties) @@ -764,8 +764,8 @@ namespace Particles ParticleHandler::insert_global_particles( const std::vector> &positions, const std::vector>> - & global_bounding_boxes, - const std::vector> & properties, + &global_bounding_boxes, + const std::vector> &properties, const std::vector &ids) { if (!properties.empty()) @@ -1190,7 +1190,7 @@ namespace Particles compare_particle_association( const unsigned int a, const unsigned int b, - const Tensor<1, dim> & particle_direction, + const Tensor<1, dim> &particle_direction, const std::vector> ¢er_directions) { const double scalar_product_a = center_directions[a] * particle_direction; @@ -1545,14 +1545,11 @@ namespace Particles // In the case of a parallel simulation with periodic boundary conditions // the vertices associated with periodic boundaries are not directly // connected to the ghost cells but they are connected to the ghost cells - // through their coinciding vertices. We gather the information about - // the coinciding vertices through the grid cache. - const std::map> - &coinciding_vertex_groups = - triangulation_cache->get_coinciding_vertex_groups(); - const std::map - &vertex_to_coinciding_vertex_group = - triangulation_cache->get_vertex_to_coinciding_vertex_group(); + // through their coinciding vertices. We gather this information using the + // vertices_with_ghost_neighbors map + const std::map> + &vertices_with_ghost_neighbors = + triangulation_cache->get_vertices_with_ghost_neighbors(); const std::set ghost_owners = parallel_triangulation->ghost_owners(); @@ -1570,29 +1567,14 @@ namespace Particles std::set cell_to_neighbor_subdomain; for (const unsigned int v : cell->vertex_indices()) { - cell_to_neighbor_subdomain.insert( - vertex_to_neighbor_subdomain[cell->vertex_index(v)].begin(), - vertex_to_neighbor_subdomain[cell->vertex_index(v)].end()); - - // If the vertex has one or more coinciding vertices, then - // all of these vertices, including the current vertex being - // looped over are contained inside the - // vertex_to_coinciding_vertex_group. Consequently, we loop over - // the full content of the coinciding vertex group which will - // include the current vertex. When we reach the current vertex, - // we skip it to avoid repetition. - if (vertex_to_coinciding_vertex_group.find(cell->vertex_index( - v)) != vertex_to_coinciding_vertex_group.end()) + if (vertices_with_ghost_neighbors.find(cell->vertex_index(v)) != + vertices_with_ghost_neighbors.end()) { - for (const unsigned int cv : coinciding_vertex_groups.at( - vertex_to_coinciding_vertex_group.at( - cell->vertex_index(v)))) - { - if (cv != cell->vertex_index(v)) - cell_to_neighbor_subdomain.insert( - vertex_to_neighbor_subdomain[cv].begin(), - vertex_to_neighbor_subdomain[cv].end()); - } + cell_to_neighbor_subdomain.insert( + vertices_with_ghost_neighbors.at(cell->vertex_index(v)) + .begin(), + vertices_with_ghost_neighbors.at(cell->vertex_index(v)) + .end()); } } @@ -1669,7 +1651,7 @@ namespace Particles const std::map< types::subdomain_id, std::vector::active_cell_iterator>> - & send_cells, + &send_cells, const bool build_cache) { Assert(triangulation != nullptr, ExcInternalError()); @@ -2073,7 +2055,7 @@ namespace Particles template void ParticleHandler::register_additional_store_load_functions( - const std::function & size_callb, + const std::function &size_callb, const std::function &store_callb, const std::function &load_callb) @@ -2203,7 +2185,7 @@ namespace Particles const auto callback_function = [this]( const typename Triangulation::cell_iterator - & cell_iterator, + &cell_iterator, const typename Triangulation::CellStatus cell_status) { return this->pack_callback(cell_iterator, cell_status); }; @@ -2360,7 +2342,7 @@ namespace Particles template void ParticleHandler::unpack_callback( - const typename Triangulation::cell_iterator & cell, + const typename Triangulation::cell_iterator &cell, const typename Triangulation::CellStatus status, const boost::iterator_range::const_iterator> &data_range) { @@ -2394,14 +2376,12 @@ namespace Particles // now update particle storage location and properties if necessary switch (status) { - case parallel::TriangulationBase::CELL_PERSIST: - { + case parallel::TriangulationBase::CELL_PERSIST: { // all particles are correctly inserted } break; - case parallel::TriangulationBase::CELL_COARSEN: - { + case parallel::TriangulationBase::CELL_COARSEN: { // all particles are in correct cell, but their reference location // has changed for (auto &particle : loaded_particles_on_cell) @@ -2414,8 +2394,7 @@ namespace Particles } break; - case parallel::TriangulationBase::CELL_REFINE: - { + case parallel::TriangulationBase::CELL_REFINE: { // we need to find the correct child to store the particles and // their reference location has changed typename particle_container::iterator &cache =