]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Merge back the changes on the hp branch that have been made in the grid/ subdirectory.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 28 Jun 2004 14:49:51 +0000 (14:49 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 28 Jun 2004 14:49:51 +0000 (14:49 +0000)
git-svn-id: https://svn.dealii.org/trunk@9477 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/grid/tria.h
deal.II/deal.II/include/grid/tria_iterator.h
deal.II/deal.II/include/grid/tria_iterator_selector.h [new file with mode: 0644]
deal.II/deal.II/include/grid/tria_levels.h
deal.II/deal.II/source/grid/tria.cc

index 1f3901019562eb68f38a83e9395c6733854ced9f..9bdb20ca4797935198f6f3dbfed1b64a3f850841 100644 (file)
 
 
 #include <base/config.h>
-#include <vector>
 #include <base/point.h>
-#include <grid/geometry_info.h>
 #include <base/subscriptor.h>
+#include <grid/geometry_info.h>
+#include <grid/tria_iterator_selector.h>
+
+#include <vector>
+#include <list>
 
 template <int dim> class Boundary;
 template <int dim> class StraightBoundary;
-template <int dim> class CellAccessor;
-template <int dim> class TriaAccessor;
-template <int celldim, int dim> class TriaObjectAccessor;
-template <int dim>              class TriaObjectAccessor<0, dim>;
-template <int dim>              class TriaObjectAccessor<1, dim>;
-template <int dim>              class TriaObjectAccessor<2, dim>;
-template <int dim>              class TriaObjectAccessor<3, dim>;
-template <int dim, typename Accessor> class TriaRawIterator;
-template <int dim, typename Accessor> class TriaIterator;
-template <int dim, typename Accessor> class TriaActiveIterator;
 template <int dim> class TriangulationLevel;
 template <int dim> class DoFHandler;
+template <int dim> class hpDoFHandler;
 template <int dim> 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 <int dim>
-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 <tt>Triangulation<1></tt> 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
- *  <tt>Triangulation<1></tt>, the @p quad_iterators are declared as
- *  <tt>void *</tt>. 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 <tt>Triangulation<2></tt> 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
- *  <tt>Triangulation<[12]></tt>, the @p hex_iterators are declared as
- *  <tt>void *</tt>. 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 <tt>TriaDimensionInfo<[12]></tt>). 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 <int dim>
-class Triangulation : public TriaDimensionInfo<dim>,
-                     public Subscriptor
+class Triangulation : public Subscriptor
 {
   private:
                                     /**
@@ -1793,6 +1517,8 @@ class Triangulation : public TriaDimensionInfo<dim>,
                                      */
     static const StraightBoundary<dim> *straight_boundary;
 
+    typedef internal::TriaIteratorSelector<dim> IteratorSelector;
+                     
   public:
     
                                     /**
@@ -1823,26 +1549,53 @@ class Triangulation : public TriaDimensionInfo<dim>,
     };
     
 
-    typedef typename TriaDimensionInfo<dim>::raw_line_iterator raw_line_iterator;
-    typedef typename TriaDimensionInfo<dim>::line_iterator line_iterator;
-    typedef typename TriaDimensionInfo<dim>::active_line_iterator active_line_iterator;
-
-    typedef typename TriaDimensionInfo<dim>::raw_quad_iterator raw_quad_iterator;
-    typedef typename TriaDimensionInfo<dim>::quad_iterator quad_iterator;
-    typedef typename TriaDimensionInfo<dim>::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<dim>::raw_hex_iterator raw_hex_iterator;
-    typedef typename TriaDimensionInfo<dim>::hex_iterator hex_iterator;
-    typedef typename TriaDimensionInfo<dim>::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<dim>::raw_cell_iterator raw_cell_iterator;
-    typedef typename TriaDimensionInfo<dim>::cell_iterator cell_iterator;
-    typedef typename TriaDimensionInfo<dim>::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<dim>::raw_face_iterator raw_face_iterator;
-    typedef typename TriaDimensionInfo<dim>::face_iterator face_iterator;
-    typedef typename TriaDimensionInfo<dim>::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<dim> &tria);
+           virtual void post_refinement_notification (const Triangulation<dim> &tria);
+       };
+    
                                     /**
                                      *  Create a triangulation and create
                                      *  the first level of the hierarchy.
@@ -2162,6 +1915,21 @@ class Triangulation : public TriaDimensionInfo<dim>,
                                      */
     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<dim>,
                                      *  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<dim>,
                                      */
     TriaNumberCache<dim>             number_cache;
 
+                                    /**
+                                     *  List of RefinementListeners,
+                                     *  which want to be informed if the
+                                     *  Triangulation is refined.
+                                     */    
+    mutable std::list<RefinementListener *> refinement_listeners;
+
                                     // make a couple of classes
                                     // friends
     template <int dim1> friend class TriaAccessor;
@@ -3513,21 +3288,21 @@ class Triangulation : public TriaDimensionInfo<dim>,
     friend class TriaRawIterator<3,CellAccessor<3> >;
 
     friend class DoFHandler<dim>;
+    friend class hpDoFHandler<dim>;
     friend class MGDoFHandler<dim>;
 };
 
 
