From d2e66704f057daade94f0ddc8afd432f73f0f4f6 Mon Sep 17 00:00:00 2001 From: wolf Date: Mon, 28 Jun 2004 14:49:51 +0000 Subject: [PATCH] Merge back the changes on the hp branch that have been made in the grid/ subdirectory. git-svn-id: https://svn.dealii.org/trunk@9477 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/grid/tria.h | 557 ++++++------------ deal.II/deal.II/include/grid/tria_iterator.h | 44 ++ .../include/grid/tria_iterator_selector.h | 207 +++++++ deal.II/deal.II/include/grid/tria_levels.h | 2 +- deal.II/deal.II/source/grid/tria.cc | 320 +++++----- 5 files changed, 602 insertions(+), 528 deletions(-) create mode 100644 deal.II/deal.II/include/grid/tria_iterator_selector.h diff --git a/deal.II/deal.II/include/grid/tria.h b/deal.II/deal.II/include/grid/tria.h index 1f39010195..9bdb20ca47 100644 --- a/deal.II/deal.II/include/grid/tria.h +++ b/deal.II/deal.II/include/grid/tria.h @@ -15,25 +15,19 @@ #include -#include #include -#include #include +#include +#include + +#include +#include template class Boundary; template class StraightBoundary; -template class CellAccessor; -template class TriaAccessor; -template class TriaObjectAccessor; -template class TriaObjectAccessor<0, dim>; -template class TriaObjectAccessor<1, dim>; -template class TriaObjectAccessor<2, dim>; -template class TriaObjectAccessor<3, dim>; -template class TriaRawIterator; -template class TriaIterator; -template class TriaActiveIterator; template class TriangulationLevel; template class DoFHandler; +template class hpDoFHandler; template class MGDoFHandler; /*------------------------------------------------------------------------*/ @@ -160,275 +154,6 @@ struct SubCellData /*------------------------------------------------------------------------*/ -/** - * This class implements some types which differ between the - * dimensions. Declare it to have a template parameter, but do not - * actually declare anything concrete apart from the other classes - * which are explicitly instantiated ones with the same name. - * - * @author Wolfgang Bangerth, 1998 - */ -template -class TriaDimensionInfo -{ -}; - - - -/** - * This class implements some types which differ between the dimensions. - * These are the declararions for the 1D case only. - * - * A @p line_iterator is typdef'd to an iterator operating on the - * @p lines member variable of a Triangulation<1> object. An - * @p active_line_iterator only operates on the active lines. - * @p raw_line_iterator objects operate on all lines, used or not. - * - * Since we are in one dimension, the following identities are declared: - * @verbatim - * typedef raw_line_iterator raw_cell_iterator; - * typedef line_iterator cell_iterator; - * typedef active_line_iterator active_cell_iterator; - * @endverbatim - * - * To enable the declaration of @p begin_quad and the like in - * Triangulation<1>, the @p quad_iterators are declared as - * void *. Thus these types exist, but are useless and will - * certainly make any involuntary use visible. The same holds - * for hexahedron iterators. - * - * The same applies for the @p face_iterator types, since lines - * have no substructures apart from vertices, which are handled in - * a different way, however. - * - * @author Wolfgang Bangerth, 1998 - */ -template <> -class TriaDimensionInfo<1> -{ - public: - typedef TriaRawIterator<1,CellAccessor<1> > raw_line_iterator; - /** - * Iterator for lines. - */ - typedef TriaIterator<1,CellAccessor<1> > line_iterator; - /** - * Iterator for active lines. - */ - typedef TriaActiveIterator<1,CellAccessor<1> > active_line_iterator; - - typedef void * raw_quad_iterator; - /** - * Iterator for quads. Void in 1D. - */ - typedef void * quad_iterator; - /** - * Iterator for active quads. Void in 1D. - */ - typedef void * active_quad_iterator; - - typedef void * raw_hex_iterator; - /** - * Iterator for hexahedra. Void in 1D. - */ - typedef void * hex_iterator; - /** - * Iterator for active hexahedra. Void in 1D. - */ - typedef void * active_hex_iterator; - - typedef raw_line_iterator raw_cell_iterator; - /** - * Iterator for cells. - */ - typedef line_iterator cell_iterator; - /** - * Iterator active for cells. - */ - typedef active_line_iterator active_cell_iterator; - - typedef void * raw_face_iterator; - /** - * Iterator for faces. Void in 1D. - */ - typedef void * face_iterator; - /** - * Iterator for active faces. Void in 1D. - */ - typedef void * active_face_iterator; -}; - - - -/** - * This class implements some types which differ between the dimensions. - * These are the declararions for the 2D case only. - * - * A @p line_iterator is typdef'd to an iterator operating on the - * @p lines member variable of a Triangulation<2> object. An - * @p active_line_iterator only operates on the active lines. - * @p raw_line_iterator objects operate on all lines, used or not. - * Using @p active_line_iterators may not be particularly in 2D useful since it - * only operates on unrefined lines. However, also refined lines may bound - * unrefined cells if the neighboring cell is refined once more than the - * present one. - * - * Similarly to line iterators, @p quad_iterator, @p raw_quad_iterator and - * @p active_quad_iterator are declared. - * - * To enable the declaration of @p begin_hex and the like in - * Triangulation<[12]>, the @p hex_iterators are declared as - * void *. Thus these types exist, but are useless and will - * certainly make any involuntary use visible. - * - * Since we are in two dimension, the following identities are declared: - * @verbatim - * typedef raw_quad_iterator raw_cell_iterator; - * typedef quad_iterator cell_iterator; - * typedef active_quad_iterator active_cell_iterator; - * - * typedef raw_line_iterator raw_face_iterator; - * typedef line_iterator face_iterator; - * typedef active_line_iterator active_face_iterator; - * @endverbatim - * - * @author Wolfgang Bangerth, 1998 - */ -template <> -class TriaDimensionInfo<2> -{ - public: - typedef TriaRawIterator<2,TriaObjectAccessor<1, 2> > raw_line_iterator; - /** - * Iterator for lines. - */ - typedef TriaIterator<2,TriaObjectAccessor<1, 2> > line_iterator; - /** - * Iterator for active lines. - */ - typedef TriaActiveIterator<2,TriaObjectAccessor<1, 2> > active_line_iterator; - - typedef TriaRawIterator<2,CellAccessor<2> > raw_quad_iterator; - /** - * Iterator for quadrilaterals. - */ - typedef TriaIterator<2,CellAccessor<2> > quad_iterator; - /** - * Iterator for active quadrilaterals. - */ - typedef TriaActiveIterator<2,CellAccessor<2> > active_quad_iterator; - - typedef void * raw_hex_iterator; - /** - * Iterator for hexahedra. Void in 2D. - */ - typedef void * hex_iterator; - /** - * Iterator for active hexahedra. Void in 2D. - */ - typedef void * active_hex_iterator; - - typedef raw_quad_iterator raw_cell_iterator; - /** - * Iterator for cells. - */ - typedef quad_iterator cell_iterator; - /** - * Iterator for active cells. - */ - typedef active_quad_iterator active_cell_iterator; - - typedef raw_line_iterator raw_face_iterator; - /** - * Iterator for faces. - */ - typedef line_iterator face_iterator; - /** - * Iterator for active faces. - */ - typedef active_line_iterator active_face_iterator; -}; - - - -/** - * This class implements some types which differ between the dimensions. - * These are the declararions for the 3D case only. - * - * For the declarations of the data types, more or less the same holds - * as for lower dimensions (see TriaDimensionInfo<[12]>). The - * dimension specific data types are here, since we are in three dimensions: - * @verbatim - * typedef raw_hex_iterator raw_cell_iterator; - * typedef hex_iterator cell_iterator; - * typedef active_hex_iterator active_cell_iterator; - * - * typedef raw_quad_iterator raw_face_iterator; - * typedef quad_iterator face_iterator; - * typedef active_quad_iterator active_face_iterator; - * @endverbatim - * - * @author Wolfgang Bangerth, 1998 - */ -template <> -class TriaDimensionInfo<3> -{ - public: - typedef TriaRawIterator<3,TriaObjectAccessor<1, 3> > raw_line_iterator; - /** - * Iterator for lines. - */ - typedef TriaIterator<3,TriaObjectAccessor<1, 3> > line_iterator; - /** - * Iterator for active lines. - */ - typedef TriaActiveIterator<3,TriaObjectAccessor<1, 3> > active_line_iterator; - - typedef TriaRawIterator<3,TriaObjectAccessor<2, 3> > raw_quad_iterator; - /** - * Iterator for quadrilaterals. - */ - typedef TriaIterator<3,TriaObjectAccessor<2, 3> > quad_iterator; - /** - * Iterator for active quadrilaterals. - */ - typedef TriaActiveIterator<3,TriaObjectAccessor<2, 3> > active_quad_iterator; - - typedef TriaRawIterator<3,CellAccessor<3> > raw_hex_iterator; - /** - * Iterator for hexahedra. - */ - typedef TriaIterator<3,CellAccessor<3> > hex_iterator; - /** - * Iterator for active hexahedra. - */ - typedef TriaActiveIterator<3,CellAccessor<3> > active_hex_iterator; - - typedef raw_hex_iterator raw_cell_iterator; - /** - * Iterator for cells. - */ - typedef hex_iterator cell_iterator; - /** - * Iterator for active cells. - */ - typedef active_hex_iterator active_cell_iterator; - - typedef raw_quad_iterator raw_face_iterator; - /** - * Iterator for faces. - */ - typedef quad_iterator face_iterator; - /** - * Iterator for active faces. - */ - typedef active_quad_iterator active_face_iterator; -}; - - - -/*------------------------------------------------------------------------*/ - /** * Cache class used to store the number of used and active elements @@ -1760,8 +1485,7 @@ struct TriaNumberCache<3> : public TriaNumberCache<2> * @author Wolfgang Bangerth, 1998 */ template -class Triangulation : public TriaDimensionInfo, - public Subscriptor +class Triangulation : public Subscriptor { private: /** @@ -1793,6 +1517,8 @@ class Triangulation : public TriaDimensionInfo, */ static const StraightBoundary *straight_boundary; + typedef internal::TriaIteratorSelector IteratorSelector; + public: /** @@ -1823,26 +1549,53 @@ class Triangulation : public TriaDimensionInfo, }; - typedef typename TriaDimensionInfo::raw_line_iterator raw_line_iterator; - typedef typename TriaDimensionInfo::line_iterator line_iterator; - typedef typename TriaDimensionInfo::active_line_iterator active_line_iterator; - - typedef typename TriaDimensionInfo::raw_quad_iterator raw_quad_iterator; - typedef typename TriaDimensionInfo::quad_iterator quad_iterator; - typedef typename TriaDimensionInfo::active_quad_iterator active_quad_iterator; + typedef typename IteratorSelector::raw_line_iterator raw_line_iterator; + typedef typename IteratorSelector::line_iterator line_iterator; + typedef typename IteratorSelector::active_line_iterator active_line_iterator; - typedef typename TriaDimensionInfo::raw_hex_iterator raw_hex_iterator; - typedef typename TriaDimensionInfo::hex_iterator hex_iterator; - typedef typename TriaDimensionInfo::active_hex_iterator active_hex_iterator; + typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator; + typedef typename IteratorSelector::quad_iterator quad_iterator; + typedef typename IteratorSelector::active_quad_iterator active_quad_iterator; - typedef typename TriaDimensionInfo::raw_cell_iterator raw_cell_iterator; - typedef typename TriaDimensionInfo::cell_iterator cell_iterator; - typedef typename TriaDimensionInfo::active_cell_iterator active_cell_iterator; + typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator; + typedef typename IteratorSelector::hex_iterator hex_iterator; + typedef typename IteratorSelector::active_hex_iterator active_hex_iterator; - typedef typename TriaDimensionInfo::raw_face_iterator raw_face_iterator; - typedef typename TriaDimensionInfo::face_iterator face_iterator; - typedef typename TriaDimensionInfo::active_face_iterator active_face_iterator; + typedef typename IteratorSelector::raw_cell_iterator raw_cell_iterator; + typedef typename IteratorSelector::cell_iterator cell_iterator; + typedef typename IteratorSelector::active_cell_iterator active_cell_iterator; + typedef typename IteratorSelector::raw_face_iterator raw_face_iterator; + typedef typename IteratorSelector::face_iterator face_iterator; + typedef typename IteratorSelector::active_face_iterator active_face_iterator; + + /** + * Base class for refinement listeners. + * Other classes, which need to be + * informed about refinements of the + * Triangulation, + * can be derived from + * RefinementListener. + * If these classes add theirself to + * the refinement listener list by + * calling add_refinement_listener(), + * they will then be informed about + * the beginning of the refinement + * by a call of pre_refinement_notification() + * and about the end of the refinement + * process by a call of + * post_refinement_notification(). + * Both methods are called in the method + * execute_coarsening_and_refinement(). + * For an example see hpDoFHandler(). + */ + class RefinementListener + { + public: + virtual void pre_refinement_notification (const Triangulation &tria); + virtual void post_refinement_notification (const Triangulation &tria); + }; + /** * Create a triangulation and create * the first level of the hierarchy. @@ -2162,6 +1915,21 @@ class Triangulation : public TriaDimensionInfo, */ bool prepare_coarsening_and_refinement (); + /** + * Add a RefinementListener. Adding listeners + * to the Triangulation allows other classes to + * be informed, when the Triangulation is refined. + */ + void add_refinement_listener (RefinementListener &listener) const; + + /** + * Removes a RefinementListener. When some class + * needs no longer to be informed about refinements, + * the listener should be removed from the + * Triangulation. + */ + void remove_refinement_listener (RefinementListener &listener) const; + /*@}*/ /** @@ -3327,7 +3095,7 @@ class Triangulation : public TriaDimensionInfo, * thus avoiding endianess. They are * written to @p out in plain text, thus * amounting to 3.6 bits per active cell - * on the overage. Other information + * on the average. Other information * (magic numbers ans number of elements) * is stored as plain text * as well. The format should therefore be @@ -3491,6 +3259,13 @@ class Triangulation : public TriaDimensionInfo, */ TriaNumberCache number_cache; + /** + * List of RefinementListeners, + * which want to be informed if the + * Triangulation is refined. + */ + mutable std::list refinement_listeners; + // make a couple of classes // friends template friend class TriaAccessor; @@ -3513,21 +3288,21 @@ class Triangulation : public TriaDimensionInfo, friend class TriaRawIterator<3,CellAccessor<3> >; friend class DoFHandler; + friend class hpDoFHandler; friend class MGDoFHandler; }; - /* -------------- declaration of explicit specializations ------------- */ /// @if NoDoc -template <> TriaDimensionInfo<1>::cell_iterator Triangulation<1>::begin (const unsigned int level) const; -template <> TriaDimensionInfo<1>::raw_cell_iterator Triangulation<1>::end () const; -template <> TriaDimensionInfo<2>::cell_iterator Triangulation<2>::begin (const unsigned int level) const; -template <> TriaDimensionInfo<2>::raw_cell_iterator Triangulation<2>::end () const; -template <> TriaDimensionInfo<3>::cell_iterator Triangulation<3>::begin (const unsigned int level) const; -template <> TriaDimensionInfo<3>::raw_cell_iterator Triangulation<3>::end () const; +template <> Triangulation<1>::cell_iterator Triangulation<1>::begin (const unsigned int level) const; +template <> Triangulation<1>::raw_cell_iterator Triangulation<1>::end () const; +template <> Triangulation<2>::cell_iterator Triangulation<2>::begin (const unsigned int level) const; +template <> Triangulation<2>::raw_cell_iterator Triangulation<2>::end () const; +template <> Triangulation<3>::cell_iterator Triangulation<3>::begin (const unsigned int level) const; +template <> Triangulation<3>::raw_cell_iterator Triangulation<3>::end () const; template <> void Triangulation<1>::create_triangulation (const std::vector > &v, const std::vector > &cells, const SubCellData &subcelldata); @@ -3557,90 +3332,90 @@ template <> void Triangulation<2>::save_user_flags_hex (std::ostream &) const; template <> void Triangulation<2>::save_user_flags_hex (std::vector &) const; template <> void Triangulation<2>::load_user_flags_hex (std::istream &); template <> void Triangulation<2>::load_user_flags_hex (const std::vector &); -template <> TriaDimensionInfo<1>::raw_cell_iterator Triangulation<1>::begin_raw (const unsigned int level) const; -template <> TriaDimensionInfo<1>::active_cell_iterator Triangulation<1>::begin_active (const unsigned int level) const; -template <> TriaDimensionInfo<1>::raw_cell_iterator Triangulation<1>::last_raw () const; -template <> TriaDimensionInfo<1>::raw_cell_iterator Triangulation<1>::last_raw (const unsigned int level) const; -template <> TriaDimensionInfo<1>::cell_iterator Triangulation<1>::last () const; -template <> TriaDimensionInfo<1>::cell_iterator Triangulation<1>::last (const unsigned int level) const; -template <> TriaDimensionInfo<1>::active_cell_iterator Triangulation<1>::last_active () const; -template <> TriaDimensionInfo<1>::active_cell_iterator Triangulation<1>::last_active (const unsigned int level) const; -template <> TriaDimensionInfo<1>::raw_face_iterator Triangulation<1>::begin_raw_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::face_iterator Triangulation<1>::begin_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_face_iterator Triangulation<1>::begin_active_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_face_iterator Triangulation<1>::end_face () const; -template <> TriaDimensionInfo<1>::raw_face_iterator Triangulation<1>::last_raw_face () const; -template <> TriaDimensionInfo<1>::raw_face_iterator Triangulation<1>::last_raw_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::face_iterator Triangulation<1>::last_face () const; -template <> TriaDimensionInfo<1>::face_iterator Triangulation<1>::last_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_face_iterator Triangulation<1>::last_active_face () const; -template <> TriaDimensionInfo<1>::active_face_iterator Triangulation<1>::last_active_face (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_quad_iterator Triangulation<1>::begin_raw_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::quad_iterator Triangulation<1>::begin_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_quad_iterator Triangulation<1>::begin_active_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_quad_iterator Triangulation<1>::end_quad () const; -template <> TriaDimensionInfo<1>::raw_quad_iterator Triangulation<1>::last_raw_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_quad_iterator Triangulation<1>::last_raw_quad () const; -template <> TriaDimensionInfo<1>::quad_iterator Triangulation<1>::last_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::quad_iterator Triangulation<1>::last_quad () const; -template <> TriaDimensionInfo<1>::active_quad_iterator Triangulation<1>::last_active_quad (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_quad_iterator Triangulation<1>::last_active_quad () const; -template <> TriaDimensionInfo<1>::raw_hex_iterator Triangulation<1>::begin_raw_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::hex_iterator Triangulation<1>::begin_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_hex_iterator Triangulation<1>::begin_active_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_hex_iterator Triangulation<1>::end_hex () const; -template <> TriaDimensionInfo<1>::raw_hex_iterator Triangulation<1>::last_raw_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::raw_hex_iterator Triangulation<1>::last_raw_hex () const; -template <> TriaDimensionInfo<1>::hex_iterator Triangulation<1>::last_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::hex_iterator Triangulation<1>::last_hex () const; -template <> TriaDimensionInfo<1>::active_hex_iterator Triangulation<1>::last_active_hex (const unsigned int) const; -template <> TriaDimensionInfo<1>::active_hex_iterator Triangulation<1>::last_active_hex () const; -template <> TriaDimensionInfo<2>::raw_cell_iterator Triangulation<2>::begin_raw (const unsigned int level) const; -template <> TriaDimensionInfo<2>::active_cell_iterator Triangulation<2>::begin_active (const unsigned int level) const; -template <> TriaDimensionInfo<2>::raw_cell_iterator Triangulation<2>::last_raw () const; -template <> TriaDimensionInfo<2>::raw_cell_iterator Triangulation<2>::last_raw (const unsigned int level) const; -template <> TriaDimensionInfo<2>::cell_iterator Triangulation<2>::last () const; -template <> TriaDimensionInfo<2>::cell_iterator Triangulation<2>::last (const unsigned int level) const; -template <> TriaDimensionInfo<2>::active_cell_iterator Triangulation<2>::last_active () const; -template <> TriaDimensionInfo<2>::active_cell_iterator Triangulation<2>::last_active (const unsigned int level) const; -template <> TriaDimensionInfo<2>::raw_face_iterator Triangulation<2>::begin_raw_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::face_iterator Triangulation<2>::begin_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::active_face_iterator Triangulation<2>::begin_active_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::raw_face_iterator Triangulation<2>::end_face () const; -template <> TriaDimensionInfo<2>::raw_face_iterator Triangulation<2>::last_raw_face () const; -template <> TriaDimensionInfo<2>::raw_face_iterator Triangulation<2>::last_raw_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::face_iterator Triangulation<2>::last_face () const; -template <> TriaDimensionInfo<2>::face_iterator Triangulation<2>::last_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::active_face_iterator Triangulation<2>::last_active_face () const; -template <> TriaDimensionInfo<2>::active_face_iterator Triangulation<2>::last_active_face (const unsigned int level) const; -template <> TriaDimensionInfo<2>::raw_hex_iterator Triangulation<2>::begin_raw_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::hex_iterator Triangulation<2>::begin_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::active_hex_iterator Triangulation<2>::begin_active_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::raw_hex_iterator Triangulation<2>::end_hex () const; -template <> TriaDimensionInfo<2>::raw_hex_iterator Triangulation<2>::last_raw_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::raw_hex_iterator Triangulation<2>::last_raw_hex () const; -template <> TriaDimensionInfo<2>::hex_iterator Triangulation<2>::last_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::hex_iterator Triangulation<2>::last_hex () const; -template <> TriaDimensionInfo<2>::active_hex_iterator Triangulation<2>::last_active_hex (const unsigned int) const; -template <> TriaDimensionInfo<2>::active_hex_iterator Triangulation<2>::last_active_hex () const; -template <> TriaDimensionInfo<3>::raw_cell_iterator Triangulation<3>::begin_raw (const unsigned int level) const; -template <> TriaDimensionInfo<3>::active_cell_iterator Triangulation<3>::begin_active (const unsigned int level) const; -template <> TriaDimensionInfo<3>::raw_cell_iterator Triangulation<3>::last_raw () const; -template <> TriaDimensionInfo<3>::raw_cell_iterator Triangulation<3>::last_raw (const unsigned int level) const; -template <> TriaDimensionInfo<3>::cell_iterator Triangulation<3>::last () const; -template <> TriaDimensionInfo<3>::cell_iterator Triangulation<3>::last (const unsigned int level) const; -template <> TriaDimensionInfo<3>::active_cell_iterator Triangulation<3>::last_active () const; -template <> TriaDimensionInfo<3>::active_cell_iterator Triangulation<3>::last_active (const unsigned int level) const; -template <> TriaDimensionInfo<3>::raw_face_iterator Triangulation<3>::begin_raw_face (const unsigned int level) const; -template <> TriaDimensionInfo<3>::face_iterator Triangulation<3>::begin_face (const unsigned int level) const; -template <> TriaDimensionInfo<3>::active_face_iterator Triangulation<3>::begin_active_face (const unsigned int level) const; -template <> TriaDimensionInfo<3>::raw_face_iterator Triangulation<3>::end_face () const; -template <> TriaDimensionInfo<3>::raw_face_iterator Triangulation<3>::last_raw_face () const; -template <> TriaDimensionInfo<3>::raw_face_iterator Triangulation<3>::last_raw_face (const unsigned int level) const; -template <> TriaDimensionInfo<3>::face_iterator Triangulation<3>::last_face () const; -template <> TriaDimensionInfo<3>::face_iterator Triangulation<3>::last_face (const unsigned int level) const; -template <> TriaDimensionInfo<3>::active_face_iterator Triangulation<3>::last_active_face () const; -template <> TriaDimensionInfo<3>::active_face_iterator Triangulation<3>::last_active_face (const unsigned int level) const; +template <> Triangulation<1>::raw_cell_iterator Triangulation<1>::begin_raw (const unsigned int level) const; +template <> Triangulation<1>::active_cell_iterator Triangulation<1>::begin_active (const unsigned int level) const; +template <> Triangulation<1>::raw_cell_iterator Triangulation<1>::last_raw () const; +template <> Triangulation<1>::raw_cell_iterator Triangulation<1>::last_raw (const unsigned int level) const; +template <> Triangulation<1>::cell_iterator Triangulation<1>::last () const; +template <> Triangulation<1>::cell_iterator Triangulation<1>::last (const unsigned int level) const; +template <> Triangulation<1>::active_cell_iterator Triangulation<1>::last_active () const; +template <> Triangulation<1>::active_cell_iterator Triangulation<1>::last_active (const unsigned int level) const; +template <> Triangulation<1>::raw_face_iterator Triangulation<1>::begin_raw_face (const unsigned int) const; +template <> Triangulation<1>::face_iterator Triangulation<1>::begin_face (const unsigned int) const; +template <> Triangulation<1>::active_face_iterator Triangulation<1>::begin_active_face (const unsigned int) const; +template <> Triangulation<1>::raw_face_iterator Triangulation<1>::end_face () const; +template <> Triangulation<1>::raw_face_iterator Triangulation<1>::last_raw_face () const; +template <> Triangulation<1>::raw_face_iterator Triangulation<1>::last_raw_face (const unsigned int) const; +template <> Triangulation<1>::face_iterator Triangulation<1>::last_face () const; +template <> Triangulation<1>::face_iterator Triangulation<1>::last_face (const unsigned int) const; +template <> Triangulation<1>::active_face_iterator Triangulation<1>::last_active_face () const; +template <> Triangulation<1>::active_face_iterator Triangulation<1>::last_active_face (const unsigned int) const; +template <> Triangulation<1>::raw_quad_iterator Triangulation<1>::begin_raw_quad (const unsigned int) const; +template <> Triangulation<1>::quad_iterator Triangulation<1>::begin_quad (const unsigned int) const; +template <> Triangulation<1>::active_quad_iterator Triangulation<1>::begin_active_quad (const unsigned int) const; +template <> Triangulation<1>::raw_quad_iterator Triangulation<1>::end_quad () const; +template <> Triangulation<1>::raw_quad_iterator Triangulation<1>::last_raw_quad (const unsigned int) const; +template <> Triangulation<1>::raw_quad_iterator Triangulation<1>::last_raw_quad () const; +template <> Triangulation<1>::quad_iterator Triangulation<1>::last_quad (const unsigned int) const; +template <> Triangulation<1>::quad_iterator Triangulation<1>::last_quad () const; +template <> Triangulation<1>::active_quad_iterator Triangulation<1>::last_active_quad (const unsigned int) const; +template <> Triangulation<1>::active_quad_iterator Triangulation<1>::last_active_quad () const; +template <> Triangulation<1>::raw_hex_iterator Triangulation<1>::begin_raw_hex (const unsigned int) const; +template <> Triangulation<1>::hex_iterator Triangulation<1>::begin_hex (const unsigned int) const; +template <> Triangulation<1>::active_hex_iterator Triangulation<1>::begin_active_hex (const unsigned int) const; +template <> Triangulation<1>::raw_hex_iterator Triangulation<1>::end_hex () const; +template <> Triangulation<1>::raw_hex_iterator Triangulation<1>::last_raw_hex (const unsigned int) const; +template <> Triangulation<1>::raw_hex_iterator Triangulation<1>::last_raw_hex () const; +template <> Triangulation<1>::hex_iterator Triangulation<1>::last_hex (const unsigned int) const; +template <> Triangulation<1>::hex_iterator Triangulation<1>::last_hex () const; +template <> Triangulation<1>::active_hex_iterator Triangulation<1>::last_active_hex (const unsigned int) const; +template <> Triangulation<1>::active_hex_iterator Triangulation<1>::last_active_hex () const; +template <> Triangulation<2>::raw_cell_iterator Triangulation<2>::begin_raw (const unsigned int level) const; +template <> Triangulation<2>::active_cell_iterator Triangulation<2>::begin_active (const unsigned int level) const; +template <> Triangulation<2>::raw_cell_iterator Triangulation<2>::last_raw () const; +template <> Triangulation<2>::raw_cell_iterator Triangulation<2>::last_raw (const unsigned int level) const; +template <> Triangulation<2>::cell_iterator Triangulation<2>::last () const; +template <> Triangulation<2>::cell_iterator Triangulation<2>::last (const unsigned int level) const; +template <> Triangulation<2>::active_cell_iterator Triangulation<2>::last_active () const; +template <> Triangulation<2>::active_cell_iterator Triangulation<2>::last_active (const unsigned int level) const; +template <> Triangulation<2>::raw_face_iterator Triangulation<2>::begin_raw_face (const unsigned int level) const; +template <> Triangulation<2>::face_iterator Triangulation<2>::begin_face (const unsigned int level) const; +template <> Triangulation<2>::active_face_iterator Triangulation<2>::begin_active_face (const unsigned int level) const; +template <> Triangulation<2>::raw_face_iterator Triangulation<2>::end_face () const; +template <> Triangulation<2>::raw_face_iterator Triangulation<2>::last_raw_face () const; +template <> Triangulation<2>::raw_face_iterator Triangulation<2>::last_raw_face (const unsigned int level) const; +template <> Triangulation<2>::face_iterator Triangulation<2>::last_face () const; +template <> Triangulation<2>::face_iterator Triangulation<2>::last_face (const unsigned int level) const; +template <> Triangulation<2>::active_face_iterator Triangulation<2>::last_active_face () const; +template <> Triangulation<2>::active_face_iterator Triangulation<2>::last_active_face (const unsigned int level) const; +template <> Triangulation<2>::raw_hex_iterator Triangulation<2>::begin_raw_hex (const unsigned int) const; +template <> Triangulation<2>::hex_iterator Triangulation<2>::begin_hex (const unsigned int) const; +template <> Triangulation<2>::active_hex_iterator Triangulation<2>::begin_active_hex (const unsigned int) const; +template <> Triangulation<2>::raw_hex_iterator Triangulation<2>::end_hex () const; +template <> Triangulation<2>::raw_hex_iterator Triangulation<2>::last_raw_hex (const unsigned int) const; +template <> Triangulation<2>::raw_hex_iterator Triangulation<2>::last_raw_hex () const; +template <> Triangulation<2>::hex_iterator Triangulation<2>::last_hex (const unsigned int) const; +template <> Triangulation<2>::hex_iterator Triangulation<2>::last_hex () const; +template <> Triangulation<2>::active_hex_iterator Triangulation<2>::last_active_hex (const unsigned int) const; +template <> Triangulation<2>::active_hex_iterator Triangulation<2>::last_active_hex () const; +template <> Triangulation<3>::raw_cell_iterator Triangulation<3>::begin_raw (const unsigned int level) const; +template <> Triangulation<3>::active_cell_iterator Triangulation<3>::begin_active (const unsigned int level) const; +template <> Triangulation<3>::raw_cell_iterator Triangulation<3>::last_raw () const; +template <> Triangulation<3>::raw_cell_iterator Triangulation<3>::last_raw (const unsigned int level) const; +template <> Triangulation<3>::cell_iterator Triangulation<3>::last () const; +template <> Triangulation<3>::cell_iterator Triangulation<3>::last (const unsigned int level) const; +template <> Triangulation<3>::active_cell_iterator Triangulation<3>::last_active () const; +template <> Triangulation<3>::active_cell_iterator Triangulation<3>::last_active (const unsigned int level) const; +template <> Triangulation<3>::raw_face_iterator Triangulation<3>::begin_raw_face (const unsigned int level) const; +template <> Triangulation<3>::face_iterator Triangulation<3>::begin_face (const unsigned int level) const; +template <> Triangulation<3>::active_face_iterator Triangulation<3>::begin_active_face (const unsigned int level) const; +template <> Triangulation<3>::raw_face_iterator Triangulation<3>::end_face () const; +template <> Triangulation<3>::raw_face_iterator Triangulation<3>::last_raw_face () const; +template <> Triangulation<3>::raw_face_iterator Triangulation<3>::last_raw_face (const unsigned int level) const; +template <> Triangulation<3>::face_iterator Triangulation<3>::last_face () const; +template <> Triangulation<3>::face_iterator Triangulation<3>::last_face (const unsigned int level) const; +template <> Triangulation<3>::active_face_iterator Triangulation<3>::last_active_face () const; +template <> Triangulation<3>::active_face_iterator Triangulation<3>::last_active_face (const unsigned int level) const; template <> unsigned int Triangulation<1>::n_active_cells (const unsigned int level) const; template <> unsigned int Triangulation<1>::n_cells (const unsigned int level) const; template <> unsigned int Triangulation<2>::n_cells (const unsigned int level) const; diff --git a/deal.II/deal.II/include/grid/tria_iterator.h b/deal.II/deal.II/include/grid/tria_iterator.h index acf1ec2c1c..ac7c0e7e7f 100644 --- a/deal.II/deal.II/include/grid/tria_iterator.h +++ b/deal.II/deal.II/include/grid/tria_iterator.h @@ -175,6 +175,50 @@ template class Triangulation; * in the documentation of TriaAccessor, where the iterator states are * checked and implemented. * + * + * @section Past-the-end iterators + * + * There is a representation of past-the-end-pointers, denoted by special + * values of the member variables @p present_level and @p present_index: + * If present_level>=0 and present_index>=0, then the object is valid + * (there is no check whether the triangulation really has that + * many levels or that many cells on the present level when we investigate + * the state of an iterator; however, in many places where an iterator is + * dereferenced we make this check); + * if present_level==-1 and present_index==-1, then the iterator points + * past the end; in all other cases, the iterator is considered invalid. + * You can check this by calling the state() function. + * + * An iterator is also invalid, if the pointer pointing to the Triangulation + * object is invalid or zero. + * + * Finally, an iterator is invalid, if the element pointed to by + * @p present_level and @p present_index is not used, i.e. if the @p used + * flag is set to false. + * + * The last two checks are not made in state() since both cases should only + * occur upon unitialized construction through @p memcpy and the like (the + * parent triangulation can only be set upon construction). If + * an iterator is constructed empty through the empty constructor, + * present_level==-2 and present_index==-2. Thus, the iterator is + * invalid anyway, regardless of the state of the triangulation pointer + * and the state of the element pointed to. + * + * Past-the-end iterators may also be used to compare an iterator with the + * @em{before-the-start} value, when running backwards. There is no + * distiction between the iterators pointing past the two ends of a vector. + * + * By defining only one value to be past-the-end and making all other values + * invalid provides a second track of security: if we should have forgotten + * a check in the library when an iterator is incremented or decremented, + * we automatically convert the iterator from the allowed state "past-the-end" + * to the disallowed state "invalid" which increases the chance that somehwen + * earlier than for past-the-end iterators an exception is raised. + * + * @ref Triangulation + * @ref TriaDimensionInfo<1> + * @ref TriaDimensionInfo<2> + * @ref TriaDimensionInfo<3> * @author Wolfgang Bangerth, 1998 * @author documentation update Guido Kanschat, 2004 */ diff --git a/deal.II/deal.II/include/grid/tria_iterator_selector.h b/deal.II/deal.II/include/grid/tria_iterator_selector.h new file mode 100644 index 0000000000..ca1e7614d6 --- /dev/null +++ b/deal.II/deal.II/include/grid/tria_iterator_selector.h @@ -0,0 +1,207 @@ +//---------------------------- tria_iterator_selector.h --------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------- tria_iterator_selector.h --------------------------- +#ifndef __deal2__tria_iterator_selector_h +#define __deal2__tria_iterator_selector_h + + +template class CellAccessor; +template class TriaAccessor; +template class TriaObjectAccessor; +template class TriaObjectAccessor<0, dim>; +template class TriaObjectAccessor<1, dim>; +template class TriaObjectAccessor<2, dim>; +template class TriaObjectAccessor<3, dim>; +template class TriaRawIterator; +template class TriaIterator; +template class TriaActiveIterator; + + +namespace internal +{ + +/** + * This class implements some types which differ between the + * dimensions. Declare it to have a template parameter, but do not + * actually declare anything concrete apart from the other classes + * which are explicitly instantiated ones with the same name. + * + * @author Wolfgang Bangerth, 1998 + */ + template + struct TriaIteratorSelector + { + }; + + + +/** + * This class implements some types which differ between the dimensions. + * These are the declararions for the 1D case only. + * + * A @p line_iterator is typdef'd to an iterator operating on the + * @p lines member variable of a Triangulation<1> object. An + * @p active_line_iterator only operates on the active lines. + * @p raw_line_iterator objects operate on all lines, used or not. + * + * Since we are in one dimension, the following identities are declared: + * @verbatim + * typedef raw_line_iterator raw_cell_iterator; + * typedef line_iterator cell_iterator; + * typedef active_line_iterator active_cell_iterator; + * @endverbatim + * + * To enable the declaration of @p begin_quad and the like in + * Triangulation<1>, the @p quad_iterators are declared as + * void *. Thus these types exist, but are useless and will + * certainly make any involuntary use visible. The same holds + * for hexahedron iterators. + * + * The same applies for the @p face_iterator types, since lines + * have no substructures apart from vertices, which are handled in + * a different way, however. + * + * @author Wolfgang Bangerth, 1998 + */ + template <> + struct TriaIteratorSelector<1> + { + typedef TriaRawIterator<1,CellAccessor<1> > raw_line_iterator; + typedef TriaIterator<1,CellAccessor<1> > line_iterator; + typedef TriaActiveIterator<1,CellAccessor<1> > active_line_iterator; + + typedef void * raw_quad_iterator; + typedef void * quad_iterator; + typedef void * active_quad_iterator; + + typedef void * raw_hex_iterator; + typedef void * hex_iterator; + typedef void * active_hex_iterator; + + typedef raw_line_iterator raw_cell_iterator; + typedef line_iterator cell_iterator; + typedef active_line_iterator active_cell_iterator; + + typedef void * raw_face_iterator; + typedef void * face_iterator; + typedef void * active_face_iterator; + }; + + + +/** + * This class implements some types which differ between the dimensions. + * These are the declararions for the 2D case only. + * + * A @p line_iterator is typdef'd to an iterator operating on the + * @p lines member variable of a Triangulation<2> object. An + * @p active_line_iterator only operates on the active lines. + * @p raw_line_iterator objects operate on all lines, used or not. + * Using @p active_line_iterators may not be particularly in 2D useful since it + * only operates on unrefined lines. However, also refined lines may bound + * unrefined cells if the neighboring cell is refined once more than the + * present one. + * + * Similarly to line iterators, @p quad_iterator, @p raw_quad_iterator and + * @p active_quad_iterator are declared. + * + * To enable the declaration of @p begin_hex and the like in + * Triangulation<[12]>, the @p hex_iterators are declared as + * void *. Thus these types exist, but are useless and will + * certainly make any involuntary use visible. + * + * Since we are in two dimension, the following identities are declared: + * @verbatim + * typedef raw_quad_iterator raw_cell_iterator; + * typedef quad_iterator cell_iterator; + * typedef active_quad_iterator active_cell_iterator; + * + * typedef raw_line_iterator raw_face_iterator; + * typedef line_iterator face_iterator; + * typedef active_line_iterator active_face_iterator; + * @endverbatim + * + * @author Wolfgang Bangerth, 1998 + */ + template <> + struct TriaIteratorSelector<2> + { + typedef TriaRawIterator<2,TriaObjectAccessor<1, 2> > raw_line_iterator; + typedef TriaIterator<2,TriaObjectAccessor<1, 2> > line_iterator; + typedef TriaActiveIterator<2,TriaObjectAccessor<1, 2> > active_line_iterator; + + typedef TriaRawIterator<2,CellAccessor<2> > raw_quad_iterator; + typedef TriaIterator<2,CellAccessor<2> > quad_iterator; + typedef TriaActiveIterator<2,CellAccessor<2> > active_quad_iterator; + + typedef void * raw_hex_iterator; + typedef void * hex_iterator; + typedef void * active_hex_iterator; + + typedef raw_quad_iterator raw_cell_iterator; + typedef quad_iterator cell_iterator; + typedef active_quad_iterator active_cell_iterator; + + typedef raw_line_iterator raw_face_iterator; + typedef line_iterator face_iterator; + typedef active_line_iterator active_face_iterator; + }; + + + +/** + * This class implements some types which differ between the dimensions. + * These are the declararions for the 3D case only. + * + * For the declarations of the data types, more or less the same holds + * as for lower dimensions (see TriaIteratorSelector<[12]>). The + * dimension specific data types are here, since we are in three dimensions: + * @verbatim + * typedef raw_hex_iterator raw_cell_iterator; + * typedef hex_iterator cell_iterator; + * typedef active_hex_iterator active_cell_iterator; + * + * typedef raw_quad_iterator raw_face_iterator; + * typedef quad_iterator face_iterator; + * typedef active_quad_iterator active_face_iterator; + * @endverbatim + * + * @author Wolfgang Bangerth, 1998 + */ + template <> + struct TriaIteratorSelector<3> + { + typedef TriaRawIterator<3,TriaObjectAccessor<1, 3> > raw_line_iterator; + typedef TriaIterator<3,TriaObjectAccessor<1, 3> > line_iterator; + typedef TriaActiveIterator<3,TriaObjectAccessor<1, 3> > active_line_iterator; + + typedef TriaRawIterator<3,TriaObjectAccessor<2, 3> > raw_quad_iterator; + typedef TriaIterator<3,TriaObjectAccessor<2, 3> > quad_iterator; + typedef TriaActiveIterator<3,TriaObjectAccessor<2, 3> > active_quad_iterator; + + typedef TriaRawIterator<3,CellAccessor<3> > raw_hex_iterator; + typedef TriaIterator<3,CellAccessor<3> > hex_iterator; + typedef TriaActiveIterator<3,CellAccessor<3> > active_hex_iterator; + + typedef raw_hex_iterator raw_cell_iterator; + typedef hex_iterator cell_iterator; + typedef active_hex_iterator active_cell_iterator; + + typedef raw_quad_iterator raw_face_iterator; + typedef quad_iterator face_iterator; + typedef active_quad_iterator active_face_iterator; + }; + + +} + +#endif // __deal2__tria_iterator_selector_h diff --git a/deal.II/deal.II/include/grid/tria_levels.h b/deal.II/deal.II/include/grid/tria_levels.h index f5c4694670..531383dd83 100644 --- a/deal.II/deal.II/include/grid/tria_levels.h +++ b/deal.II/deal.II/include/grid/tria_levels.h @@ -427,7 +427,7 @@ class TriangulationLevel<2> : public TriangulationLevel<1> /** * Pointer which is not used by the - * library but may be accessed an set + * library but may be accessed and set * by the user to handle data local to * a line/quad/etc. */ diff --git a/deal.II/deal.II/source/grid/tria.cc b/deal.II/deal.II/source/grid/tria.cc index 08e0580dfb..9d48446535 100644 --- a/deal.II/deal.II/source/grid/tria.cc +++ b/deal.II/deal.II/source/grid/tria.cc @@ -137,14 +137,14 @@ Triangulation::get_boundary (const unsigned int number) const #if deal_II_dimension == 1 template <> -TriaDimensionInfo<1>::cell_iterator +Triangulation<1>::cell_iterator Triangulation<1>::begin (const unsigned int level) const { return begin_line (level); } template <> -TriaDimensionInfo<1>::raw_cell_iterator +Triangulation<1>::raw_cell_iterator Triangulation<1>::end () const { return end_line (); } @@ -155,14 +155,14 @@ Triangulation<1>::end () const { #if deal_II_dimension == 2 template <> -TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::cell_iterator Triangulation<2>::begin (const unsigned int level) const { return begin_quad (level); } template <> -TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::raw_cell_iterator Triangulation<2>::end () const { return end_quad (); } @@ -173,14 +173,14 @@ Triangulation<2>::end () const { #if deal_II_dimension == 3 template <> -TriaDimensionInfo<3>::cell_iterator +Triangulation<3>::cell_iterator Triangulation<3>::begin (const unsigned int level) const { return begin_hex (level); } template <> -TriaDimensionInfo<3>::raw_cell_iterator +Triangulation<3>::raw_cell_iterator Triangulation<3>::end () const { return end_hex (); } @@ -2743,7 +2743,7 @@ void Triangulation::load_user_pointers_hex (const std::vector &v) #if deal_II_dimension == 1 template <> -TriaDimensionInfo<1>::raw_cell_iterator +Triangulation<1>::raw_cell_iterator Triangulation<1>::begin_raw (const unsigned int level) const { return begin_raw_line (level); @@ -2752,7 +2752,7 @@ Triangulation<1>::begin_raw (const unsigned int level) const template <> -TriaDimensionInfo<1>::active_cell_iterator +Triangulation<1>::active_cell_iterator Triangulation<1>::begin_active (const unsigned int level) const { return begin_active_line (level); @@ -2761,7 +2761,7 @@ Triangulation<1>::begin_active (const unsigned int level) const template <> -TriaDimensionInfo<1>::raw_cell_iterator +Triangulation<1>::raw_cell_iterator Triangulation<1>::last_raw () const { return last_raw_line (); @@ -2770,7 +2770,7 @@ Triangulation<1>::last_raw () const template <> -TriaDimensionInfo<1>::raw_cell_iterator +Triangulation<1>::raw_cell_iterator Triangulation<1>::last_raw (const unsigned int level) const { return last_raw_line (level); @@ -2779,7 +2779,7 @@ Triangulation<1>::last_raw (const unsigned int level) const template <> -TriaDimensionInfo<1>::cell_iterator +Triangulation<1>::cell_iterator Triangulation<1>::last () const { return last_line (); @@ -2788,7 +2788,7 @@ Triangulation<1>::last () const template <> -TriaDimensionInfo<1>::cell_iterator +Triangulation<1>::cell_iterator Triangulation<1>::last (const unsigned int level) const { return last_line (level); @@ -2797,7 +2797,7 @@ Triangulation<1>::last (const unsigned int level) const template <> -TriaDimensionInfo<1>::active_cell_iterator +Triangulation<1>::active_cell_iterator Triangulation<1>::last_active () const { return last_active_line (); @@ -2806,7 +2806,7 @@ Triangulation<1>::last_active () const template <> -TriaDimensionInfo<1>::active_cell_iterator +Triangulation<1>::active_cell_iterator Triangulation<1>::last_active (const unsigned int level) const { return last_active_line (level); @@ -2815,7 +2815,7 @@ Triangulation<1>::last_active (const unsigned int level) const template <> -TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::raw_face_iterator Triangulation<1>::begin_raw_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2825,7 +2825,7 @@ Triangulation<1>::begin_raw_face (const unsigned int) const template <> -TriaDimensionInfo<1>::face_iterator +Triangulation<1>::face_iterator Triangulation<1>::begin_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2835,7 +2835,7 @@ Triangulation<1>::begin_face (const unsigned int) const template <> -TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::active_face_iterator Triangulation<1>::begin_active_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2845,7 +2845,7 @@ Triangulation<1>::begin_active_face (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::raw_face_iterator Triangulation<1>::end_face () const { Assert (false, ExcFunctionNotUseful()); @@ -2855,7 +2855,7 @@ Triangulation<1>::end_face () const template <> -TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::raw_face_iterator Triangulation<1>::last_raw_face () const { Assert (false, ExcFunctionNotUseful()); @@ -2865,7 +2865,7 @@ Triangulation<1>::last_raw_face () const template <> -TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::raw_face_iterator Triangulation<1>::last_raw_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2875,7 +2875,7 @@ Triangulation<1>::last_raw_face (const unsigned int) const template <> -TriaDimensionInfo<1>::face_iterator +Triangulation<1>::face_iterator Triangulation<1>::last_face () const { Assert (false, ExcFunctionNotUseful()); @@ -2885,7 +2885,7 @@ Triangulation<1>::last_face () const template <> -TriaDimensionInfo<1>::face_iterator +Triangulation<1>::face_iterator Triangulation<1>::last_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2895,7 +2895,7 @@ Triangulation<1>::last_face (const unsigned int) const template <> -TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::active_face_iterator Triangulation<1>::last_active_face () const { Assert (false, ExcFunctionNotUseful()); @@ -2905,7 +2905,7 @@ Triangulation<1>::last_active_face () const template <> -TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::active_face_iterator Triangulation<1>::last_active_face (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2915,7 +2915,7 @@ Triangulation<1>::last_active_face (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::raw_quad_iterator Triangulation<1>::begin_raw_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2925,7 +2925,7 @@ Triangulation<1>::begin_raw_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::quad_iterator Triangulation<1>::begin_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2935,7 +2935,7 @@ Triangulation<1>::begin_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::active_quad_iterator Triangulation<1>::begin_active_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2945,7 +2945,7 @@ Triangulation<1>::begin_active_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::raw_quad_iterator Triangulation<1>::end_quad () const { Assert (false, ExcFunctionNotUseful()); @@ -2955,7 +2955,7 @@ Triangulation<1>::end_quad () const template <> -TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::raw_quad_iterator Triangulation<1>::last_raw_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2965,7 +2965,7 @@ Triangulation<1>::last_raw_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::raw_quad_iterator Triangulation<1>::last_raw_quad () const { Assert (false, ExcFunctionNotUseful()); @@ -2975,7 +2975,7 @@ Triangulation<1>::last_raw_quad () const template <> -TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::quad_iterator Triangulation<1>::last_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -2985,7 +2985,7 @@ Triangulation<1>::last_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::quad_iterator Triangulation<1>::last_quad () const { Assert (false, ExcFunctionNotUseful()); @@ -2995,7 +2995,7 @@ Triangulation<1>::last_quad () const template <> -TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::active_quad_iterator Triangulation<1>::last_active_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3005,7 +3005,7 @@ Triangulation<1>::last_active_quad (const unsigned int) const template <> -TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::active_quad_iterator Triangulation<1>::last_active_quad () const { Assert (false, ExcFunctionNotUseful()); @@ -3015,7 +3015,7 @@ Triangulation<1>::last_active_quad () const template <> -TriaDimensionInfo<1>::raw_hex_iterator +Triangulation<1>::raw_hex_iterator Triangulation<1>::begin_raw_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3025,7 +3025,7 @@ Triangulation<1>::begin_raw_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::hex_iterator +Triangulation<1>::hex_iterator Triangulation<1>::begin_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3035,7 +3035,7 @@ Triangulation<1>::begin_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::active_hex_iterator +Triangulation<1>::active_hex_iterator Triangulation<1>::begin_active_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3045,7 +3045,7 @@ Triangulation<1>::begin_active_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_hex_iterator +Triangulation<1>::raw_hex_iterator Triangulation<1>::end_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3055,7 +3055,7 @@ Triangulation<1>::end_hex () const template <> -TriaDimensionInfo<1>::raw_hex_iterator +Triangulation<1>::raw_hex_iterator Triangulation<1>::last_raw_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3065,7 +3065,7 @@ Triangulation<1>::last_raw_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::raw_hex_iterator +Triangulation<1>::raw_hex_iterator Triangulation<1>::last_raw_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3075,7 +3075,7 @@ Triangulation<1>::last_raw_hex () const template <> -TriaDimensionInfo<1>::hex_iterator +Triangulation<1>::hex_iterator Triangulation<1>::last_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3085,7 +3085,7 @@ Triangulation<1>::last_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::hex_iterator +Triangulation<1>::hex_iterator Triangulation<1>::last_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3095,7 +3095,7 @@ Triangulation<1>::last_hex () const template <> -TriaDimensionInfo<1>::active_hex_iterator +Triangulation<1>::active_hex_iterator Triangulation<1>::last_active_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3105,7 +3105,7 @@ Triangulation<1>::last_active_hex (const unsigned int) const template <> -TriaDimensionInfo<1>::active_hex_iterator +Triangulation<1>::active_hex_iterator Triangulation<1>::last_active_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3118,7 +3118,7 @@ Triangulation<1>::last_active_hex () const #if deal_II_dimension == 2 template <> -TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::raw_cell_iterator Triangulation<2>::begin_raw (const unsigned int level) const { return begin_raw_quad (level); @@ -3127,7 +3127,7 @@ Triangulation<2>::begin_raw (const unsigned int level) const template <> -TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::active_cell_iterator Triangulation<2>::begin_active (const unsigned int level) const { return begin_active_quad (level); @@ -3136,7 +3136,7 @@ Triangulation<2>::begin_active (const unsigned int level) const template <> -TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::raw_cell_iterator Triangulation<2>::last_raw () const { return last_raw_quad (); @@ -3145,7 +3145,7 @@ Triangulation<2>::last_raw () const template <> -TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::raw_cell_iterator Triangulation<2>::last_raw (const unsigned int level) const { return last_raw_quad (level); @@ -3154,7 +3154,7 @@ Triangulation<2>::last_raw (const unsigned int level) const template <> -TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::cell_iterator Triangulation<2>::last () const { return last_quad (); @@ -3163,7 +3163,7 @@ Triangulation<2>::last () const template <> -TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::cell_iterator Triangulation<2>::last (const unsigned int level) const { return last_quad (level); @@ -3172,7 +3172,7 @@ Triangulation<2>::last (const unsigned int level) const template <> -TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::active_cell_iterator Triangulation<2>::last_active () const { return last_active_quad (); @@ -3181,7 +3181,7 @@ Triangulation<2>::last_active () const template <> -TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::active_cell_iterator Triangulation<2>::last_active (const unsigned int level) const { return last_active_quad (level); @@ -3190,7 +3190,7 @@ Triangulation<2>::last_active (const unsigned int level) const template <> -TriaDimensionInfo<2>::raw_face_iterator +Triangulation<2>::raw_face_iterator Triangulation<2>::begin_raw_face (const unsigned int level) const { return begin_raw_line (level); @@ -3199,7 +3199,7 @@ Triangulation<2>::begin_raw_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::face_iterator +Triangulation<2>::face_iterator Triangulation<2>::begin_face (const unsigned int level) const { return begin_line (level); @@ -3208,7 +3208,7 @@ Triangulation<2>::begin_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::active_face_iterator +Triangulation<2>::active_face_iterator Triangulation<2>::begin_active_face (const unsigned int level) const { return begin_active_line (level); @@ -3217,7 +3217,7 @@ Triangulation<2>::begin_active_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::raw_face_iterator +Triangulation<2>::raw_face_iterator Triangulation<2>::end_face () const { return end_line (); @@ -3226,7 +3226,7 @@ Triangulation<2>::end_face () const template <> -TriaDimensionInfo<2>::raw_face_iterator +Triangulation<2>::raw_face_iterator Triangulation<2>::last_raw_face () const { return last_raw_line (); @@ -3235,7 +3235,7 @@ Triangulation<2>::last_raw_face () const template <> -TriaDimensionInfo<2>::raw_face_iterator +Triangulation<2>::raw_face_iterator Triangulation<2>::last_raw_face (const unsigned int level) const { return last_raw_line (level); @@ -3244,7 +3244,7 @@ Triangulation<2>::last_raw_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::face_iterator +Triangulation<2>::face_iterator Triangulation<2>::last_face () const { return last_line (); @@ -3253,7 +3253,7 @@ Triangulation<2>::last_face () const template <> -TriaDimensionInfo<2>::face_iterator +Triangulation<2>::face_iterator Triangulation<2>::last_face (const unsigned int level) const { return last_line (level); @@ -3262,7 +3262,7 @@ Triangulation<2>::last_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::active_face_iterator +Triangulation<2>::active_face_iterator Triangulation<2>::last_active_face () const { return last_active_line (); @@ -3271,7 +3271,7 @@ Triangulation<2>::last_active_face () const template <> -TriaDimensionInfo<2>::active_face_iterator +Triangulation<2>::active_face_iterator Triangulation<2>::last_active_face (const unsigned int level) const { return last_active_line (level); @@ -3280,7 +3280,7 @@ Triangulation<2>::last_active_face (const unsigned int level) const template <> -TriaDimensionInfo<2>::raw_hex_iterator +Triangulation<2>::raw_hex_iterator Triangulation<2>::begin_raw_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3290,7 +3290,7 @@ Triangulation<2>::begin_raw_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::hex_iterator +Triangulation<2>::hex_iterator Triangulation<2>::begin_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3300,7 +3300,7 @@ Triangulation<2>::begin_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::active_hex_iterator +Triangulation<2>::active_hex_iterator Triangulation<2>::begin_active_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3310,7 +3310,7 @@ Triangulation<2>::begin_active_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::raw_hex_iterator +Triangulation<2>::raw_hex_iterator Triangulation<2>::end_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3320,7 +3320,7 @@ Triangulation<2>::end_hex () const template <> -TriaDimensionInfo<2>::raw_hex_iterator +Triangulation<2>::raw_hex_iterator Triangulation<2>::last_raw_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3330,7 +3330,7 @@ Triangulation<2>::last_raw_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::raw_hex_iterator +Triangulation<2>::raw_hex_iterator Triangulation<2>::last_raw_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3340,7 +3340,7 @@ Triangulation<2>::last_raw_hex () const template <> -TriaDimensionInfo<2>::hex_iterator +Triangulation<2>::hex_iterator Triangulation<2>::last_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3350,7 +3350,7 @@ Triangulation<2>::last_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::hex_iterator +Triangulation<2>::hex_iterator Triangulation<2>::last_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3360,7 +3360,7 @@ Triangulation<2>::last_hex () const template <> -TriaDimensionInfo<2>::active_hex_iterator +Triangulation<2>::active_hex_iterator Triangulation<2>::last_active_hex (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -3370,7 +3370,7 @@ Triangulation<2>::last_active_hex (const unsigned int) const template <> -TriaDimensionInfo<2>::active_hex_iterator +Triangulation<2>::active_hex_iterator Triangulation<2>::last_active_hex () const { Assert (false, ExcFunctionNotUseful()); @@ -3383,7 +3383,7 @@ Triangulation<2>::last_active_hex () const #if deal_II_dimension == 3 template <> -TriaDimensionInfo<3>::raw_cell_iterator +Triangulation<3>::raw_cell_iterator Triangulation<3>::begin_raw (const unsigned int level) const { return begin_raw_hex (level); @@ -3392,7 +3392,7 @@ Triangulation<3>::begin_raw (const unsigned int level) const template <> -TriaDimensionInfo<3>::active_cell_iterator +Triangulation<3>::active_cell_iterator Triangulation<3>::begin_active (const unsigned int level) const { return begin_active_hex (level); @@ -3401,7 +3401,7 @@ Triangulation<3>::begin_active (const unsigned int level) const template <> -TriaDimensionInfo<3>::raw_cell_iterator +Triangulation<3>::raw_cell_iterator Triangulation<3>::last_raw () const { return last_raw_hex (); @@ -3410,7 +3410,7 @@ Triangulation<3>::last_raw () const template <> -TriaDimensionInfo<3>::raw_cell_iterator +Triangulation<3>::raw_cell_iterator Triangulation<3>::last_raw (const unsigned int level) const { return last_raw_hex (level); @@ -3419,7 +3419,7 @@ Triangulation<3>::last_raw (const unsigned int level) const template <> -TriaDimensionInfo<3>::cell_iterator +Triangulation<3>::cell_iterator Triangulation<3>::last () const { return last_hex (); @@ -3428,7 +3428,7 @@ Triangulation<3>::last () const template <> -TriaDimensionInfo<3>::cell_iterator +Triangulation<3>::cell_iterator Triangulation<3>::last (const unsigned int level) const { return last_hex (level); @@ -3437,7 +3437,7 @@ Triangulation<3>::last (const unsigned int level) const template <> -TriaDimensionInfo<3>::active_cell_iterator +Triangulation<3>::active_cell_iterator Triangulation<3>::last_active () const { return last_active_hex (); @@ -3446,7 +3446,7 @@ Triangulation<3>::last_active () const template <> -TriaDimensionInfo<3>::active_cell_iterator +Triangulation<3>::active_cell_iterator Triangulation<3>::last_active (const unsigned int level) const { return last_active_hex (level); @@ -3455,7 +3455,7 @@ Triangulation<3>::last_active (const unsigned int level) const template <> -TriaDimensionInfo<3>::raw_face_iterator +Triangulation<3>::raw_face_iterator Triangulation<3>::begin_raw_face (const unsigned int level) const { return begin_raw_quad (level); @@ -3464,7 +3464,7 @@ Triangulation<3>::begin_raw_face (const unsigned int level) const template <> -TriaDimensionInfo<3>::face_iterator +Triangulation<3>::face_iterator Triangulation<3>::begin_face (const unsigned int level) const { return begin_quad (level); @@ -3473,7 +3473,7 @@ Triangulation<3>::begin_face (const unsigned int level) const template <> -TriaDimensionInfo<3>::active_face_iterator +Triangulation<3>::active_face_iterator Triangulation<3>::begin_active_face (const unsigned int level) const { return begin_active_quad (level); @@ -3482,7 +3482,7 @@ Triangulation<3>::begin_active_face (const unsigned int level) const template <> -TriaDimensionInfo<3>::raw_face_iterator +Triangulation<3>::raw_face_iterator Triangulation<3>::end_face () const { return end_quad (); @@ -3491,7 +3491,7 @@ Triangulation<3>::end_face () const template <> -TriaDimensionInfo<3>::raw_face_iterator +Triangulation<3>::raw_face_iterator Triangulation<3>::last_raw_face () const { return last_raw_quad (); @@ -3500,7 +3500,7 @@ Triangulation<3>::last_raw_face () const template <> -TriaDimensionInfo<3>::raw_face_iterator +Triangulation<3>::raw_face_iterator Triangulation<3>::last_raw_face (const unsigned int level) const { return last_raw_quad (level); @@ -3509,7 +3509,7 @@ Triangulation<3>::last_raw_face (const unsigned int level) const template <> -TriaDimensionInfo<3>::face_iterator +Triangulation<3>::face_iterator Triangulation<3>::last_face () const { return last_quad (); @@ -3518,7 +3518,7 @@ Triangulation<3>::last_face () const template <> -TriaDimensionInfo<3>::face_iterator +Triangulation<3>::face_iterator Triangulation<3>::last_face (const unsigned int level) const { return last_quad (level); @@ -3527,7 +3527,7 @@ Triangulation<3>::last_face (const unsigned int level) const template <> -TriaDimensionInfo<3>::active_face_iterator +Triangulation<3>::active_face_iterator Triangulation<3>::last_active_face () const { return last_active_quad (); @@ -3536,7 +3536,7 @@ Triangulation<3>::last_active_face () const template <> -TriaDimensionInfo<3>::active_face_iterator +Triangulation<3>::active_face_iterator Triangulation<3>::last_active_face (const unsigned int level) const { return last_active_quad (level); @@ -3547,7 +3547,7 @@ Triangulation<3>::last_active_face (const unsigned int level) const template -typename TriaDimensionInfo::raw_line_iterator +typename Triangulation::raw_line_iterator Triangulation::begin_raw_line (const unsigned int level) const { Assert (level::begin_raw_line (const unsigned int level) const template -typename TriaDimensionInfo::raw_quad_iterator +typename Triangulation::raw_quad_iterator Triangulation::begin_raw_quad (const unsigned int level) const { Assert (level::begin_raw_quad (const unsigned int level) const template -typename TriaDimensionInfo::raw_hex_iterator +typename Triangulation::raw_hex_iterator Triangulation::begin_raw_hex (const unsigned int level) const { Assert (level::begin_raw_hex (const unsigned int level) const template -typename TriaDimensionInfo::line_iterator +typename Triangulation::line_iterator Triangulation::begin_line (const unsigned int level) const { // level is checked in begin_raw @@ -3611,7 +3611,7 @@ Triangulation::begin_line (const unsigned int level) const template -typename TriaDimensionInfo::quad_iterator +typename Triangulation::quad_iterator Triangulation::begin_quad (const unsigned int level) const { // level is checked in begin_raw @@ -3627,7 +3627,7 @@ Triangulation::begin_quad (const unsigned int level) const template -typename TriaDimensionInfo::hex_iterator +typename Triangulation::hex_iterator Triangulation::begin_hex (const unsigned int level) const { // level is checked in begin_raw @@ -3643,7 +3643,7 @@ Triangulation::begin_hex (const unsigned int level) const template -typename TriaDimensionInfo::active_line_iterator +typename Triangulation::active_line_iterator Triangulation::begin_active_line (const unsigned int level) const { // level is checked in begin_raw @@ -3659,7 +3659,7 @@ Triangulation::begin_active_line (const unsigned int level) const template -typename TriaDimensionInfo::active_quad_iterator +typename Triangulation::active_quad_iterator Triangulation::begin_active_quad (const unsigned int level) const { // level is checked in begin_raw @@ -3675,7 +3675,7 @@ Triangulation::begin_active_quad (const unsigned int level) const template -typename TriaDimensionInfo::active_hex_iterator +typename Triangulation::active_hex_iterator Triangulation::begin_active_hex (const unsigned int level) const { // level is checked in begin_raw @@ -3691,7 +3691,7 @@ Triangulation::begin_active_hex (const unsigned int level) const template -typename TriaDimensionInfo::raw_line_iterator +typename Triangulation::raw_line_iterator Triangulation::end_line () const { return raw_line_iterator (const_cast*>(this), @@ -3702,7 +3702,7 @@ Triangulation::end_line () const template -typename TriaDimensionInfo::raw_quad_iterator +typename Triangulation::raw_quad_iterator Triangulation::end_quad () const { return raw_quad_iterator (const_cast*>(this), @@ -3713,7 +3713,7 @@ Triangulation::end_quad () const template -typename TriaDimensionInfo::raw_hex_iterator +typename Triangulation::raw_hex_iterator Triangulation::end_hex () const { return raw_hex_iterator (const_cast*>(this), @@ -3724,7 +3724,7 @@ Triangulation::end_hex () const template -typename TriaDimensionInfo::raw_line_iterator +typename Triangulation::raw_line_iterator Triangulation::last_raw_line (const unsigned int level) const { Assert (level::last_raw_line (const unsigned int level) const template -typename TriaDimensionInfo::raw_quad_iterator +typename Triangulation::raw_quad_iterator Triangulation::last_raw_quad (const unsigned int level) const { Assert (level::last_raw_quad (const unsigned int level) const { template -typename TriaDimensionInfo::raw_hex_iterator +typename Triangulation::raw_hex_iterator Triangulation::last_raw_hex (const unsigned int level) const { Assert (level::last_raw_hex (const unsigned int level) const { template -typename TriaDimensionInfo::raw_line_iterator +typename Triangulation::raw_line_iterator Triangulation::last_raw_line () const { return last_raw_line (levels.size()-1); } template -typename TriaDimensionInfo::raw_quad_iterator +typename Triangulation::raw_quad_iterator Triangulation::last_raw_quad () const { return last_raw_quad (levels.size()-1); } template -typename TriaDimensionInfo::raw_hex_iterator +typename Triangulation::raw_hex_iterator Triangulation::last_raw_hex () const { return last_raw_hex (levels.size()-1); } template -typename TriaDimensionInfo::line_iterator +typename Triangulation::line_iterator Triangulation::last_line (const unsigned int level) const { // level is checked in begin_raw raw_line_iterator ri = last_raw_line(level); @@ -3801,7 +3801,7 @@ Triangulation::last_line (const unsigned int level) const { template -typename TriaDimensionInfo::quad_iterator +typename Triangulation::quad_iterator Triangulation::last_quad (const unsigned int level) const { // level is checked in begin_raw raw_quad_iterator ri = last_raw_quad(level); @@ -3815,7 +3815,7 @@ Triangulation::last_quad (const unsigned int level) const { template -typename TriaDimensionInfo::hex_iterator +typename Triangulation::hex_iterator Triangulation::last_hex (const unsigned int level) const { // level is checked in begin_raw raw_hex_iterator ri = last_raw_hex(level); @@ -3829,28 +3829,28 @@ Triangulation::last_hex (const unsigned int level) const { template -typename TriaDimensionInfo::line_iterator +typename Triangulation::line_iterator Triangulation::last_line () const { return last_line (levels.size()-1); } template -typename TriaDimensionInfo::quad_iterator +typename Triangulation::quad_iterator Triangulation::last_quad () const { return last_quad (levels.size()-1); } template -typename TriaDimensionInfo::hex_iterator +typename Triangulation::hex_iterator Triangulation::last_hex () const { return last_hex (levels.size()-1); } template -typename TriaDimensionInfo::active_line_iterator +typename Triangulation::active_line_iterator Triangulation::last_active_line (const unsigned int level) const { // level is checked in begin_raw line_iterator i = last_line(level); @@ -3864,7 +3864,7 @@ Triangulation::last_active_line (const unsigned int level) const { template -typename TriaDimensionInfo::active_quad_iterator +typename Triangulation::active_quad_iterator Triangulation::last_active_quad (const unsigned int level) const { // level is checked in begin_raw quad_iterator i = last_quad(level); @@ -3878,7 +3878,7 @@ Triangulation::last_active_quad (const unsigned int level) const { template -typename TriaDimensionInfo::active_hex_iterator +typename Triangulation::active_hex_iterator Triangulation::last_active_hex (const unsigned int level) const { // level is checked in begin_raw hex_iterator i = last_hex(level); @@ -3892,28 +3892,28 @@ Triangulation::last_active_hex (const unsigned int level) const { template -typename TriaDimensionInfo::active_line_iterator +typename Triangulation::active_line_iterator Triangulation::last_active_line () const { return last_active_line (levels.size()-1); } template -typename TriaDimensionInfo::active_quad_iterator +typename Triangulation::active_quad_iterator Triangulation::last_active_quad () const { return last_active_quad (levels.size()-1); } template -typename TriaDimensionInfo::active_hex_iterator +typename Triangulation::active_hex_iterator Triangulation::last_active_hex () const { return last_active_hex (levels.size()-1); } template -typename TriaDimensionInfo::raw_cell_iterator +typename Triangulation::raw_cell_iterator Triangulation::end_raw (const unsigned int level) const { return (level == levels.size()-1 ? end() : @@ -3922,7 +3922,7 @@ Triangulation::end_raw (const unsigned int level) const { template -typename TriaDimensionInfo::cell_iterator +typename Triangulation::cell_iterator Triangulation::end (const unsigned int level) const { return (level == levels.size()-1 ? cell_iterator(end()) : @@ -3931,7 +3931,7 @@ Triangulation::end (const unsigned int level) const { template -typename TriaDimensionInfo::active_cell_iterator +typename Triangulation::active_cell_iterator Triangulation::end_active (const unsigned int level) const { return (level == levels.size()-1 ? active_cell_iterator(end()) : @@ -3940,7 +3940,7 @@ Triangulation::end_active (const unsigned int level) const { template -typename TriaDimensionInfo::raw_face_iterator +typename Triangulation::raw_face_iterator Triangulation::end_raw_face (const unsigned int level) const { return (level == levels.size()-1 ? end_face() : @@ -3949,7 +3949,7 @@ Triangulation::end_raw_face (const unsigned int level) const { template -typename TriaDimensionInfo::face_iterator +typename Triangulation::face_iterator Triangulation::end_face (const unsigned int level) const { return (level == levels.size()-1 ? face_iterator(end_face()) : @@ -3958,7 +3958,7 @@ Triangulation::end_face (const unsigned int level) const { template -typename TriaDimensionInfo::active_face_iterator +typename Triangulation::active_face_iterator Triangulation::end_active_face (const unsigned int level) const { return (level == levels.size()-1 ? active_face_iterator(end_face()) : @@ -3967,7 +3967,7 @@ Triangulation::end_active_face (const unsigned int level) const { template -typename TriaDimensionInfo::raw_line_iterator +typename Triangulation::raw_line_iterator Triangulation::end_raw_line (const unsigned int level) const { return (level == levels.size()-1 ? end_line() : @@ -3976,7 +3976,7 @@ Triangulation::end_raw_line (const unsigned int level) const { template -typename TriaDimensionInfo::line_iterator +typename Triangulation::line_iterator Triangulation::end_line (const unsigned int level) const { return (level == levels.size()-1 ? line_iterator(end_line()) : @@ -3985,7 +3985,7 @@ Triangulation::end_line (const unsigned int level) const { template -typename TriaDimensionInfo::active_line_iterator +typename Triangulation::active_line_iterator Triangulation::end_active_line (const unsigned int level) const { return (level == levels.size()-1 ? active_line_iterator(end_line()) : @@ -3994,7 +3994,7 @@ Triangulation::end_active_line (const unsigned int level) const { template -typename TriaDimensionInfo::raw_quad_iterator +typename Triangulation::raw_quad_iterator Triangulation::end_raw_quad (const unsigned int level) const { return (level == levels.size()-1 ? end_quad() : @@ -4003,7 +4003,7 @@ Triangulation::end_raw_quad (const unsigned int level) const { template -typename TriaDimensionInfo::quad_iterator +typename Triangulation::quad_iterator Triangulation::end_quad (const unsigned int level) const { return (level == levels.size()-1 ? quad_iterator(end_quad()) : @@ -4012,7 +4012,7 @@ Triangulation::end_quad (const unsigned int level) const { template -typename TriaDimensionInfo::active_quad_iterator +typename Triangulation::active_quad_iterator Triangulation::end_active_quad (const unsigned int level) const { return (level == levels.size()-1 ? active_quad_iterator(end_quad()) : @@ -4021,7 +4021,7 @@ Triangulation::end_active_quad (const unsigned int level) const { template -typename TriaDimensionInfo::raw_hex_iterator +typename Triangulation::raw_hex_iterator Triangulation::end_raw_hex (const unsigned int level) const { return (level == levels.size()-1 ? end_hex() : @@ -4030,7 +4030,7 @@ Triangulation::end_raw_hex (const unsigned int level) const { template -typename TriaDimensionInfo::hex_iterator +typename Triangulation::hex_iterator Triangulation::end_hex (const unsigned int level) const { return (level == levels.size()-1 ? @@ -4040,7 +4040,7 @@ Triangulation::end_hex (const unsigned int level) const template -typename TriaDimensionInfo::active_hex_iterator +typename Triangulation::active_hex_iterator Triangulation::end_active_hex (const unsigned int level) const { return (level == levels.size()-1 ? @@ -4442,8 +4442,22 @@ Triangulation::execute_coarsening_and_refinement () { prepare_coarsening_and_refinement (); + // Inform RefinementListeners + // about beginning of refinement. + typename std::list::iterator ref_listener = + refinement_listeners.begin (), + end_listener = refinement_listeners.end (); + for (; ref_listener != end_listener; ++ref_listener) + (*ref_listener)->pre_refinement_notification (*this); + execute_coarsening(); execute_refinement(); + + // Inform RefinementListeners + // about end of refinement. + for (ref_listener = refinement_listeners.begin (); + ref_listener != end_listener; ++ref_listener) + (*ref_listener)->post_refinement_notification (*this); } @@ -7301,7 +7315,6 @@ bool Triangulation::prepare_coarsening_and_refinement () { save_coarsen_flags (flags_before[0]); save_refine_flags (flags_before[1]); - // do nothing in 1d, except setting // the coarsening flags correctly if (dim == 1) @@ -8959,5 +8972,40 @@ void Triangulation::update_number_cache () } +// Refinement listeners +template +void Triangulation:: +RefinementListener::pre_refinement_notification (const Triangulation &) +{} + + + +template +void Triangulation:: +RefinementListener::post_refinement_notification (const Triangulation &) +{} + + + +template +void +Triangulation::add_refinement_listener (RefinementListener &listener) const +{ + refinement_listeners.push_back (&listener); +} + + + +template +void +Triangulation::remove_refinement_listener (RefinementListener &listener) const +{ + typename std::list::iterator p = + find (refinement_listeners.begin (), refinement_listeners.end (), &listener); + Assert (p != refinement_listeners.end (), ExcInternalError ()); + refinement_listeners.erase (p); +} + + // explicit instantiations template class Triangulation; -- 2.39.5