From: Jean-Paul Pelteret Date: Thu, 30 Dec 2021 06:55:48 +0000 (+0100) Subject: Add boundary ID iterator filter predicate X-Git-Tag: v9.4.0-rc1~686^2~3 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7008a89df68f62bd57707f6efc8a74e05b8f3272;p=dealii.git Add boundary ID iterator filter predicate --- diff --git a/include/deal.II/grid/filtered_iterator.h b/include/deal.II/grid/filtered_iterator.h index 4733739411..3fa12229ec 100644 --- a/include/deal.II/grid/filtered_iterator.h +++ b/include/deal.II/grid/filtered_iterator.h @@ -328,6 +328,44 @@ namespace IteratorFilters bool operator()(const Iterator &i) const; }; + + + /** + * 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 boundary id. + * + * @ingroup Iterators + */ + class BoundaryIdEqualTo + { + public: + /** + * Constructor. Store the boundary id which iterators shall have to be + * evaluated to true. + */ + BoundaryIdEqualTo(const types::boundary_id boundary_id); + + /** + * Constructor. Store a collection of boundary ids which iterators shall + * have to be evaluated to true. + */ + BoundaryIdEqualTo(const std::set &boundary_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 boundary_ids; + }; } // namespace IteratorFilters @@ -1440,6 +1478,30 @@ namespace IteratorFilters { return (i->at_boundary()); } + + + + // ---------------- IteratorFilters::BoundaryIdEqualTo --------- + inline BoundaryIdEqualTo::BoundaryIdEqualTo( + const types::boundary_id boundary_id) + : boundary_ids{boundary_id} + {} + + + + inline BoundaryIdEqualTo::BoundaryIdEqualTo( + const std::set &boundary_ids) + : boundary_ids(boundary_ids) + {} + + + + template + inline bool + BoundaryIdEqualTo::operator()(const Iterator &i) const + { + return boundary_ids.find(i->boundary_id()) != boundary_ids.end(); + } } // namespace IteratorFilters