-
 /* -------------- 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<Point<1> >    &v,
                                                         const std::vector<CellData<1> > &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<bool> &) const;
 template <> void Triangulation<2>::load_user_flags_hex (std::istream &);
 template <> void Triangulation<2>::load_user_flags_hex (const std::vector<bool> &);
-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;
index acf1ec2c1c64a8bb276985ae672c5ff9c9bb6b51..ac7c0e7e7f59d500ae7f411c0545b5896a55a252 100644 (file)
@@ -175,6 +175,50 @@ template <int dim> 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 <tt>present_level>=0</tt> and <tt>present_index>=0</tt>, 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 <tt>present_level==-1</tt> and <tt>present_index==-1</tt>, then the iterator points
+ * past the end; in all other cases, the iterator is considered invalid.
+ * You can check this by calling the <tt>state()</tt> 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 <tt>state()</tt> 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,
+ * <tt>present_level==-2</tt> and <tt>present_index==-2</tt>. 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 (file)
index 0000000..ca1e761
--- /dev/null
@@ -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 <int dim> class CellAccessor;
+template <int dim> class TriaAccessor;
+template <int, int> class TriaObjectAccessor;
+template <int dim>  class TriaObjectAccessor<0, dim>;
+template <int dim>  class TriaObjectAccessor<1, dim>;
+template <int dim>  class TriaObjectAccessor<2, dim>;
+template <int dim>  class TriaObjectAccessor<3, dim>;
+template <int dim, typename Accessor> class TriaRawIterator;
+template <int dim, typename Accessor> class TriaIterator;
+template <int dim, typename Accessor> 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 <int dim>
+  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 <tt>Triangulation<1></tt> 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
+ *  <tt>Triangulation<1></tt>, the @p quad_iterators are declared as
+ *  <tt>void *</tt>. 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 <tt>Triangulation<2></tt> 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
+ *  <tt>Triangulation<[12]></tt>, the @p hex_iterators are declared as
+ *  <tt>void *</tt>. 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 <tt>TriaIteratorSelector<[12]></tt>). 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
index f5c4694670c130e9ed146730ab4110d3dda38644..531383dd831a78ad7b713b005ee0cfa0164771ce 100644 (file)
@@ -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.
                                          */
