From eb62fe0f67f4c7e089ea1b5ba673516df6fd1b77 Mon Sep 17 00:00:00 2001 From: hartmann Date: Fri, 30 Sep 2005 16:47:58 +0000 Subject: [PATCH] New get_boundary_indicators function. git-svn-id: https://svn.dealii.org/trunk@11563 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/grid/tria.h | 17 +++++++++++++++++ deal.II/deal.II/source/grid/tria.cc | 24 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/deal.II/deal.II/include/grid/tria.h b/deal.II/deal.II/include/grid/tria.h index 4f276a1dfe..18cb07e437 100644 --- a/deal.II/deal.II/include/grid/tria.h +++ b/deal.II/deal.II/include/grid/tria.h @@ -1700,6 +1700,23 @@ class Triangulation : public Subscriptor * @p set_boundary */ const Boundary & get_boundary (const unsigned int number) const; + + /** + * Fill the boundary_indicators + * vector with all boundary + * indicators assigned to + * boundary faces of this + * Triangulation object. Note, + * that each boundary indicator + * is reported only once. The + * boundary_indicators vector + * will be resized to match the + * number of different indicators + * (which is greater or equal + * one). + */ + void get_boundary_indicators( + std::vector &boundary_indicators) const; /** * Copy a triangulation. This diff --git a/deal.II/deal.II/source/grid/tria.cc b/deal.II/deal.II/source/grid/tria.cc index 39efc3904a..7b08fd6f6b 100644 --- a/deal.II/deal.II/source/grid/tria.cc +++ b/deal.II/deal.II/source/grid/tria.cc @@ -121,6 +121,30 @@ Triangulation::get_boundary (const unsigned int number) const } + +template +void +Triangulation::get_boundary_indicators ( + std::vector &boundary_indicators) const +{ + std::vector bi_exists(255, false); + active_cell_iterator cell=begin_active(); + for (; cell!=end(); ++cell) + for (unsigned int face=0; face::faces_per_cell; ++face) + if (cell->at_boundary(face)) + bi_exists[cell->face(face)->boundary_indicator()]=true; + + const unsigned int n_bi= + std::count(bi_exists.begin(), bi_exists.end(), true); + + boundary_indicators.resize(n_bi); + unsigned int bi_counter=0; + for (unsigned int i=0; i