From: Luca Heltai Date: Thu, 14 Sep 2017 08:43:02 +0000 (+0200) Subject: Vertex to cell centers directions. X-Git-Tag: v9.0.0-rc1~1052^2~8 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e428f878d7d40258236a1912a2d5a3e54c7c57e3;p=dealii.git Vertex to cell centers directions. --- diff --git a/include/deal.II/grid/tria_info_cache.h b/include/deal.II/grid/tria_info_cache.h index d48b5209d0..5ef199d1f8 100644 --- a/include/deal.II/grid/tria_info_cache.h +++ b/include/deal.II/grid/tria_info_cache.h @@ -96,6 +96,13 @@ public: const std::vector< std::set::active_cell_iterator> > &get_vertex_to_cell_map() const; + /** + * Return the cached vertex_to_cell_centers_directions as computed by + * GridTools::vertex_to_cell_centers_directions(). + */ + const std::vector>> + &get_vertex_to_cell_centers_directions() const; + /** * Exception for uninitialized cache fields. */ @@ -130,6 +137,12 @@ private: * GridTools::vertex_to_cell_map() */ std::vector< std::set::active_cell_iterator> > vertex_to_cells; + + /** + * Store vertex to cell center directions, as generated by + * GridTools::vertex_to_cell_centers_directions. + */ + std::vector>> vertex_to_cell_centers; }; DEAL_II_NAMESPACE_CLOSE diff --git a/include/deal.II/grid/tria_info_cache_flags.h b/include/deal.II/grid/tria_info_cache_flags.h index 181b2f3815..165d735c68 100644 --- a/include/deal.II/grid/tria_info_cache_flags.h +++ b/include/deal.II/grid/tria_info_cache_flags.h @@ -41,6 +41,12 @@ enum TriangulationInfoCacheFlags * Cache vertex_to_cell_map, as returned by GridTools::vertex_to_cell_map(). */ cache_vertex_to_cell_map = 0x0001, + + /** + * Cache vertex_to_cell_centers_directions, as returned by + * GridTools::vertex_to_cell_centers_directions() + */ + cache_vertex_to_cell_centers_directions = cache_vertex_to_cell_map | 0x0002, }; @@ -54,7 +60,8 @@ inline StreamType &operator << (StreamType &s, TriangulationInfoCacheFlags u) { s << " TriangulationInfoCacheFlags"; - if (u & cache_vertex_to_cell_map) s << "|vertex_to_cell_map" ; + if (u & cache_vertex_to_cell_map) s << "|vertex_to_cell_map"; + if (u & cache_vertex_to_cell_centers_directions) s << "|vertex_to_cells_centers_directions"; return s; } diff --git a/source/grid/tria_info_cache.cc b/source/grid/tria_info_cache.cc index 5be00323a0..dc975f59af 100644 --- a/source/grid/tria_info_cache.cc +++ b/source/grid/tria_info_cache.cc @@ -20,9 +20,9 @@ DEAL_II_NAMESPACE_OPEN template TriangulationInfoCache::TriangulationInfoCache( - const Triangulation &tria, - const TriangulationInfoCacheFlags &flags, - const Mapping &mapping) : + const Triangulation &tria, + const TriangulationInfoCacheFlags &flags, + const Mapping &mapping) : tria(&tria), flags(flags), mapping(&mapping) @@ -32,7 +32,7 @@ TriangulationInfoCache::TriangulationInfoCache( update(); }); - if(tria.n_active_cells()>0) + if (tria.n_active_cells()>0) update(); } @@ -41,12 +41,19 @@ TriangulationInfoCache::TriangulationInfoCache( template void TriangulationInfoCache::update(bool topology_is_unchanged) { - if(topology_is_unchanged == false) { - if (cache_vertex_to_cell_map & flags) + if (topology_is_unchanged == false) + { + if (cache_vertex_to_cell_map & flags) vertex_to_cells = GridTools::vertex_to_cell_map(*tria); - } + } + + if (cache_vertex_to_cell_centers_directions & flags) + vertex_to_cell_centers = + GridTools::vertex_to_cell_centers_directions(*tria, vertex_to_cells); } + + template const std::vector::active_cell_iterator> > & TriangulationInfoCache::get_vertex_to_cell_map() const @@ -58,5 +65,13 @@ TriangulationInfoCache::get_vertex_to_cell_map() const +template +const std::vector>> & +TriangulationInfoCache::get_vertex_to_cell_centers_directions() const +{ + Assert(flags & cache_vertex_to_cell_centers_directions, + ExcAccessToInvalidCacheObject(cache_vertex_to_cell_centers_directions, flags)); + return vertex_to_cell_centers; +} DEAL_II_NAMESPACE_CLOSE