index 08e0580dfbe9646ae20203e0fcfe240be2d5ea82..9d48446535b1d07ec808abbde338b488cd81559a 100644 (file)
@@ -137,14 +137,14 @@ Triangulation<dim>::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<dim>::load_user_pointers_hex (const std::vector<void *> &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 <int dim>
-typename TriaDimensionInfo<dim>::raw_line_iterator
+typename Triangulation<dim>::raw_line_iterator
 Triangulation<dim>::begin_raw_line (const unsigned int level) const
 {
   Assert (level<levels.size(), ExcInvalidLevel(level));
@@ -3563,7 +3563,7 @@ Triangulation<dim>::begin_raw_line (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_quad_iterator
+typename Triangulation<dim>::raw_quad_iterator
 Triangulation<dim>::begin_raw_quad (const unsigned int level) const
 {
   Assert (level<levels.size(), ExcInvalidLevel(level));
@@ -3579,7 +3579,7 @@ Triangulation<dim>::begin_raw_quad (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_hex_iterator
+typename Triangulation<dim>::raw_hex_iterator
 Triangulation<dim>::begin_raw_hex (const unsigned int level) const
 {
   Assert (level<levels.size(), ExcInvalidLevel(level));
@@ -3595,7 +3595,7 @@ Triangulation<dim>::begin_raw_hex (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::line_iterator
+typename Triangulation<dim>::line_iterator
 Triangulation<dim>::begin_line (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3611,7 +3611,7 @@ Triangulation<dim>::begin_line (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::quad_iterator
+typename Triangulation<dim>::quad_iterator
 Triangulation<dim>::begin_quad (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3627,7 +3627,7 @@ Triangulation<dim>::begin_quad (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::hex_iterator
+typename Triangulation<dim>::hex_iterator
 Triangulation<dim>::begin_hex (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3643,7 +3643,7 @@ Triangulation<dim>::begin_hex (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_line_iterator
+typename Triangulation<dim>::active_line_iterator
 Triangulation<dim>::begin_active_line (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3659,7 +3659,7 @@ Triangulation<dim>::begin_active_line (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_quad_iterator
+typename Triangulation<dim>::active_quad_iterator
 Triangulation<dim>::begin_active_quad (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3675,7 +3675,7 @@ Triangulation<dim>::begin_active_quad (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_hex_iterator
+typename Triangulation<dim>::active_hex_iterator
 Triangulation<dim>::begin_active_hex (const unsigned int level) const
 {
                                   // level is checked in begin_raw
@@ -3691,7 +3691,7 @@ Triangulation<dim>::begin_active_hex (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_line_iterator
+typename Triangulation<dim>::raw_line_iterator
 Triangulation<dim>::end_line () const
 {
   return raw_line_iterator (const_cast<Triangulation<dim>*>(this),
@@ -3702,7 +3702,7 @@ Triangulation<dim>::end_line () const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_quad_iterator
+typename Triangulation<dim>::raw_quad_iterator
 Triangulation<dim>::end_quad () const
 {
   return raw_quad_iterator (const_cast<Triangulation<dim>*>(this),
@@ -3713,7 +3713,7 @@ Triangulation<dim>::end_quad () const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_hex_iterator
+typename Triangulation<dim>::raw_hex_iterator
 Triangulation<dim>::end_hex () const
 {
   return raw_hex_iterator (const_cast<Triangulation<dim>*>(this),
@@ -3724,7 +3724,7 @@ Triangulation<dim>::end_hex () const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_line_iterator
+typename Triangulation<dim>::raw_line_iterator
 Triangulation<dim>::last_raw_line (const unsigned int level) const
 {
   Assert (level<levels.size(), ExcInvalidLevel(level));
@@ -3738,7 +3738,7 @@ Triangulation<dim>::last_raw_line (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_quad_iterator
+typename Triangulation<dim>::raw_quad_iterator
 Triangulation<dim>::last_raw_quad (const unsigned int level) const {
   Assert (level<levels.size(),
          ExcInvalidLevel(level));
@@ -3752,7 +3752,7 @@ Triangulation<dim>::last_raw_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_hex_iterator
+typename Triangulation<dim>::raw_hex_iterator
 Triangulation<dim>::last_raw_hex (const unsigned int level) const {
   Assert (level<levels.size(),
          ExcInvalidLevel(level));
@@ -3766,28 +3766,28 @@ Triangulation<dim>::last_raw_hex (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_line_iterator
+typename Triangulation<dim>::raw_line_iterator
 Triangulation<dim>::last_raw_line () const {
   return last_raw_line (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_quad_iterator
+typename Triangulation<dim>::raw_quad_iterator
 Triangulation<dim>::last_raw_quad () const {
   return last_raw_quad (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_hex_iterator
+typename Triangulation<dim>::raw_hex_iterator
 Triangulation<dim>::last_raw_hex () const {
   return last_raw_hex (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::line_iterator
+typename Triangulation<dim>::line_iterator
 Triangulation<dim>::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<dim>::last_line (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::quad_iterator
+typename Triangulation<dim>::quad_iterator
 Triangulation<dim>::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<dim>::last_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::hex_iterator
+typename Triangulation<dim>::hex_iterator
 Triangulation<dim>::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<dim>::last_hex (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::line_iterator
+typename Triangulation<dim>::line_iterator
 Triangulation<dim>::last_line () const {
   return last_line (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::quad_iterator
+typename Triangulation<dim>::quad_iterator
 Triangulation<dim>::last_quad () const {
   return last_quad (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::hex_iterator
+typename Triangulation<dim>::hex_iterator
 Triangulation<dim>::last_hex () const {
   return last_hex (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_line_iterator
+typename Triangulation<dim>::active_line_iterator
 Triangulation<dim>::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<dim>::last_active_line (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_quad_iterator
+typename Triangulation<dim>::active_quad_iterator
 Triangulation<dim>::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<dim>::last_active_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_hex_iterator
+typename Triangulation<dim>::active_hex_iterator
 Triangulation<dim>::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<dim>::last_active_hex (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_line_iterator
+typename Triangulation<dim>::active_line_iterator
 Triangulation<dim>::last_active_line () const {
   return last_active_line (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_quad_iterator
+typename Triangulation<dim>::active_quad_iterator
 Triangulation<dim>::last_active_quad () const {
   return last_active_quad (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_hex_iterator
+typename Triangulation<dim>::active_hex_iterator
 Triangulation<dim>::last_active_hex () const {
   return last_active_hex (levels.size()-1);
 }
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_cell_iterator
+typename Triangulation<dim>::raw_cell_iterator
 Triangulation<dim>::end_raw (const unsigned int level) const {
   return (level == levels.size()-1 ?
          end() :
@@ -3922,7 +3922,7 @@ Triangulation<dim>::end_raw (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::cell_iterator
+typename Triangulation<dim>::cell_iterator
 Triangulation<dim>::end (const unsigned int level) const {
   return (level == levels.size()-1 ?
          cell_iterator(end()) :
@@ -3931,7 +3931,7 @@ Triangulation<dim>::end (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_cell_iterator
+typename Triangulation<dim>::active_cell_iterator
 Triangulation<dim>::end_active (const unsigned int level) const {
   return (level == levels.size()-1 ?
          active_cell_iterator(end()) :
@@ -3940,7 +3940,7 @@ Triangulation<dim>::end_active (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_face_iterator
+typename Triangulation<dim>::raw_face_iterator
 Triangulation<dim>::end_raw_face (const unsigned int level) const {
   return (level == levels.size()-1 ?
          end_face() :
@@ -3949,7 +3949,7 @@ Triangulation<dim>::end_raw_face (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::face_iterator
+typename Triangulation<dim>::face_iterator
 Triangulation<dim>::end_face (const unsigned int level) const {
   return (level == levels.size()-1 ?
          face_iterator(end_face()) :
@@ -3958,7 +3958,7 @@ Triangulation<dim>::end_face (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_face_iterator
+typename Triangulation<dim>::active_face_iterator
 Triangulation<dim>::end_active_face (const unsigned int level) const {
   return (level == levels.size()-1 ?
          active_face_iterator(end_face()) :
@@ -3967,7 +3967,7 @@ Triangulation<dim>::end_active_face (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_line_iterator
+typename Triangulation<dim>::raw_line_iterator
 Triangulation<dim>::end_raw_line (const unsigned int level) const {
   return (level == levels.size()-1 ?
          end_line() :
@@ -3976,7 +3976,7 @@ Triangulation<dim>::end_raw_line (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::line_iterator
+typename Triangulation<dim>::line_iterator
 Triangulation<dim>::end_line (const unsigned int level) const {
   return (level == levels.size()-1 ?
          line_iterator(end_line()) :
@@ -3985,7 +3985,7 @@ Triangulation<dim>::end_line (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_line_iterator
+typename Triangulation<dim>::active_line_iterator
 Triangulation<dim>::end_active_line (const unsigned int level) const {
   return (level == levels.size()-1 ?
          active_line_iterator(end_line()) :
@@ -3994,7 +3994,7 @@ Triangulation<dim>::end_active_line (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_quad_iterator
+typename Triangulation<dim>::raw_quad_iterator
 Triangulation<dim>::end_raw_quad (const unsigned int level) const {
   return (level == levels.size()-1 ?
          end_quad() :
@@ -4003,7 +4003,7 @@ Triangulation<dim>::end_raw_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::quad_iterator
+typename Triangulation<dim>::quad_iterator
 Triangulation<dim>::end_quad (const unsigned int level) const {
   return (level == levels.size()-1 ?
          quad_iterator(end_quad()) :
@@ -4012,7 +4012,7 @@ Triangulation<dim>::end_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_quad_iterator
+typename Triangulation<dim>::active_quad_iterator
 Triangulation<dim>::end_active_quad (const unsigned int level) const {
   return (level == levels.size()-1 ?
          active_quad_iterator(end_quad()) :
@@ -4021,7 +4021,7 @@ Triangulation<dim>::end_active_quad (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::raw_hex_iterator
+typename Triangulation<dim>::raw_hex_iterator
 Triangulation<dim>::end_raw_hex (const unsigned int level) const {
   return (level == levels.size()-1 ?
          end_hex() :
@@ -4030,7 +4030,7 @@ Triangulation<dim>::end_raw_hex (const unsigned int level) const {
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::hex_iterator
+typename Triangulation<dim>::hex_iterator
 Triangulation<dim>::end_hex (const unsigned int level) const
 {
   return (level == levels.size()-1 ?
@@ -4040,7 +4040,7 @@ Triangulation<dim>::end_hex (const unsigned int level) const
 
 
 template <int dim>
-typename TriaDimensionInfo<dim>::active_hex_iterator
+typename Triangulation<dim>::active_hex_iterator
 Triangulation<dim>::end_active_hex (const unsigned int level) const
 {
   return (level == levels.size()-1 ?
@@ -4442,8 +4442,22 @@ Triangulation<dim>::execute_coarsening_and_refinement ()
 {
   prepare_coarsening_and_refinement ();
 
+                                  // Inform RefinementListeners
+                                   // about beginning of refinement.
+  typename std::list<RefinementListener *>::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<dim>::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<dim>::update_number_cache ()
 }
 
 
+// Refinement listeners
+template<int dim>
+void Triangulation<dim>::
+RefinementListener::pre_refinement_notification (const Triangulation<dim> &)
+{}
+
+
+
+template<int dim>
+void Triangulation<dim>::
+RefinementListener::post_refinement_notification (const Triangulation<dim> &)
+{}
+
+
+
+template<int dim>
+void
+Triangulation<dim>::add_refinement_listener (RefinementListener &listener) const
+{
+    refinement_listeners.push_back (&listener);
+}
+
+
+
+template<int dim>
+void
+Triangulation<dim>::remove_refinement_listener (RefinementListener &listener) const
+{
+    typename std::list<RefinementListener *>::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<deal_II_dimension>;

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.