From 252dee8b261f65069605cb928e5e4ce0412dac1f Mon Sep 17 00:00:00 2001 From: Jean-Paul Pelteret Date: Thu, 30 Dec 2021 07:56:21 +0100 Subject: [PATCH] Add manifold ID iterator filter predicate --- include/deal.II/grid/filtered_iterator.h | 62 ++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/include/deal.II/grid/filtered_iterator.h b/include/deal.II/grid/filtered_iterator.h index 3fa12229ec..9f202eac46 100644 --- a/include/deal.II/grid/filtered_iterator.h +++ b/include/deal.II/grid/filtered_iterator.h @@ -366,6 +366,44 @@ namespace IteratorFilters */ const std::set boundary_ids; }; + + + /** + * Filter for iterators that evaluates to true if the iterator of the object + * pointed to is equal to a value or set of values given to the constructor, + * assuming that the iterator allows querying for a manifold id. + * + * @ingroup Iterators + */ + class ManifoldIdEqualTo + { + public: + /** + * Constructor. Store the boundary id which iterators shall have to be + * evaluated to true. + */ + ManifoldIdEqualTo(const types::manifold_id manifold_id); + + /** + * Constructor. Store a collection of boundary ids which iterators shall + * have to be evaluated to true. + */ + ManifoldIdEqualTo(const std::set &manifold_ids); + + /** + * Evaluation operator. Returns true if the boundary id of the object + * pointed to is equal within the stored set of value allowable values. + */ + template + bool + operator()(const Iterator &i) const; + + protected: + /** + * Stored value to compare the material id with. + */ + const std::set manifold_ids; + }; } // namespace IteratorFilters @@ -1502,6 +1540,30 @@ namespace IteratorFilters { return boundary_ids.find(i->boundary_id()) != boundary_ids.end(); } + + + + // ---------------- IteratorFilters::ManifoldIdEqualTo --------- + inline ManifoldIdEqualTo::ManifoldIdEqualTo( + const types::manifold_id manifold_id) + : manifold_ids{manifold_id} + {} + + + + inline ManifoldIdEqualTo::ManifoldIdEqualTo( + const std::set &manifold_ids) + : manifold_ids(manifold_ids) + {} + + + + template + inline bool + ManifoldIdEqualTo::operator()(const Iterator &i) const + { + return manifold_ids.find(i->manifold_id()) != manifold_ids.end(); + } } // namespace IteratorFilters -- 2.39.5