From f559cd15f923d573c97c90237f09756d4a940f70 Mon Sep 17 00:00:00 2001 From: Martin Nolte <nolte@mathematik.uni-freiburg.de> Date: Fri, 10 Nov 2017 15:59:08 +0000 Subject: [PATCH] Merge branch 'feature/add-has-entity-iterator-capability' into 'master' add capability hasEntityIterator Closes #38 See merge request core/dune-grid!230 (cherry picked from commit e50f64ae11a610a80ca63d91b76aa1848c22cc1e) 8f3bb0d1 add capability hasEntityIterator --- dune/grid/albertagrid/capabilities.hh | 11 +++++++++++ dune/grid/common/capabilities.hh | 22 ++++++++++++++++++++++ dune/grid/geometrygrid/capabilities.hh | 7 +++++++ dune/grid/identitygrid.hh | 6 ++++++ dune/grid/onedgrid.hh | 10 ++++++++++ dune/grid/uggrid.hh | 20 ++++++++++++++++++++ dune/grid/yaspgrid.hh | 10 ++++++++++ 7 files changed, 86 insertions(+) diff --git a/dune/grid/albertagrid/capabilities.hh b/dune/grid/albertagrid/capabilities.hh index c43b89915c..94d4c3cc4e 100644 --- a/dune/grid/albertagrid/capabilities.hh +++ b/dune/grid/albertagrid/capabilities.hh @@ -46,6 +46,17 @@ namespace Dune static const bool v = true; }; + /** + * \brief AlbertaGrid can iterate over all codimensions + * + * \ingroup AlbertaGrid + **/ + template< int dim, int dimworld, int codim > + struct hasEntityIterator< AlbertaGrid< dim, dimworld >, codim > + { + static const bool v = true; + }; + /** \brief AlbertaGrid is not levelwise conforming * (since it uses bisection) * \ingroup AlbertaGrid diff --git a/dune/grid/common/capabilities.hh b/dune/grid/common/capabilities.hh index a35a895cb9..c41d3e320e 100644 --- a/dune/grid/common/capabilities.hh +++ b/dune/grid/common/capabilities.hh @@ -57,6 +57,22 @@ namespace Dune static const bool v = false; }; + /** + * \brief specialize with 'true' for all codims that a grid provides an iterator for (default=false) + * + * \note Being able to iterate over a codimension implies that the grid + * provides entities for that codimension. + * \note Any fully conforming DUNE grid implementation must be able to + * iterate over all codim 0 entities (i.e., elements). + * + * \ingroup GICapabilities + **/ + template< class Grid, int codim > + struct hasEntityIterator + { + static const bool v = false; + }; + /** \brief Specialize with 'false' for all codims that a grid does not implement geometries for. (default=true) \ingroup GICapabilities @@ -179,6 +195,12 @@ namespace Dune static const bool v = Dune::Capabilities::hasEntity<Grid,codim>::v; }; + template< class Grid, int codim > + struct hasEntityIterator< const Grid, codim > + { + static const bool v = Dune::Capabilities::hasEntityIterator< Grid, codim >::v; + }; + template< class Grid, int codim > struct canCommunicate< const Grid, codim > { diff --git a/dune/grid/geometrygrid/capabilities.hh b/dune/grid/geometrygrid/capabilities.hh index 558948f8e0..b1be6bec4c 100644 --- a/dune/grid/geometrygrid/capabilities.hh +++ b/dune/grid/geometrygrid/capabilities.hh @@ -38,6 +38,13 @@ namespace Dune }; + template< class HostGrid, class CoordFunction, class Allocator, int codim > + struct hasEntityIterator< GeometryGrid< HostGrid, CoordFunction, Allocator >, codim > + { + static const bool v = true; + }; + + template< class HostGrid, class CoordFunction, class Allocator, int codim > struct canCommunicate< GeometryGrid< HostGrid, CoordFunction, Allocator >, codim > { diff --git a/dune/grid/identitygrid.hh b/dune/grid/identitygrid.hh index 4c98a0f38e..c8bf0b64d6 100644 --- a/dune/grid/identitygrid.hh +++ b/dune/grid/identitygrid.hh @@ -491,6 +491,12 @@ namespace Dune static const bool v = hasEntity<HostGrid,codim>::v; }; + template<class HostGrid, int codim> + struct hasEntityIterator<IdentityGrid<HostGrid>, codim> + { + static const bool v = hasEntityIterator<HostGrid, codim>::v; + }; + /** \brief has conforming level grids when host grid has * \ingroup IdentityGrid */ diff --git a/dune/grid/onedgrid.hh b/dune/grid/onedgrid.hh index 716cb9d6c6..da6a064473 100644 --- a/dune/grid/onedgrid.hh +++ b/dune/grid/onedgrid.hh @@ -435,6 +435,16 @@ namespace Dune { static const bool v = true; }; + /** + * \brief OneDGrid can iterate over all codimensions + * \ingroup OneDGrid + **/ + template<int codim> + struct hasEntityIterator<OneDGrid, codim> + { + static const bool v = false; + }; + /** \brief OneDGrid is levelwise conforming \ingroup OneDGrid */ diff --git a/dune/grid/uggrid.hh b/dune/grid/uggrid.hh index 06df2f68da..c71a5d3d60 100644 --- a/dune/grid/uggrid.hh +++ b/dune/grid/uggrid.hh @@ -985,6 +985,26 @@ namespace Dune { static const bool v = true; }; + /** + * \brief UGGrid can iterate over codim=0 entities (elements) + * \ingroup UGGrid + **/ + template<int dim> + struct hasEntityIterator<UGGrid<dim>, 0> + { + static const bool v = true; + }; + + /** + * \brief UGGrid can iterate over codim=dim entities (vertices) + * \ingroup UGGrid + **/ + template<int dim> + struct hasEntityIterator<UGGrid<dim>, dim> + { + static const bool v = true; + }; + /** \brief UGGrid is levelwise conforming \ingroup UGGrid */ diff --git a/dune/grid/yaspgrid.hh b/dune/grid/yaspgrid.hh index df297b8386..b6fac01896 100644 --- a/dune/grid/yaspgrid.hh +++ b/dune/grid/yaspgrid.hh @@ -1824,6 +1824,16 @@ namespace Dune { static const bool v = true; }; + /** + * \brief YaspGrid can iterate over all codimensions + * \ingroup YaspGrid + **/ + template<int dim, class Coordinates, int codim> + struct hasEntityIterator<YaspGrid<dim, Coordinates>, codim> + { + static const bool v = true; + }; + /** \brief YaspGrid can communicate on all codimensions * \ingroup YaspGrid */ -- GitLab