]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Rough fix. Not compiling.
authorheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 10 Feb 2014 14:18:19 +0000 (14:18 +0000)
committerheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Mon, 10 Feb 2014 14:18:19 +0000 (14:18 +0000)
git-svn-id: https://svn.dealii.org/branches/branch_manifold_id_intermediate@32445 0785d39b-7218-0410-832d-ea1e28bc413d

32 files changed:
deal.II/doc/doxygen/headers/glossary.h
deal.II/doc/doxygen/headers/manifold.h [new file with mode: 0644]
deal.II/include/deal.II/base/types.h
deal.II/include/deal.II/grid/tria.h
deal.II/include/deal.II/grid/tria_accessor.h
deal.II/include/deal.II/grid/tria_accessor.templates.h
deal.II/include/deal.II/grid/tria_boundary_lib.h
deal.II/include/deal.II/grid/tria_objects.h
deal.II/include/deal.II/lac/precondition.h
deal.II/include/deal.II/numerics/vector_tools.templates.h
deal.II/source/grid/grid_tools.cc
deal.II/source/grid/tria.cc
deal.II/source/grid/tria.inst.in
deal.II/source/grid/tria_accessor.cc
deal.II/source/grid/tria_objects.cc
tests/manifold/CMakeLists.txt [new file with mode: 0644]
tests/manifold/flat_manifold_01.cc [new file with mode: 0644]
tests/manifold/flat_manifold_01.output [new file with mode: 0644]
tests/manifold/manifold_id_01.cc [new file with mode: 0644]
tests/manifold/manifold_id_01.output [new file with mode: 0644]
tests/manifold/manifold_id_02.cc [new file with mode: 0644]
tests/manifold/manifold_id_02.output [new file with mode: 0644]
tests/manifold/manifold_id_03.cc [new file with mode: 0644]
tests/manifold/manifold_id_03.output [new file with mode: 0644]
tests/manifold/manifold_id_04.cc [new file with mode: 0644]
tests/manifold/manifold_id_04.output [new file with mode: 0644]
tests/manifold/manifold_id_05.cc [new file with mode: 0644]
tests/manifold/manifold_id_05.output [new file with mode: 0644]
tests/manifold/manifold_id_06.cc [new file with mode: 0644]
tests/manifold/manifold_id_06.output [new file with mode: 0644]
tests/manifold/manifold_id_07.cc [new file with mode: 0644]
tests/manifold/manifold_id_07.output [new file with mode: 0644]

index 5c10bf22dc02b13c9ed4d2031fca43774d528d89..a110179809921a85e56bb3ddfe34942808d83d8b 100644 (file)
  *
  * @see @ref boundary "The module on boundaries"
  *
+ * <dt class="glossary">@anchor GlossManifoldIndicator <b>%Manifold indicator</b></dt>
+ *
+ * <dd> Every object that makes up a Triangulation (cells, faces,
+ * edges, etc.), is associated with a unique number (of type
+ * types::manifol_id) that is used to identify which manifold object
+ * is responsible to generate new points when the mesh is refined. 
+ *
+ * By default, all manifold indicators of a mesh are set to
+ * types::invalid_manifold_id. A typical piece of code that sets the
+ * manifold indicator on a object to something else would look like
+ * this, here setting the manifold indicator to 42 for all cells whose
+ * center has the x component located at $-1$:
+ *
+ * @code
+ * for (typename Triangulation<dim>::active_cell_iterator cell =
+ *     triangulation.begin_active();
+ *     cell != triangulation.end(); ++cell)
+ *             if (cell->center()[0] == -1)
+ *                     cell->set_manifold_id (42);
+ * @endcode
+ *
+ * Here we call the function TriaAccessor::set_manifold_id. It may
+ * also be appropriate to call TriaAccessor::set_all_manifold_ids
+ * instead, to set recursively the manifold id on each face (and edge,
+ * if in 3d). To query the manifold indicator of a particular object
+ * edge, use TriaAccessor::manifold_id.
+ *
+ * The code above only sets the manifold indicators of a particular
+ * part of the Triangulation, but it does not by itself change the way
+ * the Triangulation class treats this object for the purposes of mesh
+ * refinement. For this, you need to call Triangulation::set_manifold
+ * to associate a manifold object with a particular manifold
+ * indicator. This allows the Triangulation objects to use a different
+ * method of finding new points on cells, faces or edges to be
+ * refined; the default is to use a FlatManifold object for all faces
+ * and edges.
+ *
+ * @note Manifold indicators are inherited from parents to their
+ * children upon mesh refinement. Some more information about manifold
+ * indicators is also presented in a section of the documentation of
+ * the Triangulation class.
+ * </dd>
+ *
+ * @see @ref manifold "The module on Manifolds"
  *
  * <dt class="glossary">@anchor GlossComponent <b>Component</b></dt>
  *
diff --git a/deal.II/doc/doxygen/headers/manifold.h b/deal.II/doc/doxygen/headers/manifold.h
new file mode 100644 (file)
index 0000000..f03fd15
--- /dev/null
@@ -0,0 +1,78 @@
+// ---------------------------------------------------------------------
+// $Id: manifold.h 30130 2013-07-23 13:01:18Z heltai $
+//
+// Copyright (C) 2003 - 2013 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+/**
+ * @defgroup manifold Boundary description for triangulations
+ *
+ * The classes in this module are concerned with the description of the
+ * manifold of a domain in which a Triangulation lives. This manifold
+ * description is necessary in two contexts:
+ * <ul>
+ *
+ *   <li> Mesh refinement: Whenever a cell is refined, it is necessary
+ *   to introduce some new vertices in the Triangulation. In the
+ *   simplest case, one assumes that the objects that make up the
+ *   Triangulation are straight line segments, a bi-linear surface or
+ *   a tri-linear volume, the next vertex is simply put into the
+ *   middle of the old ones. This is the default behavior of the
+ *   Triangulation class, and is described by the FlatManifold class.
+ *
+ *   On the other hand, if one deals with curved geometries, or
+ *   geometries which require a denser refinement in some direction,
+ *   this is not the appropriate thing to do. The classes derived from
+ *   the Manifold base class therefore describe the geometry of a
+ *   domain. One can then attach an object of a class derived from
+ *   this base class to the Triangulation object using the
+ *   Triangulation::set_manifold() function, and the Triangulation
+ *   will ask the manifold object where a new vertex should be located
+ *   upon mesh refinement. Several classes already exist to support
+ *   the most common geometries, e.g., CylinderManifold, or
+ *   PolarManifold, which represent respectively the geometry obtained
+ *   when describing your space in cylindrical coordintes or in polar
+ *   coordinates.
+ *
+ *   <li> Integration: When using higher order finite element methods, it is
+ *   often necessary to compute cell terms (like cell contributions to the
+ *   matrix and right hand side of the linear system) using curved
+ *   approximations of the boundary, rather than the straight line
+ *   approximation. The actual implementation of such curved elements happens
+ *   in the Mapping class (see the @ref mapping module), which however obtains
+ *   its information about the boundary of the domain from the classes
+ *   described here. The same is, of course, true when integrating boundary
+ *   terms (e.g., inhomogenous Neumann boundary conditions).
+ *
+ * </ul>
+ *
+ * In deal.II, a Manifold is seen as a collection of points, together
+ * with a notion of distance between points (on the manifold). New
+ * points are obtained by providing a local coordinate system on the
+ * manifold, identifying existing points in the local coordinate
+ * system (pulling them back using the local map to obtain their local
+ * coordinates), find the new point in the local coordinate system by
+ * weighted sums of the existing points, and transforming back the
+ * point in the real space (pushing it forward using the local map).
+ *
+ * While this process is non trivial in most cases of interest, for
+ * most of the trivial geometries, like cylinders, spheres or shells,
+ * we provide reasonable implementations. 
+ *
+ * @see @ref GlossManifoldIndicator "Glossary entry on manifold
+ * indicators"
+ *
+ * @ingroup grid
+ * @author Luca Heltai, 2013
+ */
index 4a3733da4d5ac2d2071558a3ce59a99644814ad4..057920a0822319fd2a9b0d6ebcf69043fcf7f41f 100644 (file)
@@ -126,7 +126,19 @@ namespace types
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
   typedef unsigned char boundary_id;
+  
+  /**
+   * The type used to denote manifold indicators associated with every
+   * object of the mesh.
+   *
+   * There is a special value, numbers::flat_manifold_id
+   * that is used to indicate the standard cartesian manifold.
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  typedef unsigned char manifold_id;
 
+  
   /**
    * @deprecated Old name for the typedef above.
    */
@@ -252,6 +264,24 @@ namespace numbers
    */
   const types::boundary_id internal_face_boundary_id = static_cast<types::boundary_id>(-1);
 
+  /**
+   * Invalid manifold_id which we
+   * need in several places as a
+   * default value.  We assume that
+   * all valid manifold_ids lie in the
+   * range [0, invalid_maifold_id).
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  const types::manifold_id invalid_manifold_id = static_cast<types::manifold_id>(-1);
+  
+  /**
+   * A manifold_id we reserve for the default flat Cartesian manifold.
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  const types::manifold_id flat_manifold_id = static_cast<types::manifold_id>(-1);
+
   /**
    * A special id for an invalid
    * subdomain id. This value may not
index 7e0266cc1c6e962ce1ec8c39c659f6cd5d6fe883..1405d4236db0a925b74fb2a6b68ceeff451fe84b 100644 (file)
@@ -46,6 +46,7 @@ template <int dim, int spacedim> class StraightBoundary;
 template <int, int, int> class TriaAccessor;
 template <int spacedim> class TriaAccessor<0,1,spacedim>;
 
+
 namespace internal
 {
   namespace Triangulation
@@ -120,6 +121,12 @@ struct CellData
     types::boundary_id boundary_id;
     types::material_id material_id;
   };
+  /**
+   * Manifold identificator of this object. This identificator should
+   * be used to identify the manifold to which this object belongs,
+   * and from which this object will collect information on how to add
+   * points upon refinement.*/
+  types::manifold_id manifold_id;
 
   /**
    * Default constructor. Sets the vertex indices to invalid values and the boundary or material
@@ -1226,12 +1233,12 @@ private:
 
 public:
   /**
-   * Default boundary object. This is used
-   * for those boundaries for which no
-   * boundary object has been explicitly
-   * set using set_boundary().
+   * Default manifold object. This is used
+   * for those objects for which no
+   * boundary description has been explicitly
+   * set using set_manifold().
    */
-  static const StraightBoundary<dim,spacedim> straight_boundary;
+    static const StraightBoundary<dim,spacedim> straight_boundary;
 
   /**
    * Declare some symbolic names
@@ -1572,7 +1579,7 @@ public:
     virtual
     void
     create_notification (const Triangulation<dim, spacedim> &tria);
-  };
+  }; 
 
   /**
    * A structure that is used as an
@@ -1796,211 +1803,171 @@ public:
    *
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
-  void set_boundary (const types::boundary_id   number,
+  void set_boundary (const types::manifold_id   number,
                      const Boundary<dim,spacedim> &boundary_object);
 
+
   /**
-   * Reset those parts of the boundary with
-   * the given number to use a straight
-   * boundary approximation. This is the
-   * default state of a triangulation, and
-   * undoes assignment of a different
-   * boundary object by the function of
-   * same name and two arguments.
+   * Reset those parts of the boundary with the given number to use a
+   * straight boundary approximation. This is the default state of a
+   * triangulation, and undoes assignment of a different boundary
+   * object by the function of same name and two arguments.
    *
    * @ingroup boundary
    *
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
-  void set_boundary (const types::boundary_id number);
+  void set_boundary (const types::manifold_id number);
+    
+  /**
+   * Reset those parts of the triangulation with the given manifold_id
+   * to use a FlatManifold object. This is the default state of a
+   * triangulation, and undoes assignment of a different Manifold
+   * object by the function of same name and two arguments.
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  void set_manifold (const types::manifold_id number);
 
   /**
-   * Return a constant reference to
-   * a boundary object used for
-   * this triangulation.  Number is
-   * the same as in
-   * @p set_boundary
+   * Return a constant reference to a boundary object used for this
+   * triangulation.  Number is the same as in @p set_boundary
    *
    * @ingroup boundary
    *
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
-  const Boundary<dim,spacedim> &get_boundary (const types::boundary_id number) const;
+  const Boundary<dim,spacedim> &get_boundary (const types::manifold_id number) const;
 
   /**
-   * Returns a vector containing
-   * all boundary indicators
-   * assigned to boundary faces of
-   * this Triangulation
-   * object. Note, that each
-   * boundary indicator is reported
-   * only once. The size of the
-   * return vector will represent
-   * the number of different
-   * indicators (which is greater
-   * or equal one).
+   * Return a constant reference to a Manifold object used for this
+   * triangulation.  Number is the same as in @p set_manifold
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */    
+  const Boundary<dim,spacedim> &get_manifold (const types::manifold_id number) const;
+
+  /**
+   * Returns a vector containing all boundary indicators assigned to
+   * boundary faces of this Triangulation object. Note, that each
+   * boundary indicator is reported only once. The size of the return
+   * vector will represent the number of different indicators (which
+   * is greater or equal one).
    *
    * @ingroup boundary
    *
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
   std::vector<types::boundary_id> get_boundary_indicators() const;
-
+    
+  /**
+   * Returns a vector containing all manifold indicators assigned to
+   * the objects of this Triangulation. Note, that each manifold
+   * indicator is reported only once. The size of the return vector
+   * will represent the number of different indicators (which is
+   * greater or equal one).
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  std::vector<types::manifold_id> get_manifold_ids() const;
+    
   /**
-   *  Copy a triangulation. This
-   *  operation is not cheap, so
-   *  you should be careful with
-   *  using this. We do not
-   *  implement this function as a
-   *  copy constructor, since it
-   *  makes it easier to maintain
-   *  collections of triangulations
-   *  if you can assign them values
+   *  Copy a triangulation. This operation is not cheap, so you should
+   *  be careful with using this. We do not implement this function as
+   *  a copy constructor, since it makes it easier to maintain
+   *  collections of triangulations if you can assign them values
    *  later on.
    *
-   *  Keep in mind that this
-   *  function also copies the
-   *  pointer to the boundary
-   *  descriptor previously set by
-   *  the @p set_boundary
-   *  function. You must therefore
-   *  also guarantee that the
-   *  boundary objects has a
-   *  lifetime at least as long as
-   *  the copied triangulation.
-   *
-   *  This triangulation must be
-   *  empty beforehand.
-   *
-   *  The function is made
-   *  @p virtual since some
-   *  derived classes might want to
-   *  disable or extend the
-   *  functionality of this
-   *  function.
-   *
-   *  @note Calling this function triggers
-   *  the 'copy' signal on old_tria, i.e.
-   *  the triangulation being copied <i>from</i>.
-   *  It also triggers the 'create' signal of
-   *  the current triangulation.
-   *  See the section on signals in the
-   *  general documentation for more information.
-   *
-   *  @note The list of connections to
-   *  signals is not copied from the old
-   *  to the new triangulation since
-   *  these connections were established
-   *  to monitor how the old triangulation
-   *  changes, not how any triangulation
-   *  it may be copied to changes.
+   *  Keep in mind that this function also copies the pointer to the
+   *  boundary descriptor previously set by the @p set_boundary
+   *  function and to the Manifold object previously set by the @p
+   *  set_manifold function. You must therefore also guarantee that
+   *  the boundary and manifold objects have a lifetime at least as
+   *  long as the copied triangulation.
+   *
+   *  This triangulation must be empty beforehand.
+   *
+   *  The function is made @p virtual since some derived classes might
+   *  want to disable or extend the functionality of this function.
+   *
+   *  @note Calling this function triggers the 'copy' signal on
+   *  old_tria, i.e.  the triangulation being copied <i>from</i>.  It
+   *  also triggers the 'create' signal of the current triangulation.
+   *  See the section on signals in the general documentation for more
+   *  information.
+   *
+   *  @note The list of connections to signals is not copied from the
+   *  old to the new triangulation since these connections were
+   *  established to monitor how the old triangulation changes, not
+   *  how any triangulation it may be copied to changes.
    */
   virtual void copy_triangulation (const Triangulation<dim, spacedim> &old_tria);
 
   /**
-   * Create a triangulation from a
-   * list of vertices and a list of
-   * cells, each of the latter
-   * being a list of <tt>1<<dim</tt>
-   * vertex indices. The
-   * triangulation must be empty
-   * upon calling this function and
-   * the cell list should be useful
-   * (connected domain, etc.).
-   *
-   * Material data for the cells is
-   * given within the @p cells
-   * array, while boundary
-   * information is given in the
-   * @p subcelldata field.
-   *
-   * The numbering of vertices
-   * within the @p cells array is
-   * subject to some constraints;
-   * see the general class
-   * documentation for this.
-   *
-   * For conditions when this
-   * function can generate a valid
-   * triangulation, see the
-   * documentation of this class,
-   * and the GridIn and
-   * GridReordering class.
-   *
-   * If the
-   * <code>check_for_distorted_cells</code>
-   * flag was specified upon
-   * creation of this object, at
-   * the very end of its operation,
-   * the current function walks
-   * over all cells and verifies
-   * that none of the cells is
-   * deformed (see the entry on
-   * @ref GlossDistorted "distorted cells"
-   in the glossary), where
-   * we call a cell deformed if the
-   * determinant of the Jacobian of
-   * the mapping from reference
-   * cell to real cell is negative
-   * at least at one of the
-   * vertices (this computation is
-   * done using the
-   * GeometryInfo::jacobian_determinants_at_vertices
-   * function). If there are
-   * deformed cells, this function
-   * throws an exception of kind
-   * DistortedCellList. Since this
-   * happens after all data
-   * structures have been set up,
-   * you can catch and ignore this
-   * exception if you know what you
-   * do -- for example, it may be
-   * that the determinant is zero
-   * (indicating that you have
-   * collapsed edges in a cell) but
-   * that this is ok because you
-   * didn't intend to integrate on
-   * this cell anyway. On the other
-   * hand, deformed cells are often
-   * a sign of a mesh that is too
-   * coarse to resolve the geometry
-   * of the domain, and in this
-   * case ignoring the exception is
-   * probably unwise.
+   * Create a triangulation from a list of vertices and a list of
+   * cells, each of the latter being a list of <tt>1<<dim</tt> vertex
+   * indices. The triangulation must be empty upon calling this
+   * function and the cell list should be useful (connected domain,
+   * etc.).
+   *
+   * Material data for the cells is given within the @p cells array,
+   * while boundary information is given in the @p subcelldata field.
+   *
+   * The numbering of vertices within the @p cells array is subject to
+   * some constraints; see the general class documentation for this.
+   *
+   * For conditions when this function can generate a valid
+   * triangulation, see the documentation of this class, and the
+   * GridIn and GridReordering class.
+   *
+   * If the <code>check_for_distorted_cells</code> flag was specified
+   * upon creation of this object, at the very end of its operation,
+   * the current function walks over all cells and verifies that none
+   * of the cells is deformed (see the entry on @ref GlossDistorted
+   * "distorted cells" in the glossary), where we call a cell deformed
+   * if the determinant of the Jacobian of the mapping from reference
+   * cell to real cell is negative at least at one of the vertices
+   * (this computation is done using the
+   * GeometryInfo::jacobian_determinants_at_vertices function). If
+   * there are deformed cells, this function throws an exception of
+   * kind DistortedCellList. Since this happens after all data
+   * structures have been set up, you can catch and ignore this
+   * exception if you know what you do -- for example, it may be that
+   * the determinant is zero (indicating that you have collapsed edges
+   * in a cell) but that this is ok because you didn't intend to
+   * integrate on this cell anyway. On the other hand, deformed cells
+   * are often a sign of a mesh that is too coarse to resolve the
+   * geometry of the domain, and in this case ignoring the exception
+   * is probably unwise.
    *
    * @note This function is used in step-14 .
    *
-   * @note This function triggers the create
-   * signal after doing its work. See the
-   * section on signals in the general
-   * documentation of this class.
+   * @note This function triggers the create signal after doing its
+   * work. See the section on signals in the general documentation of
+   * this class.
    *
-   * @note The check for distorted
-   * cells is only done if
-   * dim==spacedim, as otherwise
-   * cells can legitimately be
-   * twisted if the manifold they
-   * describe is twisted.
+   * @note The check for distorted cells is only done if
+   * dim==spacedim, as otherwise cells can legitimately be twisted if
+   * the manifold they describe is twisted.
    */
   virtual void create_triangulation (const std::vector<Point<spacedim> >    &vertices,
                                      const std::vector<CellData<dim> > &cells,
                                      const SubCellData                 &subcelldata);
 
   /**
-   * For backward compatibility,
-   * only. This function takes the
-   * cell data in the ordering as
-   * requested by deal.II versions
-   * up to 5.2, converts it to the
-   * new (lexicographic) ordering
-   * and calls
+   * For backward compatibility, only. This function takes the cell
+   * data in the ordering as requested by deal.II versions up to 5.2,
+   * converts it to the new (lexicographic) ordering and calls
    * create_triangulation().
    *
-   * @note This function internally
-   * calls create_triangulation and
-   * therefore can throw the same
-   * exception as the other
-   * function.
+   * @note This function internally calls create_triangulation and
+   * therefore can throw the same exception as the other function.
    */
   virtual void create_triangulation_compatibility (
     const std::vector<Point<spacedim> >    &vertices,
@@ -2008,34 +1975,22 @@ public:
     const SubCellData                 &subcelldata);
 
   /**
-   * Revert or flip the
-   * direction_flags of a
-   * dim<spacedim triangulation,
-   * see @ref GlossDirectionFlag .
+   * Revert or flip the direction_flags of a dim<spacedim
+   * triangulation, see @ref GlossDirectionFlag .
    *
-   * This function throws an
-   * exception if dim equals
-   * spacedim.
+   * This function throws an exception if dim equals spacedim.
   */
   void flip_all_direction_flags();
 
   /**
-   * Distort the grid by randomly
-   * moving around all the vertices
-   * of the grid.  The direction of
-   * moving is random, while the
-   * length of the shift vector has
-   * a value of @p factor times
-   * the minimal length of the
-   * active lines adjacent to this
-   * vertex. Note that @p factor
-   * should obviously be well below
-   * <tt>0.5</tt>.
+   * Distort the grid by randomly moving around all the vertices of
+   * the grid.  The direction of moving is random, while the length of
+   * the shift vector has a value of @p factor times the minimal
+   * length of the active lines adjacent to this vertex. Note that @p
+   * factor should obviously be well below <tt>0.5</tt>.
    *
-   * If @p keep_boundary is set to
-   * @p true (which is the
-   * default), then boundary
-   * vertices are not moved.
+   * If @p keep_boundary is set to @p true (which is the default),
+   * then boundary vertices are not moved.
    *
    * @deprecated Use GridTools::distort_random instead.
    */
@@ -2048,154 +2003,95 @@ public:
    */
   /*@{*/
   /**
-   *  Flag all active cells for
-   *  refinement.  This will refine
-   *  all cells of all levels which
-   *  are not already refined
-   *  (i.e. only cells are refined
-   *  which do not yet have
-   *  children). The cells are only
-   *  flagged, not refined, thus
-   *  you have the chance to save
-   *  the refinement flags.
+   *  Flag all active cells for refinement.  This will refine all
+   *  cells of all levels which are not already refined (i.e. only
+   *  cells are refined which do not yet have children). The cells are
+   *  only flagged, not refined, thus you have the chance to save the
+   *  refinement flags.
    */
   void set_all_refine_flags ();
 
   /**
-   * Refine all cells @p times times, by
-   * alternatingly calling
-   * set_all_refine_flags and
-   * execute_coarsening_and_refinement.
-   *
-   * The latter function may throw an
-   * exception if it creates cells that are
-   * distorted (see its documentation for
-   * an explanation). This exception will
-   * be propagated through this function if
-   * that happens, and you may not get the
-   * actual number of refinement steps in
-   * that case.
-   *
-   * @note This function triggers the pre-
-   * and post-refinement signals before
-   * and after doing each individual refinement
-   * cycle (i.e. more than once if
-   * times > 1) . See the
-   * section on signals in the general
-   * documentation of this class.
+   * Refine all cells @p times times, by alternatingly calling
+   * set_all_refine_flags and execute_coarsening_and_refinement.
+   *
+   * The latter function may throw an exception if it creates cells
+   * that are distorted (see its documentation for an
+   * explanation). This exception will be propagated through this
+   * function if that happens, and you may not get the actual number
+   * of refinement steps in that case.
+   *
+   * @note This function triggers the pre- and post-refinement signals
+   * before and after doing each individual refinement cycle
+   * (i.e. more than once if times > 1) . See the section on signals
+   * in the general documentation of this class.
    */
   void refine_global (const unsigned int times = 1);
 
   /**
-   * Execute both refinement and
-   * coarsening of the
-   * triangulation.
-   *
-   * The function resets all refinement and
-   * coarsening flags to false. It uses the
-   * user flags for internal purposes. They
-   * will therefore be overwritten by
-   * undefined content.
-   *
-   * To allow user programs to fix
-   * up these cells if that is
-   * desired, this function after
-   * completing all other work may
-   * throw an exception of type
-   * DistortedCellList that
-   * contains a list of those cells
-   * that have been refined and
-   * have at least one child that
-   * is distorted. The function
-   * does not create such an
-   * exception if no cells have
-   * created distorted children.
-   * Note that for the check for
-   * distorted cells to happen, the
-   * <code>check_for_distorted_cells</code>
-   * flag has to be specified upon
-   * creation of a triangulation
-   * object.
-   *
-   * See the general docs for more
-   * information.
-   *
-   * @note This function triggers the pre-
-   * and post-refinement signals before
-   * and after doing its work. See the
-   * section on signals in the general
-   * documentation of this class.
+   * Execute both refinement and coarsening of the triangulation.
    *
-   * @note If the boundary description is
-   * sufficiently irregular, it can
-   * happen that some of the
-   * children produced by mesh
-   * refinement are distorted (see
-   * the extensive discussion on
-   * @ref GlossDistorted "distorted cells").
+   * The function resets all refinement and coarsening flags to
+   * false. It uses the user flags for internal purposes. They will
+   * therefore be overwritten by undefined content.
+   *
+   * To allow user programs to fix up these cells if that is desired,
+   * this function after completing all other work may throw an
+   * exception of type DistortedCellList that contains a list of those
+   * cells that have been refined and have at least one child that is
+   * distorted. The function does not create such an exception if no
+   * cells have created distorted children.  Note that for the check
+   * for distorted cells to happen, the
+   * <code>check_for_distorted_cells</code> flag has to be specified
+   * upon creation of a triangulation object.
+   *
+   * See the general docs for more information.
+   *
+   * @note This function triggers the pre- and post-refinement signals
+   * before and after doing its work. See the section on signals in
+   * the general documentation of this class.
    *
-   * @note This function is
-   * <tt>virtual</tt> to allow
-   * derived classes to insert
-   * hooks, such as saving
-   * refinement flags and the like
-   * (see e.g. the
-   * PersistentTriangulation
-   * class).
+   * @note If the boundary description is sufficiently irregular, it
+   * can happen that some of the children produced by mesh refinement
+   * are distorted (see the extensive discussion on @ref
+   * GlossDistorted "distorted cells").
+   *
+   * @note This function is <tt>virtual</tt> to allow derived classes
+   * to insert hooks, such as saving refinement flags and the like
+   * (see e.g. the PersistentTriangulation class).
    */
   virtual void execute_coarsening_and_refinement ();
 
   /**
-   * Do both preparation for
-   * refinement and coarsening as
-   * well as mesh smoothing.
-   *
-   * Regarding the refinement
-   * process it fixes the closure
-   * of the refinement in
-   * <tt>dim>=2</tt> (make sure that no
-   * two cells are adjacent with a
-   * refinement level differing
-   * with more than one), etc.  It
-   * performs some mesh smoothing
-   * if the according flag was
-   * given to the constructor of
-   * this class.  The function
-   * returns whether additional
-   * cells have been flagged for
-   * refinement.
+   * Do both preparation for refinement and coarsening as well as mesh
+   * smoothing.
+   *
+   * Regarding the refinement process it fixes the closure of the
+   * refinement in <tt>dim>=2</tt> (make sure that no two cells are
+   * adjacent with a refinement level differing with more than one),
+   * etc.  It performs some mesh smoothing if the according flag was
+   * given to the constructor of this class.  The function returns
+   * whether additional cells have been flagged for refinement.
    *
-   * See the general doc of this
-   * class for more information on
+   * See the general doc of this class for more information on
    * smoothing upon refinement.
    *
-   * Regarding the coarsening part,
-   * flagging and deflagging cells
-   * in preparation of the actual
-   * coarsening step are done. This
-   * includes deleting coarsen
-   * flags from cells which may not
-   * be deleted (e.g. because one
-   * neighbor is more refined
-   * than the cell), doing some
-   * smoothing, etc.
-   *
-   * The effect is that only those
-   * cells are flagged for
-   * coarsening which will actually
-   * be coarsened. This includes
-   * the fact that all flagged
-   * cells belong to parent cells
-   * of which all children are
+   * Regarding the coarsening part, flagging and deflagging cells in
+   * preparation of the actual coarsening step are done. This includes
+   * deleting coarsen flags from cells which may not be deleted
+   * (e.g. because one neighbor is more refined than the cell), doing
+   * some smoothing, etc.
+   *
+   * The effect is that only those cells are flagged for coarsening
+   * which will actually be coarsened. This includes the fact that all
+   * flagged cells belong to parent cells of which all children are
    * flagged.
    *
-   * The function returns whether
-   * some cells' flagging has been
+   * The function returns whether some cells' flagging has been
    * changed in the process.
    *
-   * This function uses the user
-   * flags, so store them if you
-   * still need them afterwards.
+   * This function uses the user flags, so store them if you still
+   * need them afterwards.
    */
   bool prepare_coarsening_and_refinement ();
   /** @} */
@@ -2206,35 +2102,26 @@ public:
   /** @{ */
 
   /**
-   *  Add a
-   *  RefinementListener. Adding
-   *  listeners to the
-   *  Triangulation allows other
-   *  classes to be informed when
-   *  the Triangulation is refined.
+   *  Add a RefinementListener. Adding listeners to the Triangulation
+   *  allows other classes to be informed when the Triangulation is
+   *  refined.
    *
-   * @note The use of this function has been
-   * superseded by the signals mechanism.
-   * See the general documentation of the
-   * Triangulation class for more information.
+   * @note The use of this function has been superseded by the signals
+   * mechanism.  See the general documentation of the Triangulation
+   * class for more information.
    *
    * @deprecated
    */
   void add_refinement_listener (RefinementListener &listener) const DEAL_II_DEPRECATED;
 
   /**
-   *  Remove a
-   *  RefinementListener. When some
-   *  class needs no longer to be
-   *  informed about refinements,
-   *  the listener should be
-   *  removed from the
-   *  Triangulation.
+   *  Remove a RefinementListener. When some class needs no longer to
+   *  be informed about refinements, the listener should be removed
+   *  from the Triangulation.
    *
-   * @note The use of this function has been
-   * superseded by the signals mechanism.
-   * See the general documentation of the
-   * Triangulation class for more information.
+   * @note The use of this function has been superseded by the signals
+   * mechanism.  See the general documentation of the Triangulation
+   * class for more information.
    *
    * @deprecated
    */
@@ -2270,29 +2157,25 @@ public:
    */
   /*@{*/
   /**
-   *  Save the addresses of the
-   *  cells which are flagged for
-   *  refinement to @p out.  For
-   *  usage, read the general
-   *  documentation for this class.
+   *  Save the addresses of the cells which are flagged for refinement
+   *  to @p out.  For usage, read the general documentation for this
+   *  class.
    */
   void save_refine_flags (std::ostream &out) const;
 
   /**
-   * Same as above, but store the flags to
-   * a bitvector rather than to a file.
+   * Same as above, but store the flags to a bitvector rather than to
+   * a file.
    */
   void save_refine_flags (std::vector<bool> &v) const;
 
   /**
-   *  Read the information stored by
-   *  @p save_refine_flags.
+   *  Read the information stored by @p save_refine_flags.
    */
   void load_refine_flags (std::istream &in);
 
   /**
-   *  Read the information stored by
-   *  @p save_refine_flags.
+   *  Read the information stored by @p save_refine_flags.
    */
   void load_refine_flags (const std::vector<bool> &v);
 
@@ -2302,8 +2185,8 @@ public:
   void save_coarsen_flags (std::ostream &out) const;
 
   /**
-   * Same as above, but store the flags to
-   * a bitvector rather than to a file.
+   * Same as above, but store the flags to a bitvector rather than to
+   * a file.
    */
   void save_coarsen_flags (std::vector<bool> &v) const;
 
@@ -2318,9 +2201,8 @@ public:
   void load_coarsen_flags (const std::vector<bool> &v);
 
   /**
-   * Return whether this triangulation has
-   * ever undergone anisotropic (as opposed
-   * to only isotropic) refinement.
+   * Return whether this triangulation has ever undergone anisotropic
+   * (as opposed to only isotropic) refinement.
    */
   bool get_anisotropic_refinement_flag() const;
   /*@}*/
@@ -2331,277 +2213,229 @@ public:
    */
   /*@{*/
   /**
-   *  Clear all user flags.
-  *  See also @ref GlossUserFlags .
+   *  Clear all user flags.  See also @ref GlossUserFlags .
    */
   void clear_user_flags ();
 
   /**
-   *  Save all user flags. See the general
-   *  documentation for this class
-   *  and the documentation for the
-   *  @p save_refine_flags for more
-   *  details.
-  *  See also @ref GlossUserFlags .
+   *  Save all user flags. See the general documentation for this
+   *  class and the documentation for the @p save_refine_flags for
+   *  more details.  See also @ref GlossUserFlags .
    */
   void save_user_flags (std::ostream &out) const;
 
   /**
-   *  Same as above, but store the flags to
-   *  a bitvector rather than to a file.
-   *  The output vector is resized if
-   *  necessary.
-  *  See also @ref GlossUserFlags .
+   *  Same as above, but store the flags to a bitvector rather than to
+   *  a file.  The output vector is resized if necessary.  See also
+   *  @ref GlossUserFlags .
    */
   void save_user_flags (std::vector<bool> &v) const;
 
   /**
-   *  Read the information stored by
-   *  @p save_user_flags.
-  *  See also @ref GlossUserFlags .
+   *  Read the information stored by @p save_user_flags.  See also
+   *  @ref GlossUserFlags .
    */
   void load_user_flags (std::istream &in);
 
   /**
-   *  Read the information stored by
-   *  @p save_user_flags.
-  *  See also @ref GlossUserFlags .
+   *  Read the information stored by @p save_user_flags.  See also
+   *  @ref GlossUserFlags .
    */
   void load_user_flags (const std::vector<bool> &v);
 
   /**
-   *  Clear all user flags on lines.
-  *  See also @ref GlossUserFlags .
+   *  Clear all user flags on lines.  See also @ref GlossUserFlags .
    */
   void clear_user_flags_line ();
 
   /**
-   * Save the user flags on lines.
-  * See also @ref GlossUserFlags .
+   * Save the user flags on lines.  See also @ref GlossUserFlags .
    */
   void save_user_flags_line (std::ostream &out) const;
 
   /**
-   * Same as above, but store the flags to
-   * a bitvector rather than to a file.
-   * The output vector is resized if
-   * necessary.
-  * See also @ref GlossUserFlags .
+   * Same as above, but store the flags to a bitvector rather than to
+   * a file.  The output vector is resized if necessary.  See also
+   * @ref GlossUserFlags .
    */
   void save_user_flags_line (std::vector<bool> &v) const;
 
   /**
-   * Load the user flags located on lines.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on lines.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_line (std::istream &in);
 
   /**
-   * Load the user flags located on lines.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on lines.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_line (const std::vector<bool> &v);
 
   /**
-   *  Clear all user flags on quads.
-  * See also @ref GlossUserFlags .
+   *  Clear all user flags on quads.  See also @ref GlossUserFlags .
    */
   void clear_user_flags_quad ();
 
   /**
-   * Save the user flags on quads.
-  * See also @ref GlossUserFlags .
+   * Save the user flags on quads.  See also @ref GlossUserFlags .
    */
   void save_user_flags_quad (std::ostream &out) const;
 
   /**
-   * Same as above, but store the flags to
-   * a bitvector rather than to a file.
-   * The output vector is resized if
-   * necessary.
-  * See also @ref GlossUserFlags .
+   * Same as above, but store the flags to a bitvector rather than to
+   * a file.  The output vector is resized if necessary.  See also
+   * @ref GlossUserFlags .
    */
   void save_user_flags_quad (std::vector<bool> &v) const;
 
   /**
-   * Load the user flags located on quads.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on quads.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_quad (std::istream &in);
 
   /**
-   * Load the user flags located on quads.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on quads.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_quad (const std::vector<bool> &v);
 
 
   /**
-   * Clear all user flags on quads.
-  * See also @ref GlossUserFlags .
+   * Clear all user flags on quads.  See also @ref GlossUserFlags .
    */
   void clear_user_flags_hex ();
 
   /**
-   * Save the user flags on hexs.
-  * See also @ref GlossUserFlags .
+   * Save the user flags on hexs.  See also @ref GlossUserFlags .
    */
   void save_user_flags_hex (std::ostream &out) const;
 
   /**
-   * Same as above, but store the flags to
-   * a bitvector rather than to a file.
-   * The output vector is resized if
-   * necessary.
-  * See also @ref GlossUserFlags .
+   * Same as above, but store the flags to a bitvector rather than to
+   * a file.  The output vector is resized if necessary.  See also
+   * @ref GlossUserFlags .
    */
   void save_user_flags_hex (std::vector<bool> &v) const;
 
   /**
-   * Load the user flags located on hexs.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on hexs.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_hex (std::istream &in);
 
   /**
-   * Load the user flags located on hexs.
-  * See also @ref GlossUserFlags .
+   * Load the user flags located on hexs.  See also @ref
+   * GlossUserFlags .
    */
   void load_user_flags_hex (const std::vector<bool> &v);
 
   /**
-   * Clear all user pointers and
-   * indices and allow the use of
-   * both for next access.
-  * See also @ref GlossUserData .
+   * Clear all user pointers and indices and allow the use of both for
+   * next access.  See also @ref GlossUserData .
    */
   void clear_user_data ();
 
   /**
-   * @deprecated User
-   * clear_user_data() instead.
+   * @deprecated User clear_user_data() instead.
    *
-   *  Clear all user pointers.
-  *  See also @ref GlossUserData .
+   *  Clear all user pointers.  See also @ref GlossUserData .
    */
   void clear_user_pointers () DEAL_II_DEPRECATED;
 
   /**
-   * Save all user indices. The
-   * output vector is resized if
-   * necessary.
-  * See also @ref GlossUserData .
+   * Save all user indices. The output vector is resized if necessary.
+   * See also @ref GlossUserData .
    */
   void save_user_indices (std::vector<unsigned int> &v) const;
 
   /**
-   * Read the information stored by
-   * save_user_indices().
-  * See also @ref GlossUserData .
+   * Read the information stored by save_user_indices().  See also
+   * @ref GlossUserData .
    */
   void load_user_indices (const std::vector<unsigned int> &v);
 
   /**
-   * Save all user pointers. The
-   * output vector is resized if
-   * necessary.
-  * See also @ref GlossUserData .
+   * Save all user pointers. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_pointers (std::vector<void *> &v) const;
 
   /**
-   * Read the information stored by
-   * save_user_pointers().
-  * See also @ref GlossUserData .
+   * Read the information stored by save_user_pointers().  See also
+   * @ref GlossUserData .
    */
   void load_user_pointers (const std::vector<void *> &v);
 
   /**
-   * Save the user indices on
-   * lines. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user indices on lines. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_indices_line (std::vector<unsigned int> &v) const;
 
   /**
-   * Load the user indices located
-   * on lines.
-  * See also @ref GlossUserData .
+   * Load the user indices located on lines.  See also @ref
+   * GlossUserData .
    */
   void load_user_indices_line (const std::vector<unsigned int> &v);
 
   /**
-   * Save the user indices on
-   * quads. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user indices on quads. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_indices_quad (std::vector<unsigned int> &v) const;
 
   /**
-   * Load the user indices located
-   * on quads.
-  * See also @ref GlossUserData .
+   * Load the user indices located on quads.  See also @ref
+   * GlossUserData .
    */
   void load_user_indices_quad (const std::vector<unsigned int> &v);
 
   /**
-   * Save the user indices on
-   * hexes. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user indices on hexes. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_indices_hex (std::vector<unsigned int> &v) const;
 
   /**
-   * Load the user indices located
-   * on hexs.
-  * See also @ref GlossUserData .
+   * Load the user indices located on hexs.  See also @ref
+   * GlossUserData .
    */
   void load_user_indices_hex (const std::vector<unsigned int> &v);
   /**
-   * Save the user indices on
-   * lines. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user indices on lines. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_pointers_line (std::vector<void *> &v) const;
 
   /**
-   * Load the user pointers located
-   * on lines.
-  * See also @ref GlossUserData .
+   * Load the user pointers located on lines.  See also @ref
+   * GlossUserData .
    */
   void load_user_pointers_line (const std::vector<void *> &v);
 
   /**
-   * Save the user pointers on
-   * quads. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user pointers on quads. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_pointers_quad (std::vector<void *> &v) const;
 
   /**
-   * Load the user pointers located
-   * on quads.
-  * See also @ref GlossUserData .
+   * Load the user pointers located on quads.  See also @ref
+   * GlossUserData .
    */
   void load_user_pointers_quad (const std::vector<void *> &v);
 
   /**
-   * Save the user pointers on
-   * hexes. The output vector is
-   * resized if necessary.
-  * See also @ref GlossUserData .
+   * Save the user pointers on hexes. The output vector is resized if
+   * necessary.  See also @ref GlossUserData .
    */
   void save_user_pointers_hex (std::vector<void *> &v) const;
 
   /**
-   * Load the user pointers located
-   * on hexs.
-  * See also @ref GlossUserData .
+   * Load the user pointers located on hexs.  See also @ref
+   * GlossUserData .
    */
   void load_user_pointers_hex (const std::vector<void *> &v);
   /*@}*/
@@ -2612,8 +2446,7 @@ public:
    */
   /*@{*/
   /**
-   *  Iterator to the first used cell
-   *  on level @p level.
+   *  Iterator to the first used cell on level @p level.
    */
   cell_iterator        begin       (const unsigned int level = 0) const;
 
@@ -2632,18 +2465,14 @@ public:
   active_cell_iterator begin_active(const unsigned int level = 0) const;
 
   /**
-   *  Iterator past the end; this
-   *  iterator serves for comparisons of
-   *  iterators with past-the-end or
-   *  before-the-beginning states.
+   *  Iterator past the end; this iterator serves for comparisons of
+   *  iterators with past-the-end or before-the-beginning states.
    */
   cell_iterator        end () const;
 
   /**
-   * Return an iterator which is the first
-   * iterator not on level. If @p level is
-   * the last level, then this returns
-   * <tt>end()</tt>.
+   * Return an iterator which is the first iterator not on level. If
+   * @p level is the last level, then this returns <tt>end()</tt>.
    */
   cell_iterator        end (const unsigned int level) const;
 
@@ -2656,14 +2485,12 @@ public:
 
 
   /**
-   *  Return an iterator pointing to the
-   *  last used cell.
+   *  Return an iterator pointing to the last used cell.
    */
   cell_iterator        last () const;
 
   /**
-   *  Return an iterator pointing to the
-   *  last active cell.
+   *  Return an iterator pointing to the last active cell.
    */
   active_cell_iterator last_active () const;
   /*@}*/
@@ -2681,16 +2508,13 @@ public:
   face_iterator        begin_face       () const;
 
   /**
-   *  Iterator to the first active
-   *  face.
+   *  Iterator to the first active face.
    */
   active_face_iterator begin_active_face() const;
 
   /**
-   *  Iterator past the end; this
-   *  iterator serves for comparisons of
-   *  iterators with past-the-end or
-   *  before-the-beginning states.
+   *  Iterator past the end; this iterator serves for comparisons of
+   *  iterators with past-the-end or before-the-beginning states.
    */
   face_iterator        end_face () const;
   /*@}*/
@@ -2704,31 +2528,23 @@ public:
   /*@{*/
 
   /**
-   * In the following, most
-   * functions are provided in two
-   * versions, with and without an
-   * argument describing the
-   * level. The versions with this
-   * argument are only applicable
-   * for objects describing the
-   * cells of the present
-   * triangulation. For example: in
-   * 2D <tt>n_lines(level)</tt>
-   * cannot be called, only
-   * <tt>n_lines()</tt>, as lines
-   * are faces in 2D and therefore
-   * have no level.
+   * In the following, most functions are provided in two versions,
+   * with and without an argument describing the level. The versions
+   * with this argument are only applicable for objects describing the
+   * cells of the present triangulation. For example: in 2D
+   * <tt>n_lines(level)</tt> cannot be called, only
+   * <tt>n_lines()</tt>, as lines are faces in 2D and therefore have
+   * no level.
    */
 
   /**
-   *  Return total number of used lines,
-   *  active or not.
+   *  Return total number of used lines, active or not.
    */
   unsigned int n_lines () const;
 
   /**
-   *  Return total number of used lines,
-   *  active or not on level @p level.
+   *  Return total number of used lines, active or not on level @p
+   *  level.
    */
   unsigned int n_lines (const unsigned int level) const;
 
@@ -2738,227 +2554,173 @@ public:
   unsigned int n_active_lines () const;
 
   /**
-   *  Return total number of active lines,
-   *  on level @p level.
+   *  Return total number of active lines, on level @p level.
    */
   unsigned int n_active_lines (const unsigned int level) const;
 
   /**
-   *  Return total number of used quads,
-   *  active or not.
+   *  Return total number of used quads, active or not.
    */
   unsigned int n_quads () const;
 
   /**
-   *  Return total number of used quads,
-   *  active or not on level @p level.
+   *  Return total number of used quads, active or not on level @p
+   *  level.
    */
   unsigned int n_quads (const unsigned int level) const;
 
   /**
-   *  Return total number of active quads,
-   *  active or not.
+   *  Return total number of active quads, active or not.
    */
   unsigned int n_active_quads () const;
 
   /**
-   *  Return total number of active quads,
-   *  active or not on level @p level.
+   *  Return total number of active quads, active or not on level @p
+   *  level.
    */
   unsigned int n_active_quads (const unsigned int level) const;
 
   /**
-   *  Return total number of used
-   *  hexahedra, active or not.
+   *  Return total number of used hexahedra, active or not.
    */
   unsigned int n_hexs() const;
 
   /**
-   *  Return total number of used
-   *  hexahedra, active or not on level @p
+   *  Return total number of used hexahedra, active or not on level @p
    *  level.
    */
   unsigned int n_hexs(const unsigned int level) const;
 
   /**
-   *  Return total number of active
-   *  hexahedra, active or not.
+   *  Return total number of active hexahedra, active or not.
    */
   unsigned int n_active_hexs() const;
 
   /**
-   *  Return total number of active
-   *  hexahedra, active or not on level @p
-   *  level.
+   *  Return total number of active hexahedra, active or not on level
+   *  @p level.
    */
   unsigned int n_active_hexs(const unsigned int level) const;
 
   /**
-   *  Return total number of used cells,
-   *  active or not.  Maps to
-   *  <tt>n_lines()</tt> in one space
-   *  dimension and so on.
+   *  Return total number of used cells, active or not.  Maps to
+   *  <tt>n_lines()</tt> in one space dimension and so on.
    */
   unsigned int n_cells () const;
 
   /**
-   *  Return total number of used cells,
-   *  active or not, on level @p level.
-   *  Maps to <tt>n_lines(level)</tt> in
-   *  one space dimension and so on.
+   *  Return total number of used cells, active or not, on level @p
+   *  level.  Maps to <tt>n_lines(level)</tt> in one space dimension
+   *  and so on.
    */
   unsigned int n_cells (const unsigned int level) const;
 
   /**
-   *  Return total number of active cells.
-   *  Maps to <tt>n_active_lines()</tt> in
-   *  one space dimension and so on.
+   *  Return total number of active cells.  Maps to
+   *  <tt>n_active_lines()</tt> in one space dimension and so on.
    */
   unsigned int n_active_cells () const;
 
   /**
-   * Return total number of active cells on
-   * level @p level.  Maps to
-   * <tt>n_active_lines(level)</tt> in one
-   * space dimension and so on.
+   * Return total number of active cells on level @p level.  Maps to
+   * <tt>n_active_lines(level)</tt> in one space dimension and so on.
    */
   unsigned int n_active_cells (const unsigned int level) const;
 
   /**
-   *  Return total number of used faces,
-   *  active or not.  In 2D, the result
-   *  equals n_lines(), while in 3D it
-   *  equals n_quads(). Since there are no
-   *  face objects in 1d, the function
-   *  returns zero in 1d.
+   *  Return total number of used faces, active or not.  In 2D, the
+   *  result equals n_lines(), while in 3D it equals n_quads(). Since
+   *  there are no face objects in 1d, the function returns zero in
+   *  1d.
    */
   unsigned int n_faces () const;
 
   /**
-   *  Return total number of active faces,
-   *  active or not.  In 2D, the result
-   *  equals n_active_lines(), while in 3D
-   *  it equals n_active_quads(). Since
-   *  there are no face objects in 1d, the
+   *  Return total number of active faces, active or not.  In 2D, the
+   *  result equals n_active_lines(), while in 3D it equals
+   *  n_active_quads(). Since there are no face objects in 1d, the
    *  function returns zero in 1d.
    */
   unsigned int n_active_faces () const;
 
   /**
-   * Return number of levels in use. This
-   * may be less than the number of levels
-   * existing in the triangulation if by
-   * coarsening the highest level was
-   * completely depopulated. That level is
-   * not removed, since it will most likely
-   * be repopulated soon by the next
-   * refinement process.
+   * Return number of levels in use. This may be less than the number
+   * of levels existing in the triangulation if by coarsening the
+   * highest level was completely depopulated. That level is not
+   * removed, since it will most likely be repopulated soon by the
+   * next refinement process.
    */
   unsigned int n_levels () const;
 
   /**
-   * Return the number of levels in use. This function is equivalent to
-   * n_levels() for a serial Triangulation, but gives the maximum of
-   * n_levels() over all processors for a parallel::distributed::Triangulation
-   * and therefore can be larger than n_levels().
+   * Return the number of levels in use. This function is equivalent
+   * to n_levels() for a serial Triangulation, but gives the maximum
+   * of n_levels() over all processors for a
+   * parallel::distributed::Triangulation and therefore can be larger
+   * than n_levels().
    */
   virtual unsigned int n_global_levels () const;
 
   /**
-   * Return the total number of
-   * vertices.  Some of them may
-   * not be used, which usually
-   * happens upon coarsening of a
-   * triangulation when some
-   * vertices are discarded, but we
-   * do not want to renumber the
-   * remaining ones, leading to
-   * holes in the numbers of used
-   * vertices.  You can get the
-   * number of used vertices using
-   * @p n_used_vertices function.
+   * Return the total number of vertices.  Some of them may not be
+   * used, which usually happens upon coarsening of a triangulation
+   * when some vertices are discarded, but we do not want to renumber
+   * the remaining ones, leading to holes in the numbers of used
+   * vertices.  You can get the number of used vertices using @p
+   * n_used_vertices function.
    */
   unsigned int n_vertices () const;
 
   /**
-   * Return a constant reference to
-   * all the vertices present in
-   * this triangulation. Note that
-   * not necessarily all vertices
-   * in this array are actually
-   * used; for example, if you
-   * coarsen a mesh, then some
-   * vertices are deleted, but
-   * their positions in this array
-   * are unchanged as the indices
-   * of vertices are only allocated
-   * once. You can find out about
-   * which vertices are actually
-   * used by the function
-   * get_used_vertices().
+   * Return a constant reference to all the vertices present in this
+   * triangulation. Note that not necessarily all vertices in this
+   * array are actually used; for example, if you coarsen a mesh, then
+   * some vertices are deleted, but their positions in this array are
+   * unchanged as the indices of vertices are only allocated once. You
+   * can find out about which vertices are actually used by the
+   * function get_used_vertices().
    */
   const std::vector<Point<spacedim> > &
   get_vertices () const;
 
   /**
-   * Return the number of vertices
-   * that are presently in use,
-   * i.e. belong to at least one
-   * used element.
+   * Return the number of vertices that are presently in use,
+   * i.e. belong to at least one used element.
    */
   unsigned int n_used_vertices () const;
 
   /**
-   * Return @p true if the vertex
-   * with this @p index is used.
+   * Return @p true if the vertex with this @p index is used.
    */
   bool vertex_used (const unsigned int index) const;
 
   /**
-   * Return a constant reference to
-   * the array of @p bools
-   * indicating whether an entry in
-   * the vertex array is used or
-   * not.
+   * Return a constant reference to the array of @p bools indicating
+   * whether an entry in the vertex array is used or not.
    */
   const std::vector<bool> &
   get_used_vertices () const;
 
   /**
-   * Return the maximum number of
-   * cells meeting at a common
-   * vertex. Since this number is
-   * an invariant under refinement,
-   * only the cells on the coarsest
-   * level are considered. The
-   * operation is thus reasonably
-   * fast. The invariance is only
-   * true for sufficiently many
-   * cells in the coarsest
-   * triangulation (e.g. for a
-   * single cell one would be
-   * returned), so a minimum of
-   * four is returned in two
-   * dimensions, 8 in three
-   * dimensions, etc, which is how
-   * many cells meet if the
-   * triangulation is refined.
-   *
-   * In one space dimension, two is
-   * returned.
+   * Return the maximum number of cells meeting at a common
+   * vertex. Since this number is an invariant under refinement, only
+   * the cells on the coarsest level are considered. The operation is
+   * thus reasonably fast. The invariance is only true for
+   * sufficiently many cells in the coarsest triangulation (e.g. for a
+   * single cell one would be returned), so a minimum of four is
+   * returned in two dimensions, 8 in three dimensions, etc, which is
+   * how many cells meet if the triangulation is refined.
+   *
+   * In one space dimension, two is returned.
    */
   unsigned int max_adjacent_cells () const;
 
   /**
-   * This function always returns
-   * @p invalid_subdomain_id
-   * but is there for compatibility
-   * with the derived
-   * @p parallel::distributed::Triangulation
-   * class. For distributed parallel triangulations
-   * this function returns the subdomain id
-   * of those cells that are owned
-   * by the current processor.
+   * This function always returns @p invalid_subdomain_id but is there
+   * for compatibility with the derived @p
+   * parallel::distributed::Triangulation class. For distributed
+   * parallel triangulations this function returns the subdomain id of
+   * those cells that are owned by the current processor.
    */
   virtual types::subdomain_id locally_owned_subdomain () const;
   /*@}*/
@@ -2969,214 +2731,134 @@ public:
   /*@{*/
 
   /**
-   * Total number of lines, used or
-   * unused.
+   * Total number of lines, used or unused.
   *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+  * @note This function really exports internal information about the
+  * triangulation. It shouldn't be used in applications. The function
+  * is only part of the public interface of this class because it is
+  * used in some of the other classes that build very closely on it
+  * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_lines () const;
 
   /**
-   * Number of lines, used or
-   * unused, on the given level.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Number of lines, used or unused, on the given level.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_lines (const unsigned int level) const;
 
   /**
-   * Total number of quads, used or
-   * unused.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Total number of quads, used or unused.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_quads () const;
 
   /**
-   * Number of quads, used or
-   * unused, on the given level.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Number of quads, used or unused, on the given level.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_quads (const unsigned int level) const;
 
   /**
-   * Total number of hexs, used or
-   * unused.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Total number of hexs, used or unused.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_hexs () const;
 
   /**
-   * Number of hexs, used or
-   * unused, on the given level.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Number of hexs, used or unused, on the given level.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_hexs (const unsigned int level) const;
 
   /**
-   * Number of cells, used or
-   * unused, on the given level.
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Number of cells, used or unused, on the given level.
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_cells (const unsigned int level) const;
 
   /**
-   * Return total number of faces,
-   * used or not. In 2d, the result
-   * equals n_raw_lines(), while in 3d it
-   * equals n_raw_quads().
-  *
-  * @note This function really
-  * exports internal information
-  * about the triangulation. It
-  * shouldn't be used in
-  * applications. The function is
-  * only part of the public
-  * interface of this class
-  * because it is used in some of
-  * the other classes that build
-  * very closely on it (in
-  * particular, the DoFHandler
-  * class).
+   * Return total number of faces, used or not. In 2d, the result
+   * equals n_raw_lines(), while in 3d it equals n_raw_quads().
+   *
+   * @note This function really exports internal information about the
+   * triangulation. It shouldn't be used in applications. The function
+   * is only part of the public interface of this class because it is
+   * used in some of the other classes that build very closely on it
+   * (in particular, the DoFHandler class).
    */
   unsigned int n_raw_faces () const;
 
   /*@}*/
 
   /**
-   * Determine an estimate for the
-   * memory consumption (in bytes)
-   * of this object.
+   * Determine an estimate for the memory consumption (in bytes) of
+   * this object.
    *
-   * This function is made virtual,
-   * since a triangulation object
-   * might be accessed through a
-   * pointer to this base class,
-   * even if the actual object is a
-   * derived class.
+   * This function is made virtual, since a triangulation object might
+   * be accessed through a pointer to this base class, even if the
+   * actual object is a derived class.
    */
   virtual std::size_t memory_consumption () const;
 
   /**
-   * Write the data of this object to a
-   * stream for the purpose of
+   * Write the data of this object to a stream for the purpose of
    * serialization.
    *
-   * @note This function does not save
-   * <i>all</i> member variables of the
-   * current triangulation. Rather, only
-   * certain kinds of information are
-   * stored. For more information see the
-   * general documentation of this class.
+   * @note This function does not save <i>all</i> member variables of
+   * the current triangulation. Rather, only certain kinds of
+   * information are stored. For more information see the general
+   * documentation of this class.
    */
   template <class Archive>
   void save (Archive &ar,
              const unsigned int version) const;
 
   /**
-   * Read the data of this object from a
-   * stream for the purpose of
-   * serialization. Throw away the previous
-   * content.
-   *
-   * @note This function does not reset
-   * <i>all</i> member variables of the
-   * current triangulation to the ones of
-   * the triangulation that was previously
-   * stored to an archive. Rather, only
-   * certain kinds of information are
-   * loaded. For more information see the
-   * general documentation of this class.
-   *
-   * @note This function calls the
-   * Triangulation::clear() function and
-   * consequently triggers the "clear"
-   * signal. After loading all data from
-   * the archive, it then triggers the
-   * "create" signal. For more information
-   * on signals, see the general
+   * Read the data of this object from a stream for the purpose of
+   * serialization. Throw away the previous content.
+   *
+   * @note This function does not reset <i>all</i> member variables of
+   * the current triangulation to the ones of the triangulation that
+   * was previously stored to an archive. Rather, only certain kinds
+   * of information are loaded. For more information see the general
    * documentation of this class.
+   *
+   * @note This function calls the Triangulation::clear() function and
+   * consequently triggers the "clear" signal. After loading all data
+   * from the archive, it then triggers the "create" signal. For more
+   * information on signals, see the general documentation of this
+   * class.
    */
   template <class Archive>
   void load (Archive &ar,
@@ -3189,19 +2871,15 @@ public:
    */
   /*@{*/
   /**
-   *  Exception
-   * @ingroup Exceptions
+   *  Exception @ingroup Exceptions
    */
   DeclException1 (ExcInvalidLevel,
                   int,
                   << "The given level " << arg1
                   << " is not in the valid range!");
   /**
-   * The function raising this
-   * exception can only operate on
-   * an empty Triangulation, i.e.,
-   * a Triangulation without grid
-   * cells.
+   * The function raising this exception can only operate on an empty
+   * Triangulation, i.e., a Triangulation without grid cells.
    *
    * @ingroup Exceptions
    */
@@ -3218,8 +2896,7 @@ public:
    */
   DeclException0 (ExcFacesHaveNoLevel);
   /**
-   * The triangulation level you
-   * accessed is empty.
+   * The triangulation level you accessed is empty.
    *
    * @ingroup Exceptions
    */
@@ -3228,45 +2905,32 @@ public:
                   << "You tried to do something on level " << arg1
                   << ", but this level is empty.");
   /**
-   * Exception
-   * @ingroup Exceptions
+   * Exception @ingroup Exceptions
    */
   DeclException0 (ExcNonOrientableTriangulation);
   /*@}*/
 protected:
   /**
-   *  Do some smoothing in the process
-   *  of refining the triangulation. See
-   *  the general doc of this class for
-   *  more information about this.
+   *  Do some smoothing in the process of refining the
+   *  triangulation. See the general doc of this class for more
+   *  information about this.
    */
   MeshSmoothing                    smooth_grid;
 
   /**
-   *  Write a bool vector to the given stream,
-   *  writing a pre- and a postfix magic
-   *  number. The vector is written in an
-   *  almost binary format, i.e. the bool
-   *  flags are packed but the data is written
+   *  Write a bool vector to the given stream, writing a pre- and a
+   *  postfix magic number. The vector is written in an almost binary
+   *  format, i.e. the bool flags are packed but the data is written
    *  as ASCII text.
    *
-   *  The flags are stored in a
-   *  binary format: for each @p
-   *  true, a @p 1 bit is stored, a
-   *  @p 0 bit otherwise.  The bits
-   *  are stored as <tt>unsigned
-   *  char</tt>, thus avoiding
-   *  endianess. They are written
-   *  to @p out in plain text, thus
-   *  amounting to 3.6 bits in the
-   *  output per bits in the input
-   *  on the average. Other
-   *  information (magic numbers
-   *  and number of elements of the
-   *  input vector) is stored as
-   *  plain text as well. The
-   *  format should therefore be
-   *  interplatform compatible.
+   *  The flags are stored in a binary format: for each @p true, a @p
+   *  1 bit is stored, a @p 0 bit otherwise.  The bits are stored as
+   *  <tt>unsigned char</tt>, thus avoiding endianess. They are
+   *  written to @p out in plain text, thus amounting to 3.6 bits in
+   *  the output per bits in the input on the average. Other
+   *  information (magic numbers and number of elements of the input
+   *  vector) is stored as plain text as well. The format should
+   *  therefore be interplatform compatible.
    */
   static void write_bool_vector (const unsigned int       magic_number1,
                                  const std::vector<bool> &v,
@@ -3274,9 +2938,8 @@ protected:
                                  std::ostream            &out);
 
   /**
-   * Re-read a vector of bools previously
-   * written by @p write_bool_vector and
-   * compare with the magic numbers.
+   * Re-read a vector of bools previously written by @p
+   * write_bool_vector and compare with the magic numbers.
    */
   static void read_bool_vector (const unsigned int       magic_number1,
                                 std::vector<bool>       &v,
@@ -3289,17 +2952,13 @@ private:
    */
   /*@{*/
   /**
-   * Declare a number of iterator types for
-   * raw iterators, i.e., iterators that also
-   * iterate over holes in the list of cells
-   * left by cells that have been coarsened
-   * away in previous mesh refinement cycles.
+   * Declare a number of iterator types for raw iterators, i.e.,
+   * iterators that also iterate over holes in the list of cells left
+   * by cells that have been coarsened away in previous mesh
+   * refinement cycles.
    *
-   * Since users should never have
-   * to access these internal
-   * properties of how we store
-   * data, these iterator types are
-   * made private.
+   * Since users should never have to access these internal properties
+   * of how we store data, these iterator types are made private.
    */
   typedef TriaRawIterator   <CellAccessor<dim,spacedim>         > raw_cell_iterator;
   typedef TriaRawIterator   <TriaAccessor<dim-1, dim, spacedim> > raw_face_iterator;
@@ -3308,17 +2967,14 @@ private:
   typedef typename IteratorSelector::raw_hex_iterator             raw_hex_iterator;
 
   /**
-   *  Iterator to the first cell, used
-   *  or not, on level @p level. If a level
-   *  has no cells, a past-the-end iterator
-   *  is returned.
+   *  Iterator to the first cell, used or not, on level @p level. If a
+   *  level has no cells, a past-the-end iterator is returned.
    */
   raw_cell_iterator    begin_raw   (const unsigned int level = 0) const;
 
   /**
-   * Return a raw iterator which is the first
-   * iterator not on level. If @p level is
-   * the last level, then this returns
+   * Return a raw iterator which is the first iterator not on
+   * level. If @p level is the last level, then this returns
    * <tt>end()</tt>.
    */
   raw_cell_iterator    end_raw (const unsigned int level) const;
@@ -3332,37 +2988,30 @@ private:
   /*@{*/
 
   /**
-   *  Iterator to the first line, used or
-   *  not, on level @p level. If a level
-   *  has no lines, a past-the-end iterator
-   *  is returned.
-   *  If lines are no cells, i.e. for @p dim>1
-   *  no @p level argument must be given.
-   *  The same applies for all the other functions
-   *  above, of course.
+   *  Iterator to the first line, used or not, on level @p level. If a
+   *  level has no lines, a past-the-end iterator is returned.  If
+   *  lines are no cells, i.e. for @p dim>1 no @p level argument must
+   *  be given.  The same applies for all the other functions above,
+   *  of course.
    */
   raw_line_iterator
   begin_raw_line   (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first used line
-   *  on level @p level.
+   *  Iterator to the first used line on level @p level.
    */
   line_iterator
   begin_line       (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first active
-   *  line on level @p level.
+   *  Iterator to the first active line on level @p level.
    */
   active_line_iterator
   begin_active_line(const unsigned int level = 0) const;
 
   /**
-   *  Iterator past the end; this
-   *  iterator serves for comparisons of
-   *  iterators with past-the-end or
-   *  before-the-beginning states.
+   *  Iterator past the end; this iterator serves for comparisons of
+   *  iterators with past-the-end or before-the-beginning states.
    */
   line_iterator        end_line () const;
   /*@}*/
@@ -3375,36 +3024,30 @@ private:
   /*@{
    */
   /**
-   *  Iterator to the first quad, used or
-   *  not, on the given level. If a level
-   *  has no quads, a past-the-end iterator
-   *  is returned.  If quads are no cells,
-   *  i.e. for $dim>2$ no level argument
-   *  must be given.
+   *  Iterator to the first quad, used or not, on the given level. If
+   *  a level has no quads, a past-the-end iterator is returned.  If
+   *  quads are no cells, i.e. for $dim>2$ no level argument must be
+   *  given.
 
    */
   raw_quad_iterator
   begin_raw_quad   (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first used quad
-   *  on level @p level.
+   *  Iterator to the first used quad on level @p level.
    */
   quad_iterator
   begin_quad       (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first active
-   *  quad on level @p level.
+   *  Iterator to the first active quad on level @p level.
    */
   active_quad_iterator
   begin_active_quad (const unsigned int level = 0) const;
 
   /**
-   *  Iterator past the end; this
-   *  iterator serves for comparisons of
-   *  iterators with past-the-end or
-   *  before-the-beginning states.
+   *  Iterator past the end; this iterator serves for comparisons of
+   *  iterators with past-the-end or before-the-beginning states.
    */
   quad_iterator
   end_quad () const;
@@ -3418,33 +3061,27 @@ private:
   /*@{
    */
   /**
-   *  Iterator to the first hex, used
-   *  or not, on level @p level. If a level
-   *  has no hexs, a past-the-end iterator
-   *  is returned.
+   *  Iterator to the first hex, used or not, on level @p level. If a
+   *  level has no hexs, a past-the-end iterator is returned.
    */
   raw_hex_iterator
   begin_raw_hex   (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first used hex
-   *  on level @p level.
+   *  Iterator to the first used hex on level @p level.
    */
   hex_iterator
   begin_hex       (const unsigned int level = 0) const;
 
   /**
-   *  Iterator to the first active
-   *  hex on level @p level.
+   *  Iterator to the first active hex on level @p level.
    */
   active_hex_iterator
   begin_active_hex (const unsigned int level = 0) const;
 
   /**
-   *  Iterator past the end; this
-   *  iterator serves for comparisons of
-   *  iterators with past-the-end or
-   *  before-the-beginning states.
+   *  Iterator past the end; this iterator serves for comparisons of
+   *  iterators with past-the-end or before-the-beginning states.
    */
   hex_iterator
   end_hex () const;
@@ -3452,168 +3089,144 @@ private:
 
 
   /**
-   * The (public) function clear() will
-   * only work when the triangulation is
-   * not subscribed to by other users. The
-   * clear_despite_subscriptions() function
-   * now allows the triangulation being
-   * cleared even when there are
-   * subscriptions.
-   *
-   * Make sure, you know what you
-   * do, when calling this
-   * function, as its use is
-   * reasonable in very rare cases,
-   * only. For example, when the
-   * subscriptions were for the
-   * initially empty Triangulation
-   * and the Triangulation object
-   * wants to release its memory
-   * before throwing an assertion
-   * due to input errors (e.g. in
-   * the create_triangulation()
-   * function).
+   * The (public) function clear() will only work when the
+   * triangulation is not subscribed to by other users. The
+   * clear_despite_subscriptions() function now allows the
+   * triangulation being cleared even when there are subscriptions.
+   *
+   * Make sure, you know what you do, when calling this function, as
+   * its use is reasonable in very rare cases, only. For example, when
+   * the subscriptions were for the initially empty Triangulation and
+   * the Triangulation object wants to release its memory before
+   * throwing an assertion due to input errors (e.g. in the
+   * create_triangulation() function).
    */
   void clear_despite_subscriptions ();
 
   /**
-   *  Refine all cells on all levels which
-   *  were previously flagged for refinement.
+   *  Refine all cells on all levels which were previously flagged for
+   *  refinement.
    *
-   *  Note, that this function uses
-   *  the <tt>line->user_flags</tt>
-   *  for <tt>dim=2,3</tt> and the
-   *  <tt>quad->user_flags</tt> for
+   *  Note, that this function uses the <tt>line->user_flags</tt> for
+   *  <tt>dim=2,3</tt> and the <tt>quad->user_flags</tt> for
    *  <tt>dim=3</tt>.
    *
-   *  The function returns a list
-   *  of cells that have produced
-   *  children that satisfy the
-   *  criteria of
-   *  @ref GlossDistorted "distorted cells"
-   * if the
-   * <code>check_for_distorted_cells</code>
-   * flag was specified upon
-   * creation of this object, at
+   *  The function returns a list of cells that have produced children
+   *  that satisfy the criteria of @ref GlossDistorted "distorted
+   *  cells" if the <code>check_for_distorted_cells</code> flag was
+   *  specified upon creation of this object, at
    */
   DistortedCellList execute_refinement ();
 
   /**
-   * Coarsen all cells which were flagged for
-   * coarsening, or rather: delete all
-   * children of those cells of which all
-   * child cells are flagged for coarsening
-   * and several other constraints hold (see
+   * Coarsen all cells which were flagged for coarsening, or rather:
+   * delete all children of those cells of which all child cells are
+   * flagged for coarsening and several other constraints hold (see
    * the general doc of this class).
    */
   void execute_coarsening ();
 
   /**
-   * Make sure that either all or none of
-   * the children of a cell are tagged for
-   * coarsening.
+   * Make sure that either all or none of the children of a cell are
+   * tagged for coarsening.
    */
   void fix_coarsen_flags ();
 
   /**
-   *  Array of pointers pointing to the
-   *  objects storing the cell data on the
-   *  different levels.
+   *  Array of pointers pointing to the objects storing the cell data
+   *  on the different levels.
    */
   std::vector<dealii::internal::Triangulation::TriaLevel<dim>*> levels;
 
   /**
-   *  Pointer to the faces of the triangulation. In 1d
-   *  this contains nothing, in 2D it contains data
-   *  concerning lines and in 3D quads and lines.  All of
-   *  these have no level and are therefore treated
+   *  Pointer to the faces of the triangulation. In 1d this contains
+   *  nothing, in 2D it contains data concerning lines and in 3D quads
+   *  and lines.  All of these have no level and are therefore treated
    *  separately.
    */
   dealii::internal::Triangulation::TriaFaces<dim> *faces;
 
 
   /**
-   *  Array of the vertices of this
-   *  triangulation.
+   *  Array of the vertices of this triangulation.
    */
   std::vector<Point<spacedim> >              vertices;
 
   /**
-   *  Array storing a bit-pattern which
-   *  vertices are used.
+   *  Array storing a bit-pattern which vertices are used.
    */
   std::vector<bool>                     vertices_used;
 
   /**
-   *  Collection of boundary
-   *  objects. We store only
-   *  objects, which are not
-   *  of type StraightBoundary.
+   *  Collection of manifold objects. We store only objects, which are
+   *  not of type FlatManifold.
    */
-  std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > >  boundary;
+  std::map<types::manifold_id, SmartPointer<const Boundary<dim,spacedim> , Triangulation<dim, spacedim> > >  manifold;
+
 
   /**
-   * Flag indicating whether
-   * anisotropic refinement took
-   * place.
+   * Flag indicating whether anisotropic refinement took place.
    */
   bool                             anisotropic_refinement;
 
 
   /**
-   * A flag that determines whether
-   * we are to check for distorted
-   * cells upon creation and
-   * refinement of a mesh.
+   * A flag that determines whether we are to check for distorted
+   * cells upon creation and refinement of a mesh.
    */
   const bool check_for_distorted_cells;
 
   /**
-   * Cache to hold the numbers of lines,
-   * quads, hexes, etc. These numbers
-   * are set at the end of the refinement
-   * and coarsening functions and enable
-   * faster access later on. In the old
-   * days, whenever one wanted to access
-   * one of these numbers, one had to
-   * perform a loop over all lines, e.g.,
-   * and count the elements until we hit
-   * the end iterator. This is time
-   * consuming and since access to the
-   * number of lines etc is a rather
-   * frequent operation, this was not
-   * an optimal solution.
+   * Cache to hold the numbers of lines, quads, hexes, etc. These
+   * numbers are set at the end of the refinement and coarsening
+   * functions and enable faster access later on. In the old days,
+   * whenever one wanted to access one of these numbers, one had to
+   * perform a loop over all lines, e.g., and count the elements until
+   * we hit the end iterator. This is time consuming and since access
+   * to the number of lines etc is a rather frequent operation, this
+   * was not an optimal solution.
    */
   dealii::internal::Triangulation::NumberCache<dim> number_cache;
 
   /**
-   * A map that relates the number of a
-   * boundary vertex to the boundary
-   * indicator. This field is only used in
-   * 1d. We have this field because we
-   * store boundary indicator information
-   * with faces in 2d and higher where we
-   * have space in the structures that
-   * store data for faces, but in 1d there
-   * is no such space for faces.
-   *
-   * The field is declared as a pointer for
-   * a rather mundane reason: all other
-   * fields of this class that can be
-   * modified by the TriaAccessor hierarchy
-   * are pointers, and so these accessor
-   * classes store a const pointer to the
-   * triangulation. We could no longer do
-   * so for TriaAccessor<0,1,spacedim> if
-   * this field (that can be modified by
-   * TriaAccessor::set_boundary_indicator)
-   * were not a pointer.
+   * A map that relates the number of a boundary vertex to the
+   * boundary indicator. This field is only used in 1d. We have this
+   * field because we store boundary indicator information with faces
+   * in 2d and higher where we have space in the structures that store
+   * data for faces, but in 1d there is no such space for faces.
+   *
+   * The field is declared as a pointer for a rather mundane reason:
+   * all other fields of this class that can be modified by the
+   * TriaAccessor hierarchy are pointers, and so these accessor
+   * classes store a const pointer to the triangulation. We could no
+   * longer do so for TriaAccessor<0,1,spacedim> if this field (that
+   * can be modified by TriaAccessor::set_boundary_indicator) were not
+   * a pointer.
    */
   std::map<unsigned int, types::boundary_id> *vertex_to_boundary_id_map_1d;
+       
+
+  /**
+   * A map that relates the number of a boundary vertex to the
+   * manifold indicator. This field is only used in 1d. We have this
+   * field because we store manifold indicator information with faces
+   * in 2d and higher where we have space in the structures that store
+   * data for faces, but in 1d there is no such space for faces.
+   *
+   * The field is declared as a pointer for a rather mundane reason:
+   * all other fields of this class that can be modified by the
+   * TriaAccessor hierarchy are pointers, and so these accessor
+   * classes store a const pointer to the triangulation. We could no
+   * longer do so for TriaAccessor<0,1,spacedim> if this field (that
+   * can be modified by TriaAccessor::set_boundary_indicator) were not
+   * a pointer.
+   */
+  std::map<unsigned int, types::manifold_id> *vertex_to_manifold_id_map_1d;
+
 
   /**
-   * A map that correlates each refinement listener that has been added
-   * through the outdated RefinementListener interface via
+   * A map that correlates each refinement listener that has been
+   * added through the outdated RefinementListener interface via
    * add_refinement_listener(), with the new-style boost::signal
    * connections for each of the member function. We need to keep this
    * list around so that we can later terminate the connection again
@@ -3656,6 +3269,9 @@ CellData<structdim>::CellData ()
     vertices[i] = numbers::invalid_unsigned_int;
 
   material_id = 0;
+
+  // And the manifold to be invalid
+  manifold_id = numbers::invalid_manifold_id;
 }
 
 
@@ -3751,10 +3367,8 @@ void
 Triangulation<dim,spacedim>::save (Archive &ar,
                                    const unsigned int) const
 {
-  // as discussed in the documentation, do
-  // not store the signals as well as
-  // boundary and manifold descrption
-  // but everything else
+  // as discussed in the documentation, do not store the signals as
+  // well as boundary and manifold descrption but everything else
   ar &smooth_grid;
   ar &levels;
   ar &faces;
@@ -3778,14 +3392,11 @@ void
 Triangulation<dim,spacedim>::load (Archive &ar,
                                    const unsigned int)
 {
-  // clear previous content. this also calls
-  // the respective signal
+  // clear previous content. this also calls the respective signal
   clear ();
 
-  // as discussed in the documentation, do
-  // not store the signals as well as
-  // boundary and manifold description
-  // but everything else
+  // as discussed in the documentation, do not store the signals as
+  // well as boundary and manifold description but everything else
   ar &smooth_grid;
   ar &levels;
   ar &faces;
@@ -3864,10 +3475,10 @@ template <> unsigned int Triangulation<1,3>::max_adjacent_cells () const;
 
 DEAL_II_NAMESPACE_CLOSE
 
-// Include tria_accessor.h here, so that it is possible for an end user to
-// use the iterators of Triangulation<dim> directly without the need to
-// include tria_accessor.h separately. (Otherwise the iterators are an
-// 'opaque' or 'incomplete' type.)
+// Include tria_accessor.h here, so that it is possible for an end
+// user to use the iterators of Triangulation<dim> directly without
+// the need to include tria_accessor.h separately. (Otherwise the
+// iterators are an 'opaque' or 'incomplete' type.)
 #include <deal.II/grid/tria_accessor.h>
 
 #endif
index 7ff6297f2cf46c040cc5a56280ec0345b2b86e62..b7337fdd23cbb81dbbca72d309b4a5083efdd1df 100644 (file)
@@ -1161,11 +1161,87 @@ public:
    * for the boundary object.
    */
   const Boundary<dim,spacedim> &get_boundary () const;
+    
+  /**
+   * Return a constant reference to a
+   * manifold object used for this
+   * object. This function is a shortcut to
+   * retrieving the manifold indicator
+   * using manifold_indicator() and then
+   * asking the
+   * Triangulation::get_manifold() function
+   * for the manifold object.
+   */
+  const Boundary<dim,spacedim> &get_manifold () const;
 
   /**
    * @}
    */
 
+  /**
+   *  @name Dealing with manifold indicators
+   */
+  /**
+   * @{
+   */
+
+  /**
+   * Manifold indicator of this
+   * object.
+   *
+   * If the return value is the special value
+   * numbers::flat_manifold_id, then this object is associated with a
+   * standard cartesian Manifold Description.
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  types::manifold_id manifold_id () const;
+
+  /**
+   * Set the manifold indicator.  The same applies as for the
+   * <tt>manifold_id()</tt> function.
+   *
+   * Note that it only sets the manifold object of the current object
+   * itself, not the indicators of the ones that bound it, nor of its
+   * children. For example, in 3d, if this function is called on a
+   * face, then the manifold indicator of the 4 edges that bound the
+   * face remain unchanged. If you want to set the manifold indicators
+   * of face, edges and all children at the same time, use the
+   * set_all_manifold_ids() function.
+   *
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  void set_manifold_id (const types::manifold_id) const;
+
+  /**
+   * Do as set_manifold_id()
+   * but also set the manifold
+   * indicators of the objects that
+   * bound the current object. For
+   * example, in 3d, if
+   * set_manifold_id() is
+   * called on a face, then the
+   * manifold indicator of the 4
+   * edges that bound the face
+   * remain unchanged. On the other
+   * hand, the manifold indicators
+   * of face and edges are all set
+   * at the same time using the
+   * current function.
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  void set_all_manifold_ids (const types::manifold_id) const;
+
+  /**
+   * @}
+   */    
+    
 
   /**
    * @name User data
@@ -2013,6 +2089,15 @@ public:
    */
   types::boundary_id boundary_indicator () const;
 
+  /**
+   * Manifold indicator of this
+   * object. 
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+  types::manifold_id manifold_id () const;
+
+
   /**
    *  @name Orientation of sub-objects
    */
@@ -2153,6 +2238,16 @@ public:
   void
   set_boundary_indicator (const types::boundary_id);
 
+                                    /**
+                                     * Set the manifold indicator of
+                                     * this vertex. Does nothing so
+                                     * far. This function is here
+                                     * only to allow dimension
+                                     * independent programming.
+                                     */
+  void
+  set_manifold_id (const types::manifold_id);
+
   /**
    * Since this object only represents a
    * single vertex, call
@@ -2168,6 +2263,22 @@ public:
   /**
    * @}
    */
+/**
+   * Since this object only represents a
+   * single vertex, call
+   * set_manifold_id with the same
+   * argument.
+   *
+   * @ingroup manifold
+   *
+   * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
+   */
+    
+    void
+    set_all_manifold_ids (const types::manifold_id);
+    /**
+   * @}
+   */
 
   /**
    * Return whether the vertex
@@ -3250,6 +3361,8 @@ template <> bool CellAccessor<1,3>::point_inside (const Point<3> &) const;
 template <> bool CellAccessor<2,3>::point_inside (const Point<3> &) const;
 // -------------------------------------------------------------------
 
+template <> void TriaAccessor<3,3,3>::set_all_manifold_ids (const types::manifold_id) const;
+
 #endif // DOXYGEN
 
 DEAL_II_NAMESPACE_CLOSE
index bdf5d52cabf5feb86adb87c4d28f752b0acdd743..7e9cffa7e3906e2f3f993b1d808fe2e2e5c7d163 100644 (file)
@@ -1936,14 +1936,89 @@ TriaAccessor<structdim, dim, spacedim>::at_boundary () const
 
 
 template <int structdim, int dim, int spacedim>
-const Boundary<dim,spacedim> &
+const Manifold<spacedim> &
 TriaAccessor<structdim, dim, spacedim>::get_boundary () const
 {
-  Assert (structdim<dim, ExcImpossibleInDim(dim));
+  return get_manifold();
+}
+
+
+template <int structdim, int dim, int spacedim>
+const Manifold<spacedim> &
+TriaAccessor<structdim, dim, spacedim>::get_manifold () const
+{                                
+  Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
+                                  // Get the default (manifold_id)
+  types::manifold_id mi = this->objects().manifold_id[this->present_index];
+  
+                                  // In case this is not valid, check
+                                  // the boundary id, after having
+                                  // casted it to a manifold id
+  if(mi == numbers::invalid_manifold_id) 
+    mi =  static_cast<types::manifold_id>
+         (structdim < dim ?
+          this->objects().boundary_or_material_id[this->present_index].boundary_id:
+          dim < spacedim ? 
+          this->objects().boundary_or_material_id[this->present_index].material_id:
+          numbers::invalid_manifold_id);
+  
+  return this->tria->get_manifold(mi);
+}
+
+
+template <int structdim, int dim, int spacedim>
+types::manifold_id
+TriaAccessor<structdim, dim, spacedim>::manifold_id () const
+{
   Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
 
-  return this->tria->get_boundary(this->objects()
-                                  .boundary_or_material_id[this->present_index].boundary_id);
+  return this->objects().manifold_id[this->present_index];
+}
+
+
+
+template <int structdim, int dim, int spacedim>
+void
+TriaAccessor<structdim, dim, spacedim>::
+set_manifold_id (const types::manifold_id manifold_ind) const
+{
+  Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
+
+  this->objects().manifold_id[this->present_index] = manifold_ind;
+}
+
+
+template <int structdim, int dim, int spacedim>
+void
+TriaAccessor<structdim, dim, spacedim>::
+set_all_manifold_ids (const types::manifold_id manifold_ind) const
+{
+  set_manifold_id (manifold_ind);
+
+  if (this->has_children())
+    for (unsigned int c=0; c<this->n_children(); ++c)
+      this->child(c)->set_all_manifold_ids (manifold_ind);
+
+  switch (structdim)
+    {
+    case 1:
+         if(dim == 1)
+           {
+             (*this->tria->vertex_to_manifold_id_map_1d)
+               [vertex_index(0)] = manifold_ind;
+             (*this->tria->vertex_to_manifold_id_map_1d)
+               [vertex_index(1)] = manifold_ind;
+           }
+      break;
+
+    case 2:
+      // for quads also set manifold_id of bounding lines
+      for (unsigned int i=0; i<4; ++i)
+        this->line(i)->set_manifold_id (manifold_ind);
+      break;
+    default:
+      Assert (false, ExcNotImplemented());
+    }
 }
 
 
@@ -2317,6 +2392,18 @@ TriaAccessor<0, 1, spacedim>::boundary_indicator () const
 
 }
 
+template <int spacedim>
+inline
+types::manifold_id
+TriaAccessor<0, 1, spacedim>::manifold_id () const
+{
+  if( tria->vertex_to_manifold_id_map_1d->find (this->vertex_index())
+      != tria->vertex_to_boundary_id_map_1d->end())
+    return (*tria->vertex_to_manifold_id_map_1d)[this->vertex_index()];
+  else
+    return numbers::invalid_manifold_id;
+}
+
 
 template <int spacedim>
 inline
@@ -2443,6 +2530,15 @@ TriaAccessor<0, 1, spacedim>::set_boundary_indicator (const types::boundary_id b
 }
 
 
+template <int spacedim>
+inline
+void
+TriaAccessor<0, 1, spacedim>::set_manifold_id (const types::manifold_id b)
+{
+  (*tria->vertex_to_manifold_id_map_1d)[this->vertex_index()] = b;
+}
+
+
 
 template <int spacedim>
 inline
@@ -2453,6 +2549,15 @@ void TriaAccessor<0, 1, spacedim>::set_all_boundary_indicators (const types::bou
 
 
 
+template <int spacedim>
+inline
+void TriaAccessor<0, 1, spacedim>::set_all_manifold_ids (const types::manifold_id b)
+{
+  set_manifold_id (b);
+}
+
+
+
 template <int spacedim>
 inline
 bool TriaAccessor<0, 1, spacedim>::used () const
index 2f683b964ed3ac41c39c16db5429d05fc9ee9e06..8daf006889b8a4e651342e3fd7723a089461f979 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <deal.II/base/config.h>
 #include <deal.II/grid/tria_boundary.h>
+#include <deal.II/grid/manifold.h>
+#include <deal.II/grid/manifold_lib.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -48,7 +50,7 @@ DEAL_II_NAMESPACE_OPEN
  * @author Guido Kanschat, 2001, Wolfgang Bangerth, 2007
  */
 template <int dim, int spacedim = dim>
-class CylinderBoundary : public StraightBoundary<dim,spacedim>
+class CylinderBoundary : public FlatManifold<spacedim>
 {
 public:
   /**
@@ -60,87 +62,41 @@ public:
                     const unsigned int axis = 0);
 
   /**
-   * Constructor. If constructed
-   * with this constructor, the
-   * boundary described is a
-   * cylinder with an axis that
-   * points in direction #direction
-   * and goes through the given
-   * #point_on_axis. The direction
-   * may be arbitrarily scaled, and
-   * the given point may be any
-   * point on the axis.
+   * Constructor. If constructed with this constructor, the boundary
+   * described is a cylinder with an axis that points in direction
+   * #direction and goes through the given #point_on_axis. The
+   * direction may be arbitrarily scaled, and the given point may be
+   * any point on the axis.
    */
   CylinderBoundary (const double           radius,
                     const Point<spacedim> &direction,
                     const Point<spacedim> &point_on_axis);
 
   /**
-   * Refer to the general documentation of
-   * this class and the documentation of the
-   * base class.
-   */
-  virtual Point<spacedim>
-  get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
-
-  /**
-   * Refer to the general documentation of
-   * this class and the documentation of the
-   * base class.
-   */
-  virtual Point<spacedim>
-  get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Calls
-   * @p get_intermediate_points_between_points.
+   * Since this class is derived from FlatManifold, we need to
+   * overload only the project_to_manifold function in order for the
+   * boundary to function properly.
    */
-  virtual void
-  get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
-                                   std::vector<Point<spacedim> > &points) const;
+    virtual Point<spacedim>
+    project_to_manifold (const std::vector<Point<spacedim> > & vertices, 
+                        const Point<spacedim> &candidate) const;
 
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Only implemented for <tt>dim=3</tt>
-   * and for <tt>points.size()==1</tt>.
-   */
-  virtual void
-  get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
-                                   std::vector<Point<spacedim> > &points) const;
 
   /**
-   * Compute the normals to the
-   * boundary at the vertices of
-   * the given face.
-   *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
+   * Compute the normal to the surface. 
    */
-  virtual void
-  get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
-                           typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const;
-
+  virtual Point<spacedim>
+  normal_vector (const std::vector<Point<spacedim> > & vertices, 
+                const Point<spacedim> &point) const;
+  
   /**
    * Return the radius of the cylinder.
    */
   double get_radius () const;
 
   /**
-   * Exception. Thrown by the
-   * @p get_radius if the
-   * @p compute_radius_automatically,
-   * see below, flag is set true.
+   * Exception. Thrown by the @p get_radius if the @p
+   * compute_radius_automatically, see below, flag is set true.
    */
   DeclException0 (ExcRadiusNotSet);
 
@@ -164,24 +120,8 @@ protected:
 private:
 
   /**
-   * Called by
-   * @p get_intermediate_points_on_line
-   * and by
-   * @p get_intermediate_points_on_quad.
-   *
-   * Refer to the general
-   * documentation of
-   * @p get_intermediate_points_on_line
-   * in the documentation of the
-   * base class.
-   */
-  void get_intermediate_points_between_points (const Point<spacedim> &p0, const Point<spacedim> &p1,
-                                               std::vector<Point<spacedim> > &points) const;
-
-  /**
-   * Given a number for the axis,
-   * return a vector that denotes
-   * this direction.
+   * Given a number for the axis, return a vector that denotes this
+   * direction.
    */
   static Point<spacedim> get_axis_vector (const unsigned int axis);
 };
@@ -222,21 +162,15 @@ private:
  * @author Markus B&uuml;rg, 2009
  */
 template <int dim>
-class ConeBoundary : public StraightBoundary<dim>
+class ConeBoundary : public FlatManifold<dim>
 {
 public:
   /**
-   * Constructor. Here the boundary
-   * object is constructed. The
-   * points <tt>x_0</tt> and
-   * <tt>x_1</tt> describe the
-   * starting and ending points of
-   * the axis of the (truncated)
-   * cone. <tt>radius_0</tt>
-   * denotes the radius
-   * corresponding to <tt>x_0</tt>
-   * and <tt>radius_1</tt> the one
-   * corresponding to <tt>x_1</tt>.
+   * Constructor. Here the boundary object is constructed. The points
+   * <tt>x_0</tt> and <tt>x_1</tt> describe the starting and ending
+   * points of the axis of the (truncated) cone. <tt>radius_0</tt>
+   * denotes the radius corresponding to <tt>x_0</tt> and
+   * <tt>radius_1</tt> the one corresponding to <tt>x_1</tt>.
    */
   ConeBoundary (const double radius_0,
                 const double radius_1,
@@ -244,75 +178,31 @@ public:
                 const Point<dim> x_1);
 
   /**
-   * Return the radius of the
-   * (truncated) cone at given point
+   * Return the radius of the (truncated) cone at given point
    * <tt>x</tt> on the axis.
    */
   double get_radius (const Point<dim> x) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual
-  Point<dim>
-  get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual
-  Point<dim>
-  get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
-
+    
   /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Calls @p
-   * get_intermediate_points_between_points.
+   * Since this class is derived from FlatManifold, we need to
+   * overload only the project_to_manifold function in order for the
+   * boundary to function properly.
    */
-  virtual
-  void
-  get_intermediate_points_on_line (const typename Triangulation<dim>::line_iterator &line,
-                                   std::vector<Point<dim> > &points) const;
+    virtual Point<dim>
+    project_to_manifold (const std::vector<Point<dim> > & vertices, 
+                        const Point<dim> &candidate) const;
 
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Only implemented for
-   * <tt>dim=3</tt> and for
-   * <tt>points.size()==1</tt>.
-   */
-  virtual
-  void
-  get_intermediate_points_on_quad (const typename Triangulation<dim>::quad_iterator &quad,
-                                   std::vector<Point<dim> > &points) const;
 
   /**
-   * Compute the normals to the
-   * boundary at the vertices of
-   * the given face.
+   * Compute the normals to the boundary at the given point
    *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
+   * Refer to the general documentation of this class and the
+   * documentation of the base class.
    */
   virtual
-  void
-  get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
-                           typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
+  Point<dim> 
+  normal_vector (const std::vector<Point<dim> > & vertices, 
+                const Point<dim> &point) const;
 
 protected:
   /**
@@ -336,24 +226,6 @@ protected:
    * Ending point of the axis.
    */
   const Point<dim> x_1;
-
-private:
-  /**
-   * Called by @p
-   * get_intermediate_points_on_line
-   * and by @p
-   * get_intermediate_points_on_quad.
-   *
-   * Refer to the general
-   * documentation of @p
-   * get_intermediate_points_on_line
-   * in the documentation of the
-   * base class.
-   */
-  void
-  get_intermediate_points_between_points (const Point<dim> &p0,
-                                          const Point<dim> &p1,
-                                          std::vector<Point<dim> > &points) const;
 };
 
 
@@ -367,16 +239,12 @@ private:
  *   The center of the ball and its radius may be given upon construction of
  *   an object of this type. They default to the origin and a radius of 1.0.
  *
- *   This class is derived from StraightBoundary rather than from
- *   Boundary, which would seem natural, since this way we can use the
- *   StraightBoundary::in_between() function.
- *
  *   @ingroup boundary
  *
- *   @author Wolfgang Bangerth, 1998, Ralf Hartmann, 2001
+ *   @author Wolfgang Bangerth, 1998, Ralf Hartmann, 2001, Luca Heltai, 2013
  */
 template <int dim, int spacedim=dim>
-class HyperBallBoundary : public StraightBoundary<dim,spacedim>
+class HyperBallBoundary : public FlatManifold<spacedim>
 {
 public:
   /**
@@ -384,81 +252,28 @@ public:
    */
   HyperBallBoundary (const Point<spacedim> p      = Point<spacedim>(),
                      const double     radius = 1.0);
-
+    
   /**
    * Refer to the general documentation of
    * this class and the documentation of the
    * base class.
    */
-  virtual
-  Point<spacedim>
-  get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
+    virtual Point<spacedim>
+    get_new_point(const std::vector<Point<spacedim> > &surrounding_points,
+                 const std::vector<double> &weights) const;
 
-  /**
-   * Refer to the general documentation of
-   * this class and the documentation of the
-   * base class.
-   */
-  virtual
-  Point<spacedim>
-  get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
 
   /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
+   * Implementation of the function declared in the base class.
    *
-   * Calls
-   * @p get_intermediate_points_between_points.
+   * Refer to the general documentation of this class and the
+   * documentation of the base class.
    */
   virtual
-  void
-  get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
-                                   std::vector<Point<spacedim> > &points) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Only implemented for <tt>dim=3</tt>
-   * and for <tt>points.size()==1</tt>.
-   */
-  virtual
-  void
-  get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
-                                   std::vector<Point<spacedim> > &points) const;
+  Point<spacedim>
+  normal_vector (const std::vector<Point<spacedim> > & vertices, 
+                const Point<spacedim> &p) const;
 
-  /**
-   * Implementation of the function
-   * declared in the base class.
-   *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual
-  Tensor<1,spacedim>
-  normal_vector (const typename Triangulation<dim,spacedim>::face_iterator &face,
-                 const Point<spacedim> &p) const;
-
-  /**
-   * Compute the normals to the
-   * boundary at the vertices of
-   * the given face.
-   *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual
-  void
-  get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
-                           typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const;
 
   /**
    * Return the center of the ball.
@@ -494,40 +309,28 @@ protected:
   const double radius;
 
   /**
-   * This flag is @p false for
-   * this class and for all derived
-   * classes that set the radius by
-   * the constructor. For example
-   * this flag is @p false for the
-   * HalfHyperBallBoundary
-   * class but it is @p true for
-   * the HyperShellBoundary
-   * class, for example.  The
-   * latter class doesn't get its
-   * radii by the constructor but
-   * need to compute the radii
-   * automatically each time one of
-   * the virtual functions is
+   * This flag is @p false for this class and for all derived classes
+   * that set the radius by the constructor. For example this flag is
+   * @p false for the HalfHyperBallBoundary class but it is @p true
+   * for the HyperShellBoundary class, for example.  The latter class
+   * doesn't get its radii by the constructor but need to compute the
+   * radii automatically each time one of the virtual functions is
    * called.
    */
   bool compute_radius_automatically;
 
+
 private:
 
-  /**
-   * Called by
-   * @p get_intermediate_points_on_line
-   * and by
-   * @p get_intermediate_points_on_quad.
-   *
-   * Refer to the general
-   * documentation of
-   * @p get_intermediate_points_on_line
-   * in the documentation of the
-   * base class.
+  /**                                                                           
+   * Called by @p get_new_point for special cases where surrounding
+   * points are two. Returns the point which is at xi between
+   * p0 and p1, where xi is between 0 and 1. 
    */
-  void get_intermediate_points_between_points (const Point<spacedim> &p0, const Point<spacedim> &p1,
-                                               std::vector<Point<spacedim> > &points) const;
+  Point<spacedim> get_intermediate_point (const Point<spacedim> &p0, 
+                                         const Point<spacedim> &p1,
+                                         const double xi) const;
+
 };
 
 
@@ -554,61 +357,27 @@ public:
   HalfHyperBallBoundary (const Point<dim> p      = Point<dim>(),
                          const double     radius = 1.0);
 
+    
   /**
-   * Check if on the line <tt>x==0</tt>,
-   * otherwise pass to the base
-   * class.
-   */
-  virtual Point<dim>
-  get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const;
-
-  /**
-   * Check if on the line <tt>x==0</tt>,
-   * otherwise pass to the base
-   * class.
+   * Refer to the general documentation of this class and the
+   * documentation of the base class.
    */
-  virtual Point<dim>
-  get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
+    virtual
+    Point<dim>
+    get_new_point(const std::vector<Point<dim> > &surrounding_points,
+                 const std::vector<double> &weights) const;
 
+    
   /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
+   * Implementation of the function declared in the base class.
    *
-   * Calls
-   * @p get_intermediate_points_between_points.
+   * Refer to the general documentation of this class and the
+   * documentation of the base class.
    */
-  virtual void
-  get_intermediate_points_on_line (const typename Triangulation<dim>::line_iterator &line,
-                                   std::vector<Point<dim> > &points) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Only implemented for <tt>dim=3</tt>
-   * and for <tt>points.size()==1</tt>.
-   */
-  virtual void
-  get_intermediate_points_on_quad (const typename Triangulation<dim>::quad_iterator &quad,
-                                   std::vector<Point<dim> > &points) const;
-
-  /**
-   * Compute the normals to the
-   * boundary at the vertices of
-   * the given face.
-   *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual void
-  get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
-                           typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
+  virtual
+  Point<dim>
+  normal_vector (const std::vector<Point<dim> > & vertices, 
+                const Point<dim> &p) const;
 };
 
 
@@ -624,21 +393,21 @@ public:
  * @author Wolfgang Bangerth, 1999
  */
 template <int dim>
-class HyperShellBoundary : public HyperBallBoundary<dim>
+class HyperShellBoundary : public PolarManifold<dim>
 {
 public:
   /**
-   * Constructor. The center of the
-   * spheres defaults to the
-   * origin.
-   *
-   * Calls the constructor of its
-   * base @p HyperBallBoundary
-   * class with a dummy radius as
-   * argument. This radius will be
-   * ignored
+   * Constructor. The center of the spheres defaults to the origin.
    */
   HyperShellBoundary (const Point<dim> &center = Point<dim>());
+  
+  /**
+   * Project to manifold. The vertices are used to compute
+   * automatically the radius.
+   */
+  virtual Point<dim>
+  project_to_manifold(const std::vector<Point<dim> > &vertices, 
+                     const Point<dim> &p) const;
 };
 
 
@@ -675,58 +444,14 @@ public:
                           const double inner_radius = -1,
                           const double outer_radius = -1);
 
-  /**
-   * Construct a new point on a line.
-   */
-  virtual Point<dim>
-  get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const;
 
   /**
-   * Construct a new point on a quad.
+   * Compute the normal to the surface. 
    */
-  virtual Point<dim>
-  get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Calls
-   * @p get_intermediate_points_between_points.
-   */
-  virtual void
-  get_intermediate_points_on_line (const typename Triangulation<dim>::line_iterator &line,
-                                   std::vector<Point<dim> > &points) const;
-
-  /**
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   *
-   * Only implemented for <tt>dim=3</tt>
-   * and for <tt>points.size()==1</tt>.
-   */
-  virtual void
-  get_intermediate_points_on_quad (const typename Triangulation<dim>::quad_iterator &quad,
-                                   std::vector<Point<dim> > &points) const;
-
-  /**
-   * Compute the normals to the
-   * boundary at the vertices of
-   * the given face.
-   *
-   * Refer to the general
-   * documentation of this class
-   * and the documentation of the
-   * base class.
-   */
-  virtual void
-  get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
-                           typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
-
+    virtual Point<dim>
+    normal_vector (const std::vector<Point<dim> > & vertices, 
+                  const Point<dim> &point) const;
+    
 private:
   /**
    * Inner and outer radii of the shell.
@@ -745,7 +470,7 @@ private:
  * <tt>dim=2</tt>,<tt>spacedim=3</tt>, that is, just the surface.
  */
 template <int dim, int spacedim>
-class TorusBoundary : public Boundary<dim,spacedim>
+class TorusBoundary : public ManifoldChart<dim,spacedim>
 {
 public:
   /**
@@ -754,83 +479,43 @@ public:
    */
   TorusBoundary (const double R, const double r);
 
-//Boundary Refinenment  Functions
-  /**
-   * Construct a new point on a line.
-   */
-  virtual Point<spacedim>
-  get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
-
-  /**
-   * Construct a new point on a quad.
-   */
-  virtual Point<spacedim>
-  get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
-
-  /**
-   * Construct a new points on a line.
-   */
-  virtual void   get_intermediate_points_on_line (
-    const typename Triangulation< dim, spacedim >::line_iterator   &line,
-    std::vector< Point< spacedim > >         &points) const ;
-
   /**
-   * Construct a new points on a quad.
+   * Pull back the given point in spacedim to the euclidean dim
+   * dimensional space.  Get the surface coordinates of the Torus,
+   * i.e., from <tt>(x,y,z)</tt> to <tt>(theta,phi)</tt>.
+   *
+   * Refer to the general documentation of this class for more
+   * information.
    */
-  virtual void  get_intermediate_points_on_quad (
-    const typename Triangulation< dim, spacedim >::quad_iterator &quad,
-    std::vector< Point< spacedim > >         &points ) const ;
+    virtual Point<dim>
+    pull_back(const Point<spacedim> &space_point) const;
+    
+    /**
+     * Given a point in the dim dimensianal Euclidean space, this
+     * method returns a point on the manifold embedded in the spacedim
+     * Euclidean space.  Get the cartesian coordinates of the Torus,
+     * i.e., from <tt>(theta,phi)</tt> to <tt>(x,y,z)</tt>.
+     */
+    virtual Point<spacedim>
+    push_forward(const Point<dim> &chart_point) const;
 
   /**
-   * Get the normal from cartesian
-   * coordinates. This normal does not have
-   * unit length.
+   * Get the normal from cartesian coordinates. This normal does not
+   * have unit length.
    */
-  virtual void get_normals_at_vertices (
-    const typename Triangulation< dim, spacedim >::face_iterator &face,
-    typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const ;
+  Point<spacedim>  normal_vector(const std::vector<Point<spacedim> > & vertices, 
+                                const Point<spacedim> &p) const;
 
 private:
-  //Handy functions
-  /**
-   * Function that corrects the value and
-   * sign of angle, that is, given
-   * <tt>angle=tan(abs(y/x))</tt>; if <tt>
-   * (y > 0) && (x < 0) </tt> then
-   * <tt>correct_angle = Pi - angle</tt>,
-   * etc.
-   */
-
   double           get_correct_angle(const double angle,const double x,const double y) const;
 
-  /**
-   * Get the cartesian coordinates of the
-   * Torus, i.e., from <tt>(theta,phi)</tt>
-   * to <tt>(x,y,z)</tt>.
-   */
-  Point<spacedim>  get_real_coord(const Point<dim> &surfP) const ;
-
-  /**
-   * Get the surface coordinates of the
-   * Torus, i.e., from <tt>(x,y,z)</tt> to
-   * <tt>(theta,phi)</tt>.
-   */
-  Point<dim>       get_surf_coord(const Point<spacedim> &p) const ;
-
   /**
    * Get the normal from surface
    * coordinates. This normal does not have
    * unit length.
    */
   Point<spacedim>  get_surf_norm_from_sp(const Point<dim> &surfP)      const ;
-
-  /**
-   * Get the normal from cartesian
-   * coordinates. This normal does not have
-   * unit length.
-   */
-  Point<spacedim>  get_surf_norm(const Point<spacedim> &p) const ;
-
+    
   /**
    * Inner and outer radii of the shell.
    */
@@ -842,59 +527,6 @@ private:
 
 /* -------------- declaration of explicit specializations ------------- */
 
-#ifndef DOXYGEN
-
-template <>
-Point<1>
-HyperBallBoundary<1>::
-get_new_point_on_quad (const Triangulation<1>::quad_iterator &) const;
-template <>
-void
-HyperBallBoundary<1>::get_intermediate_points_on_line (
-  const Triangulation<1>::line_iterator &,
-  std::vector<Point<1> > &) const;
-template <>
-void
-HyperBallBoundary<3>::get_intermediate_points_on_quad (
-  const Triangulation<3>::quad_iterator &quad,
-  std::vector<Point<3> > &points) const;
-template <>
-void
-HyperBallBoundary<1>::
-get_normals_at_vertices (const Triangulation<1,1>::face_iterator &,
-                         Boundary<1,1>::FaceVertexNormals &) const;
-template <>
-Point<1>
-HalfHyperBallBoundary<1>::
-get_new_point_on_quad (const Triangulation<1>::quad_iterator &) const;
-template <>
-void
-HalfHyperBallBoundary<1>::
-get_intermediate_points_on_quad (const Triangulation<1>::quad_iterator &,
-                                 std::vector<Point<1> > &) const;
-template <>
-void
-HalfHyperBallBoundary<1>::
-get_normals_at_vertices (const Triangulation<1,1>::face_iterator &,
-                         Boundary<1,1>::FaceVertexNormals &) const;
-template <>
-Point<1>
-HalfHyperShellBoundary<1>::
-get_new_point_on_quad (const Triangulation<1>::quad_iterator &) const;
-template <>
-void
-HalfHyperShellBoundary<1>::
-get_intermediate_points_on_quad (const Triangulation<1>::quad_iterator &,
-                                 std::vector<Point<1> > &) const;
-template <>
-void
-HalfHyperShellBoundary<1>::
-get_normals_at_vertices (const Triangulation<1,1>::face_iterator &,
-                         Boundary<1,1>::FaceVertexNormals &) const;
-
-
-#endif // DOXYGEN
-
 DEAL_II_NAMESPACE_CLOSE
 
 #endif
index 8e9e4ad4811d8838f90ace87412cd789b509ce50..db5c01d68527cb2d7ce7e4fa5d53b7422bdfc8a3 100644 (file)
@@ -202,6 +202,14 @@ namespace internal
        */
       std::vector<BoundaryOrMaterialId> boundary_or_material_id;
 
+      /**
+       * Store manifold ids. This field
+       * stores the manifold id of each object, which
+       * is a number between 0 and
+       * numbers::invalid_manifold_id-1. 
+       */
+      std::vector<types::manifold_id> manifold_id;
+
       /**
        *  Assert that enough space
        *  is allocated to
@@ -883,6 +891,7 @@ namespace internal
       ar &used;
       ar &user_flags;
       ar &boundary_or_material_id;
+      ar &manifold_id;
       ar &next_free_single &next_free_pair &reverse_order_next_free_single;
       ar &user_data &user_data_type;
     }
index 1b071ee4250477f88b0957ba1c5914655d13f271..602e126ff9720e56f001f144fcfd92df6ecaaa48 100644 (file)
@@ -1834,7 +1834,7 @@ PreconditionChebyshev<MATRIX,VECTOR>::initialize (const MATRIX &matrix,
       // reset deal.II stream
       deallog.detach();
       if (old_stream)
-        deallog.attach(*old_stream, false);
+        deallog.attach(*old_stream);
 
       // include a safety factor since the CG method will in general not be
       // converged
index 6b57aea315ed8e8fa4d817a6a7956c5c3e1feecf..abb0ee58f64aeb74ea89a404ada954a342e4e61e 100644 (file)
@@ -4424,10 +4424,12 @@ namespace VectorTools
                     // sign of the normal vector provided by the boundary
                     // if they should point in different directions. this is the
                     // case in tests/deal.II/no_flux_11.
+                   std::vector<Point<dim> > vertices(GeometryInfo<dim>::vertices_per_face);
+                   for(unsigned int v=0; v<GeometryInfo<dim>::vertices_per_face; ++v)
+                     vertices[v] = cell->face(face_no)->vertex(v);
                     Point<dim> normal_vector
                       = (cell->face(face_no)->get_boundary()
-                         .normal_vector (cell->face(face_no),
-                                         fe_values.quadrature_point(i)));
+                         .normal_vector (vertices, fe_values.quadrature_point(i)));
                     if (normal_vector * fe_values.normal_vector(i) < 0)
                       normal_vector *= -1;
                     Assert (std::fabs(normal_vector.norm() - 1) < 1e-14,
index 44cdca00d781c8571d26c6e24480819c18de17e5..c03cf1acc740e04eb8d03003cf432796d2d02a34 100644 (file)
@@ -1744,14 +1744,16 @@ next_cell:
       fix_up_object (const Iterator &object,
                      const bool respect_manifold)
       {
-        const Boundary<Iterator::AccessorType::dimension,
-              Iterator::AccessorType::space_dimension>
+        const Manifold<Iterator::AccessorType::space_dimension>
               *manifold = (respect_manifold ?
                            &object->get_boundary() :
                            0);
 
         const unsigned int structdim = Iterator::AccessorType::structure_dimension;
         const unsigned int spacedim  = Iterator::AccessorType::space_dimension;
+       std::vector<Point<spacedim> > vertices(GeometryInfo<structdim>::vertices_per_cell);
+       for(unsigned int i=0; i<vertices.size(); ++i)
+         vertices[i] = object->vertex(i);
 
         // right now we can only deal
         // with cells that have been
@@ -1815,16 +1817,16 @@ next_cell:
                        /
                        eps);
                 else
-                  gradient[d]
-                    = ((objective_function (object,
-                                            manifold->project_to_surface(object,
-                                                                         object_mid_point + h))
-                        -
-                        objective_function (object,
-                                            manifold->project_to_surface(object,
-                                                                         object_mid_point - h)))
-                       /
-                       eps);
+                   gradient[d]
+                     = ((objective_function (object,
+                                             manifold->project_to_manifold(vertices, 
+                                                                          object_mid_point + h))
+                         -
+                         objective_function (object,
+                                             manifold->project_to_manifold(vertices, 
+                                                                          object_mid_point - h)))
+                        /
+                        eps);
               }
 
             // sometimes, the
@@ -1856,8 +1858,8 @@ next_cell:
                                 gradient;
 
             if (respect_manifold == true)
-              object_mid_point = manifold->project_to_surface(object,
-                                                              object_mid_point);
+              object_mid_point = manifold->project_to_manifold(vertices, 
+                                                              object_mid_point);
 
             // compute current value of the
             // objective function
index 1795ace4fe6ad7add547e7f1dbc541b069fc3d33..be24961e2f1c5f9843d93a688c29d7f1e6376a96 100644 (file)
@@ -1487,6 +1487,7 @@ namespace internal
                                                   cells[cell].vertices[1]));
             next_free_line->set_used_flag ();
             next_free_line->set_material_id (cells[cell].material_id);
+           next_free_line->set_manifold_id (cells[cell].manifold_id);
             next_free_line->clear_user_data ();
             next_free_line->set_subdomain_id (0);
 
@@ -1574,16 +1575,24 @@ namespace internal
 
         // finally set the
         // vertex_to_boundary_id_map_1d
-        // map
+       // and vertex_to_manifold_id_map_1d
+        // maps
         triangulation.vertex_to_boundary_id_map_1d->clear();
+       triangulation.vertex_to_manifold_id_map_1d->clear();
         for (typename Triangulation<dim,spacedim>::active_cell_iterator
              cell = triangulation.begin_active();
              cell != triangulation.end(); ++cell)
           for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
-            if (cell->at_boundary(f))
-              (*triangulation
-               .vertex_to_boundary_id_map_1d)[cell->face(f)->vertex_index()]
-                = f;
+           {
+             (*triangulation
+              .vertex_to_manifold_id_map_1d)[cell->face(f)->vertex_index()]
+               = numbers::invalid_manifold_id;
+             
+             if (cell->at_boundary(f))
+               (*triangulation
+                .vertex_to_boundary_id_map_1d)[cell->face(f)->vertex_index()]
+                 = f;
+           }
       }
 
 
@@ -1760,6 +1769,7 @@ namespace internal
 
               cell->set_used_flag ();
               cell->set_material_id (cells[c].material_id);
+             cell->set_manifold_id (cells[c].manifold_id);
               cell->clear_user_data ();
               cell->set_subdomain_id (0);
 
@@ -1792,6 +1802,7 @@ namespace internal
             else
               // interior line -> numbers::internal_face_boundary_id
               line->set_boundary_indicator (numbers::internal_face_boundary_id);
+           line->set_manifold_id(numbers::flat_manifold_id);
           }
 
         // set boundary indicators where
@@ -1835,6 +1846,7 @@ namespace internal
                          ExcInteriorLineCantBeBoundary());
 
             line->set_boundary_indicator (boundary_line->boundary_id);
+           line->set_manifold_id (boundary_line->manifold_id);
           }
 
 
@@ -2411,6 +2423,7 @@ namespace internal
 
               cell->set_used_flag ();
               cell->set_material_id (cells[c].material_id);
+             cell->set_manifold_id (cells[c].manifold_id);
               cell->clear_user_flag ();
               cell->clear_user_data ();
               cell->set_subdomain_id (0);
@@ -2512,6 +2525,10 @@ namespace internal
             else
               // interior quad -> numbers::internal_face_boundary_id
               quad->set_boundary_indicator (numbers::internal_face_boundary_id);
+                                            // Manifold ids are set
+                                            // independently of where
+                                            // they are
+           quad->set_manifold_id(numbers::flat_manifold_id);
           }
 
         /////////////////////////////////////////
@@ -2519,11 +2536,15 @@ namespace internal
         // the boundary and mark all others as
         // interior ones
         //
-        // for this: first mark all lines
-        // as interior
+        // for this: first mark all lines as interior. use this loop
+        // to also set all manifold ids of all lines
         for (typename Triangulation<dim,spacedim>::line_iterator
-             line=triangulation.begin_line(); line!=triangulation.end_line(); ++line)
-          line->set_boundary_indicator (numbers::internal_face_boundary_id);
+              line=triangulation.begin_line(); line!=triangulation.end_line(); ++line)
+         {
+           line->set_boundary_indicator (numbers::internal_face_boundary_id);
+           line->set_manifold_id(numbers::flat_manifold_id);
+         }
+       
         // next reset all lines bounding
         // boundary quads as on the
         // boundary also. note that since
@@ -2596,6 +2617,8 @@ namespace internal
                                        "if they carry the same boundary indicator."));
 
             line->set_boundary_indicator (boundary_line->boundary_id);
+                                            // Set manifold id if given
+           line->set_manifold_id(boundary_line->manifold_id);
           }
 
 
@@ -2728,6 +2751,7 @@ namespace internal
                                        "if they carry the same boundary indicator."));
 
             quad->set_boundary_indicator (boundary_quad->boundary_id);
+           quad->set_manifold_id (boundary_quad->manifold_id);
           }
 
 
@@ -3581,6 +3605,7 @@ namespace internal
                           switch_1->set_line_orientation(2, switch_2->line_orientation(2));
                           switch_1->set_line_orientation(3, switch_2->line_orientation(3));
                           switch_1->set_boundary_indicator(switch_2->boundary_indicator());
+                         switch_1->set_manifold_id(switch_2->manifold_id());
                           switch_1->set_user_index(switch_2->user_index());
                           if (switch_2->user_flag_set())
                             switch_1->set_user_flag();
@@ -3596,6 +3621,7 @@ namespace internal
                           switch_2->set_line_orientation(2, switch_1_line_orientations[2]);
                           switch_2->set_line_orientation(3, switch_1_line_orientations[3]);
                           switch_2->set_boundary_indicator(switch_1_boundary_indicator);
+                         switch_2->set_manifold_id(switch_1->manifold_id());
                           switch_2->set_user_index(switch_1_user_index);
                           if (switch_1_user_flag)
                             switch_2->set_user_flag();
@@ -4125,6 +4151,7 @@ namespace internal
             new_lines[l]->clear_children();
             // interior line
             new_lines[l]->set_boundary_indicator(numbers::internal_face_boundary_id);
+           new_lines[l]->set_manifold_id(cell->manifold_id());
           }
 
         // Now add the four (two)
@@ -4246,6 +4273,7 @@ namespace internal
             // inherit material
             // properties
             subcells[i]->set_material_id (cell->material_id());
+           subcells[i]->set_manifold_id (cell->manifold_id());
             subcells[i]->set_subdomain_id (subdomainid);
 
             if (i%2==0)
@@ -4451,11 +4479,19 @@ namespace internal
                                     ::TriaObject<1> (cell->vertex_index(0),
                                                      next_unused_vertex));
                   first_child->set_material_id (cell->material_id());
+                 first_child->set_manifold_id (cell->manifold_id());
                   first_child->set_subdomain_id (subdomainid);
                   first_child->set_direction_flag (cell->direction_flag());
-
+                 
                   first_child->set_parent (cell->index ());
 
+                                                  // Set manifold id
+                                                  // of the right
+                                                  // face. Only do
+                                                  // this on the
+                                                  // first child.
+                 first_child->face(1)->set_manifold_id(cell->manifold_id());
+                 
                   // reset neighborship info (refer
                   // to
                   // internal::Triangulation::TriaLevel<0>
@@ -4511,6 +4547,7 @@ namespace internal
                                                      cell->vertex_index(1)));
                   second_child->set_neighbor (0, first_child);
                   second_child->set_material_id (cell->material_id());
+                 second_child->set_manifold_id (cell->manifold_id());
                   second_child->set_subdomain_id (subdomainid);
                   second_child->set_direction_flag (cell->direction_flag());
 
@@ -4908,6 +4945,9 @@ namespace internal
                   children[0]->set_boundary_indicator (line->boundary_indicator());
                   children[1]->set_boundary_indicator (line->boundary_indicator());
 
+                  children[0]->set_manifold_id (line->manifold_id());
+                  children[1]->set_manifold_id (line->manifold_id());
+
                   // finally clear flag
                   // indicating the need
                   // for refinement
@@ -5431,6 +5471,9 @@ namespace internal
 
                   children[0]->set_boundary_indicator (line->boundary_indicator());
                   children[1]->set_boundary_indicator (line->boundary_indicator());
+                 
+                 children[0]->set_manifold_id (line->manifold_id());
+                  children[1]->set_manifold_id (line->manifold_id());
 
                   // finally clear flag
                   // indicating the need
@@ -5554,6 +5597,7 @@ namespace internal
                     new_line->clear_user_data();
                     new_line->clear_children();
                     new_line->set_boundary_indicator(quad->boundary_indicator());
+                   new_line->set_manifold_id(quad->manifold_id());
 
                     // child 0 and 1 of a line are
                     // switched if the line
@@ -5618,6 +5662,7 @@ namespace internal
                         new_quads[i]->clear_user_data();
                         new_quads[i]->clear_children();
                         new_quads[i]->set_boundary_indicator (quad->boundary_indicator());
+                       new_quads[i]->set_manifold_id (quad->manifold_id());
                         // set all line orientations to
                         // true, change this after the
                         // loop, as we have to consider
@@ -5738,6 +5783,7 @@ namespace internal
                                 new_child[i]->set(internal::Triangulation::TriaObject<1>(old_child[i]->vertex_index(0),
                                                                                          old_child[i]->vertex_index(1)));
                                 new_child[i]->set_boundary_indicator(old_child[i]->boundary_indicator());
+                               new_child[i]->set_manifold_id(old_child[i]->manifold_id());
                                 new_child[i]->set_user_index(old_child[i]->user_index());
                                 if (old_child[i]->user_flag_set())
                                   new_child[i]->set_user_flag();
@@ -5852,6 +5898,7 @@ namespace internal
                             switch_1->set_line_orientation(2, switch_2->line_orientation(2));
                             switch_1->set_line_orientation(3, switch_2->line_orientation(3));
                             switch_1->set_boundary_indicator(switch_2->boundary_indicator());
+                           switch_1->set_manifold_id(switch_2->manifold_id());
                             switch_1->set_user_index(switch_2->user_index());
                             if (switch_2->user_flag_set())
                               switch_1->set_user_flag();
@@ -5874,6 +5921,7 @@ namespace internal
                             switch_2->set_line_orientation(2, switch_1_line_orientations[2]);
                             switch_2->set_line_orientation(3, switch_1_line_orientations[3]);
                             switch_2->set_boundary_indicator(switch_1_boundary_indicator);
+                           switch_2->set_manifold_id(switch_1->manifold_id());
                             switch_2->set_user_index(switch_1_user_index);
                             if (switch_1_user_flag)
                               switch_2->set_user_flag();
@@ -6017,6 +6065,9 @@ namespace internal
 
                             children[0]->set_boundary_indicator (middle_line->boundary_indicator());
                             children[1]->set_boundary_indicator (middle_line->boundary_indicator());
+
+                            children[0]->set_manifold_id (middle_line->manifold_id());
+                            children[1]->set_manifold_id (middle_line->manifold_id());
                           }
                         // now remove the flag from the
                         // quad and go to the next
@@ -6166,6 +6217,7 @@ namespace internal
                         new_lines[i]->clear_user_data();
                         new_lines[i]->clear_children();
                         new_lines[i]->set_boundary_indicator(quad->boundary_indicator());
+                       new_lines[i]->set_manifold_id(quad->manifold_id());
                       }
 
                     // now for the
@@ -6271,6 +6323,7 @@ namespace internal
                         new_quads[i]->clear_user_data();
                         new_quads[i]->clear_children();
                         new_quads[i]->set_boundary_indicator (quad->boundary_indicator());
+                       new_quads[i]->set_manifold_id (quad->manifold_id());
                         // set all line orientations to
                         // true, change this after the
                         // loop, as we have to consider
@@ -6397,6 +6450,8 @@ namespace internal
                       new_lines[i]->clear_children();
                       // interior line
                       new_lines[i]->set_boundary_indicator(numbers::internal_face_boundary_id);
+                      // they inherit geometry description of the hex they belong to
+                      new_lines[i]->set_manifold_id(hex->manifold_id());
                     }
 
                   // find some space for the newly to
@@ -6416,6 +6471,8 @@ namespace internal
                       new_quads[i]->clear_children();
                       // interior quad
                       new_quads[i]->set_boundary_indicator (numbers::internal_face_boundary_id);
+                      // they inherit geometry description of the hex they belong to
+                     new_quads[i]->set_manifold_id (hex->manifold_id());
                       // set all line orientation
                       // flags to true by default,
                       // change this afterwards, if
@@ -6449,6 +6506,7 @@ namespace internal
                       // inherit material
                       // properties
                       new_hexes[i]->set_material_id (hex->material_id());
+                     new_hexes[i]->set_manifold_id (hex->manifold_id());
                       new_hexes[i]->set_subdomain_id (subdomainid);
 
                       if (i%2)
@@ -9443,11 +9501,16 @@ Triangulation (const MeshSmoothing smooth_grid,
   faces(NULL),
   anisotropic_refinement(false),
   check_for_distorted_cells(check_for_distorted_cells),
-  vertex_to_boundary_id_map_1d (0)
+  vertex_to_boundary_id_map_1d (0),
+  vertex_to_manifold_id_map_1d (0)
 {
   if (dim == 1)
-    vertex_to_boundary_id_map_1d
-      = new std::map<unsigned int, types::boundary_id>();
+    {
+      vertex_to_boundary_id_map_1d
+       = new std::map<unsigned int, types::boundary_id>();
+      vertex_to_manifold_id_map_1d
+       = new std::map<unsigned int, types::manifold_id>();
+    }
 
   // connect the any_change signal to the other signals
   signals.create.connect (signals.any_change);
@@ -9465,7 +9528,8 @@ Triangulation (const Triangulation<dim, spacedim> &other)
   :
   Subscriptor(),
   check_for_distorted_cells(other.check_for_distorted_cells),
-  vertex_to_boundary_id_map_1d (0)
+  vertex_to_boundary_id_map_1d (0),
+  vertex_to_manifold_id_map_1d (0)
 {
   Assert (false, ExcMessage ("You are not allowed to call this constructor "
                              "because copying Triangulation objects is not "
@@ -9489,6 +9553,13 @@ Triangulation<dim, spacedim>::~Triangulation ()
           (vertex_to_boundary_id_map_1d == 0),
           ExcInternalError());
   delete vertex_to_boundary_id_map_1d;
+  // the vertex_to_manifold_id_map_1d field
+  // should be unused except in 1d
+  Assert ((dim == 1)
+          ||
+          (vertex_to_manifold_id_map_1d == 0),
+          ExcInternalError());
+  delete vertex_to_manifold_id_map_1d;
 }
 
 
@@ -9517,37 +9588,62 @@ void
 Triangulation<dim, spacedim>::set_boundary (const types::boundary_id number,
                                             const Boundary<dim, spacedim> &boundary_object)
 {
-  Assert(number < numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
+  set_manifold(m_number, boundary_object);
+}
+
 
-  boundary[number] = &boundary_object;
+
+template <int dim, int spacedim>
+void
+Triangulation<dim, spacedim>::set_manifold (const types::manifold_id m_number,
+                                            const Boundary<dim,spacedim> &manifold_object)
+{
+  Assert(m_number < numbers::invalid_manifold_id,
+        ExcIndexRange(m_number,0,numbers::invalid_manifold_id));
+
+  manifold[m_number] = &manifold_object;
 }
 
 
+template <int dim, int spacedim>
+void
+Triangulation<dim, spacedim>::set_boundary (const types::manifold_id m_number)
+{
+  set_manifold(m_number);
+}
+
 
 template <int dim, int spacedim>
 void
-Triangulation<dim, spacedim>::set_boundary (const types::boundary_id number)
+Triangulation<dim, spacedim>::set_manifold (const types::manifold_id m_number)
 {
-  Assert(number < numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
+  Assert(m_number < numbers::invalid_manifold_id,
+        ExcIndexRange(m_number,0,numbers::invalid_manifold_id));
 
   //delete the entry located at number.
-  boundary.erase(number);
+  manifold.erase(m_number);
 }
 
 
 
 template <int dim, int spacedim>
-const Boundary<dim, spacedim> &
-Triangulation<dim, spacedim>::get_boundary (const types::boundary_id number) const
+const Boundary<dim,spacedim> &
+Triangulation<dim, spacedim>::get_boundary (const types::manifold_id m_number) const
 {
-  Assert(number<numbers::internal_face_boundary_id, ExcIndexRange(number,0,numbers::internal_face_boundary_id));
+  return get_manifold(m_number);
+}
 
-  //look, if there is a boundary stored at
-  //boundary_id number.
-  typename std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
-    = boundary.find(number);
 
-  if (it != boundary.end())
+template <int dim, int spacedim>
+const Boundary<dim,spacedim> &
+Triangulation<dim, spacedim>::get_manifold (const types::manifold_id m_number) const
+{
+                                  //look, if there is a manifold stored at
+                                  //manifold_id number.
+  typename std::map<types::manifold_id, SmartPointer<const Boundary<dim,spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
+    = manifold.find(m_number);
+
+  if (it != manifold.end())
     {
       //if we have found an entry, return it
       return *(it->second);
@@ -9562,6 +9658,8 @@ Triangulation<dim, spacedim>::get_boundary (const types::boundary_id number) con
 }
 
 
+
+
 template <int dim, int spacedim>
 std::vector<types::boundary_id>
 Triangulation<dim, spacedim>::get_boundary_indicators () const
@@ -9604,6 +9702,34 @@ Triangulation<dim, spacedim>::get_boundary_indicators () const
     }
 }
 
+template <int dim, int spacedim>
+std::vector<types::manifold_id>
+Triangulation<dim, spacedim>::get_manifold_ids () const
+{
+//TODO: if manifold_id_t is a real integer type, this might become
+//a humongously large array...
+                                  // Just store all possible values
+  std::vector<bool> mi_exists(numbers::invalid_manifold_id+1, false);
+  active_cell_iterator cell=begin_active();
+  for (; cell!=end(); ++cell)
+    {
+      mi_exists[cell->manifold_id()] = true;
+      if(dim>1)
+       for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)
+         mi_exists[cell->face(face)->manifold_id()]=true;
+    }
+  
+  const unsigned int n_mi=
+    std::count(mi_exists.begin(), mi_exists.end(), true)-1;
+
+  std::vector<types::manifold_id> manifold_indicators(n_mi);
+  unsigned int mi_counter=0;
+  for (unsigned int i=0; i<mi_exists.size()-1; ++i)
+    if (mi_exists[i]==true)
+      manifold_indicators[mi_counter++]=i;
+  
+  return manifold_indicators;
+}
 
 
 /*-----------------------------------------------------------------*/
@@ -9631,10 +9757,11 @@ copy_triangulation (const Triangulation<dim, spacedim> &old_tria)
 
   faces         = new internal::Triangulation::TriaFaces<dim>(*old_tria.faces);
 
-  typename std::map<types::boundary_id, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > >::const_iterator
-  bdry_iterator = old_tria.boundary.begin();
-  for (; bdry_iterator != old_tria.boundary.end() ; bdry_iterator++)
-    boundary[bdry_iterator->first] = bdry_iterator->second;
+  typename std::map<types::boundary_id,
+    SmartPointer<const Boundary<dim,spacedim> , Triangulation<dim, spacedim> > >::const_iterator
+  bdry_iterator = old_tria.manifold.begin();
+  for (; bdry_iterator != old_tria.manifold.end() ; bdry_iterator++)
+    manifold[bdry_iterator->first] = bdry_iterator->second;
 
 
   levels.reserve (old_tria.levels.size());
@@ -9651,6 +9778,11 @@ copy_triangulation (const Triangulation<dim, spacedim> &old_tria)
       vertex_to_boundary_id_map_1d
         = (new std::map<unsigned int, types::boundary_id>
            (*old_tria.vertex_to_boundary_id_map_1d));
+
+      delete vertex_to_manifold_id_map_1d;
+      vertex_to_manifold_id_map_1d
+        = (new std::map<unsigned int, types::manifold_id>
+           (*old_tria.vertex_to_manifold_id_map_1d));
     }
 
   // inform those who are listening on old_tria of
@@ -12105,7 +12237,7 @@ Triangulation<dim, spacedim>::clear_despite_subscriptions()
   vertices.clear ();
   vertices_used.clear ();
 
-  boundary.clear();
+  manifold.clear();
 
   number_cache = internal::Triangulation::NumberCache<dim>();
 }
@@ -14090,7 +14222,7 @@ Triangulation<dim, spacedim>::memory_consumption () const
     mem += MemoryConsumption::memory_consumption (*levels[i]);
   mem += MemoryConsumption::memory_consumption (vertices);
   mem += MemoryConsumption::memory_consumption (vertices_used);
-  mem += sizeof(boundary);
+  mem += sizeof(manifold);
   mem += sizeof(smooth_grid);
   mem += MemoryConsumption::memory_consumption (number_cache);
   mem += sizeof (faces);
index e16829955d1f393d91aa432f9819d3814bbf60d4..c1f3faa1039ea1809923cc3d4cd0744c1b7a01f7 100644 (file)
@@ -20,5 +20,8 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS
   {
 #if deal_II_dimension <= deal_II_space_dimension
     template class Triangulation<deal_II_dimension, deal_II_space_dimension>;
+#endif
+#if deal_II_dimension == deal_II_space_dimension
+    template struct CellData<deal_II_dimension>;
 #endif
   }
index 7bccde417aa64bde9689eca830128e504baae899..d0926960955811fc362490ca9eb6b37cc848f413 100644 (file)
@@ -22,6 +22,7 @@
 #include <deal.II/grid/tria_iterator.templates.h>
 #include <deal.II/base/geometry_info.h>
 #include <deal.II/grid/grid_tools.h>
+#include <deal.II/grid/tria_boundary.h>
 #include <deal.II/fe/mapping_q1.h>
 
 #include <cmath>
@@ -1098,6 +1099,29 @@ double TriaAccessor<3,3,3>::extent_in_direction(const unsigned int axis) const
 }
 
 
+// Recursively set manifold ids on hex iterators.
+template <>
+void
+TriaAccessor<3,3,3>::
+set_all_manifold_ids (const types::manifold_id manifold_ind) const
+{
+  set_manifold_id (manifold_ind);
+
+  if (this->has_children())
+    for (unsigned int c=0; c<this->n_children(); ++c)
+      this->child(c)->set_all_manifold_ids (manifold_ind);
+
+                                  // for hexes also set manifold_id
+                                  // of bounding quads and lines
+  
+                                  // Six bonding quads
+  for(unsigned int i=0; i<6; ++i)
+    this->quad(i)->set_manifold_id(manifold_ind);
+                                  // Twelve bounding lines
+  for (unsigned int i=0; i<12; ++i)
+    this->line(i)->set_manifold_id (manifold_ind);
+}
+
 
 /*------------------------ Functions: CellAccessor<1> -----------------------*/
 
index 2a26ec1c838d3a63960f5992708e3e9efcacae1f..13eac3c1817e153a92e96de3ce0eb2d4553ba599 100644 (file)
@@ -196,8 +196,15 @@ namespace internal
           // more entries.
           boundary_or_material_id.reserve (new_size);
           boundary_or_material_id.resize (new_size);
+
           user_data.reserve (new_size);
           user_data.resize (new_size);
+
+          manifold_id.reserve (new_size);
+          manifold_id.insert (manifold_id.end(),
+                             new_size-manifold_id.size(),
+                             numbers::flat_manifold_id);
+
         }
 
       if (n_unused_singles==0)
@@ -276,6 +283,11 @@ namespace internal
           boundary_or_material_id.reserve (new_size);
           boundary_or_material_id.resize (new_size);
 
+          manifold_id.reserve (new_size);
+          manifold_id.insert (manifold_id.end(),
+                             new_size-manifold_id.size(),
+                             numbers::flat_manifold_id);
+
           user_data.reserve (new_size);
           user_data.resize (new_size);
 
@@ -388,6 +400,8 @@ namespace internal
               ExcMemoryInexact (cells.size(), children.size()));
       Assert (cells.size() == boundary_or_material_id.size(),
               ExcMemoryInexact (cells.size(), boundary_or_material_id.size()));
+      Assert (cells.size() == manifold_id.size(),
+              ExcMemoryInexact (cells.size(), manifold_id.size()));
       Assert (cells.size() == user_data.size(),
               ExcMemoryInexact (cells.size(), user_data.size()));
     }
@@ -407,6 +421,8 @@ namespace internal
               ExcMemoryInexact (cells.size(), refinement_cases.size()));
       Assert (cells.size() == boundary_or_material_id.size(),
               ExcMemoryInexact (cells.size(), boundary_or_material_id.size()));
+      Assert (cells.size() == manifold_id.size(),
+              ExcMemoryInexact (cells.size(), manifold_id.size()));
       Assert (cells.size() == user_data.size(),
               ExcMemoryInexact (cells.size(), user_data.size()));
     }
@@ -423,6 +439,8 @@ namespace internal
               ExcMemoryInexact (cells.size(), children.size()));
       Assert (cells.size() == boundary_or_material_id.size(),
               ExcMemoryInexact (cells.size(), boundary_or_material_id.size()));
+      Assert (cells.size() == manifold_id.size(),
+              ExcMemoryInexact (cells.size(), manifold_id.size()));
       Assert (cells.size() == user_data.size(),
               ExcMemoryInexact (cells.size(), user_data.size()));
       Assert (cells.size() * GeometryInfo<3>::faces_per_cell
@@ -465,6 +483,7 @@ namespace internal
       used.clear();
       user_flags.clear();
       boundary_or_material_id.clear();
+      manifold_id.clear();
       user_data.clear();
       user_data_type = data_unknown;
     }
@@ -497,6 +516,7 @@ namespace internal
               MemoryConsumption::memory_consumption (used) +
               MemoryConsumption::memory_consumption (user_flags) +
               MemoryConsumption::memory_consumption (boundary_or_material_id) +
+             MemoryConsumption::memory_consumption (manifold_id) +
               MemoryConsumption::memory_consumption (refinement_cases) +
               user_data.capacity() * sizeof(UserData) + sizeof(user_data));
     }
diff --git a/tests/manifold/CMakeLists.txt b/tests/manifold/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ffa6bb5
--- /dev/null
@@ -0,0 +1,5 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8)
+INCLUDE(${DEAL_II_SOURCE_DIR}/cmake/setup_testsubproject.cmake)
+PROJECT(testsuite CXX)
+INCLUDE(${DEAL_II_TARGET_CONFIG})
+DEAL_II_PICKUP_TESTS()
diff --git a/tests/manifold/flat_manifold_01.cc b/tests/manifold/flat_manifold_01.cc
new file mode 100644 (file)
index 0000000..9d463df
--- /dev/null
@@ -0,0 +1,55 @@
+//----------------------------  manifold_id_01.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  flat_manifold_01.cc  ---------------------------
+
+
+// Test periodicity conditions using FlatManifold
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/manifold.h>
+#include <deal.II/grid/manifold_lib.h>
+
+template <int spacedim> 
+void test() {
+  Point<spacedim> period;
+  for(unsigned int i=0; i<spacedim; ++i)
+    period[i] = 1.0;
+  FlatManifold<spacedim> manifold(period);
+  deallog << "Testing spacedim = " << spacedim << std::endl;
+  deallog << "Period: " << period << std::endl;
+  std::vector<Point<spacedim> > p(2);
+  std::vector<double> w(2, 0.5);
+  double eps = .1;
+  p[0] = period*eps*2;
+  p[1] = period*(1.0-eps);
+  Point<spacedim> middle = manifold.get_new_point(p, w);
+  deallog << "P(0): " << p[0] << std::endl;
+  deallog << "P(1): " << p[1] << std::endl;
+  deallog << "Middle: " << middle << std::endl;
+}
+
+int main () 
+{
+  std::ofstream logfile("output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-5);
+  
+  test<1>();
+  test<2>();
+  test<3>();
+
+  return 0;
+}
+                  
diff --git a/tests/manifold/flat_manifold_01.output b/tests/manifold/flat_manifold_01.output
new file mode 100644 (file)
index 0000000..f6f885f
--- /dev/null
@@ -0,0 +1,16 @@
+
+DEAL::Testing spacedim = 1
+DEAL::Period: 1.00000
+DEAL::P(0): 0.200000
+DEAL::P(1): 0.900000
+DEAL::Middle: 0.0500000
+DEAL::Testing spacedim = 2
+DEAL::Period: 1.00000 1.00000
+DEAL::P(0): 0.200000 0.200000
+DEAL::P(1): 0.900000 0.900000
+DEAL::Middle: 0.0500000 0.0500000
+DEAL::Testing spacedim = 3
+DEAL::Period: 1.00000 1.00000 1.00000
+DEAL::P(0): 0.200000 0.200000 0.200000
+DEAL::P(1): 0.900000 0.900000 0.900000
+DEAL::Middle: 0.0500000 0.0500000 0.0500000
diff --git a/tests/manifold/manifold_id_01.cc b/tests/manifold/manifold_id_01.cc
new file mode 100644 (file)
index 0000000..12b4fb9
--- /dev/null
@@ -0,0 +1,66 @@
+//----------------------------  manifold_id_01.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_01.cc  ---------------------------
+
+
+// Test Manifold ID We check the default manifold_id on cells and faces.
+// For each element it should output 255 (invalid manifold_id)
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+  deallog << "Testing dim=" << dim
+         << ", spacedim="<< spacedim << std::endl;
+  
+  Triangulation<dim,spacedim> tria;
+  GridGenerator::hyper_cube (tria);
+
+  typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+  tria.refine_global(ref);
+
+  for(cell = tria.begin_active(); cell != tria.end(); ++cell) {
+    deallog << "C: " << cell 
+           << ", mid: " << (int)cell->manifold_id() << std::endl;
+         for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+      deallog << "f: " << cell->face(f) 
+             << ", mid: " << (int)cell->face(f)->manifold_id() << std::endl;
+          
+  }
+}
+
+int main () 
+{
+  std::ofstream logfile("output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  
+  test<1,1>();
+  test<1,2>();
+  test<2,2>();
+  test<2,3>();
+  test<3,3>();
+
+  return 0;
+}
+                  
diff --git a/tests/manifold/manifold_id_01.output b/tests/manifold/manifold_id_01.output
new file mode 100644 (file)
index 0000000..c925aae
--- /dev/null
@@ -0,0 +1,114 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 1.0, mid: 255
+DEAL::f: 0, mid: 255
+DEAL::f: 2, mid: 255
+DEAL::C: 1.1, mid: 255
+DEAL::f: 2, mid: 255
+DEAL::f: 1, mid: 255
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 1.0, mid: 255
+DEAL::f: 0, mid: 255
+DEAL::f: 2, mid: 255
+DEAL::C: 1.1, mid: 255
+DEAL::f: 2, mid: 255
+DEAL::f: 1, mid: 255
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 1.0, mid: 255
+DEAL::f: 6, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 4, mid: 255
+DEAL::f: 14, mid: 255
+DEAL::C: 1.1, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 8, mid: 255
+DEAL::f: 5, mid: 255
+DEAL::f: 15, mid: 255
+DEAL::C: 1.2, mid: 255
+DEAL::f: 7, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 14, mid: 255
+DEAL::f: 10, mid: 255
+DEAL::C: 1.3, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 9, mid: 255
+DEAL::f: 15, mid: 255
+DEAL::f: 11, mid: 255
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 1.0, mid: 255
+DEAL::f: 6, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 4, mid: 255
+DEAL::f: 14, mid: 255
+DEAL::C: 1.1, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 8, mid: 255
+DEAL::f: 5, mid: 255
+DEAL::f: 15, mid: 255
+DEAL::C: 1.2, mid: 255
+DEAL::f: 7, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 14, mid: 255
+DEAL::f: 10, mid: 255
+DEAL::C: 1.3, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 9, mid: 255
+DEAL::f: 15, mid: 255
+DEAL::f: 11, mid: 255
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 1.0, mid: 255
+DEAL::f: 14, mid: 255
+DEAL::f: 41, mid: 255
+DEAL::f: 6, mid: 255
+DEAL::f: 37, mid: 255
+DEAL::f: 10, mid: 255
+DEAL::f: 33, mid: 255
+DEAL::C: 1.1, mid: 255
+DEAL::f: 41, mid: 255
+DEAL::f: 18, mid: 255
+DEAL::f: 8, mid: 255
+DEAL::f: 35, mid: 255
+DEAL::f: 11, mid: 255
+DEAL::f: 32, mid: 255
+DEAL::C: 1.2, mid: 255
+DEAL::f: 15, mid: 255
+DEAL::f: 40, mid: 255
+DEAL::f: 37, mid: 255
+DEAL::f: 22, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 31, mid: 255
+DEAL::C: 1.3, mid: 255
+DEAL::f: 40, mid: 255
+DEAL::f: 19, mid: 255
+DEAL::f: 35, mid: 255
+DEAL::f: 24, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 30, mid: 255
+DEAL::C: 1.4, mid: 255
+DEAL::f: 16, mid: 255
+DEAL::f: 39, mid: 255
+DEAL::f: 7, mid: 255
+DEAL::f: 36, mid: 255
+DEAL::f: 33, mid: 255
+DEAL::f: 26, mid: 255
+DEAL::C: 1.5, mid: 255
+DEAL::f: 39, mid: 255
+DEAL::f: 20, mid: 255
+DEAL::f: 9, mid: 255
+DEAL::f: 34, mid: 255
+DEAL::f: 32, mid: 255
+DEAL::f: 27, mid: 255
+DEAL::C: 1.6, mid: 255
+DEAL::f: 17, mid: 255
+DEAL::f: 38, mid: 255
+DEAL::f: 36, mid: 255
+DEAL::f: 23, mid: 255
+DEAL::f: 31, mid: 255
+DEAL::f: 28, mid: 255
+DEAL::C: 1.7, mid: 255
+DEAL::f: 38, mid: 255
+DEAL::f: 21, mid: 255
+DEAL::f: 34, mid: 255
+DEAL::f: 25, mid: 255
+DEAL::f: 30, mid: 255
+DEAL::f: 29, mid: 255
diff --git a/tests/manifold/manifold_id_02.cc b/tests/manifold/manifold_id_02.cc
new file mode 100644 (file)
index 0000000..71fe3d3
--- /dev/null
@@ -0,0 +1,74 @@
+//----------------------------  manifold_id_02.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_02.cc  ---------------------------
+
+
+// Test Manifold ID. Now we test the function set_all_manifold_ids(), and verify
+// that they are correctly inherited from one cell onward. All manifold ids
+// should end up being 1.
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+  deallog << "Testing dim=" << dim
+         << ", spacedim="<< spacedim << std::endl;
+  
+  Triangulation<dim,spacedim> tria;
+  GridGenerator::hyper_cube (tria);
+  Point<spacedim> center;
+  for(unsigned int i=0;i<dim;++i)
+    center[i] = .25;
+
+                                  // const HyperBallBoundary<dim,spacedim> boundary(center,center.norm());
+                                  // triangulation.set_boundary (0, boundary_description);
+
+  typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+  tria.begin_active()->set_all_manifold_ids(1);
+  tria.refine_global(ref);
+
+  for(cell = tria.begin_active(); cell != tria.end(); ++cell) {
+    deallog << "C: " << cell 
+           << ", mid: " << (int)cell->manifold_id() << std::endl;
+    for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+      deallog << "f: " << cell->face(f) 
+             << ", mid: " << (int)cell->face(f)->manifold_id() << std::endl;
+  }
+  
+}
+
+int main () 
+{
+  std::ofstream logfile("output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  
+  test<1,1>();
+  test<1,2>();
+  test<2,2>();
+  test<2,3>();
+  test<3,3>();
+
+  return 0;
+}
+                  
diff --git a/tests/manifold/manifold_id_02.output b/tests/manifold/manifold_id_02.output
new file mode 100644 (file)
index 0000000..6571550
--- /dev/null
@@ -0,0 +1,114 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 1.0, mid: 1
+DEAL::f: 0, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::f: 1, mid: 1
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 1.0, mid: 1
+DEAL::f: 0, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::f: 1, mid: 1
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 1.0, mid: 1
+DEAL::f: 6, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 4, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 8, mid: 1
+DEAL::f: 5, mid: 1
+DEAL::f: 15, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 7, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::f: 10, mid: 1
+DEAL::C: 1.3, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 9, mid: 1
+DEAL::f: 15, mid: 1
+DEAL::f: 11, mid: 1
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 1.0, mid: 1
+DEAL::f: 6, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 4, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 8, mid: 1
+DEAL::f: 5, mid: 1
+DEAL::f: 15, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 7, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::f: 10, mid: 1
+DEAL::C: 1.3, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 9, mid: 1
+DEAL::f: 15, mid: 1
+DEAL::f: 11, mid: 1
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 1.0, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::f: 41, mid: 1
+DEAL::f: 6, mid: 1
+DEAL::f: 37, mid: 1
+DEAL::f: 10, mid: 1
+DEAL::f: 33, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 41, mid: 1
+DEAL::f: 18, mid: 1
+DEAL::f: 8, mid: 1
+DEAL::f: 35, mid: 1
+DEAL::f: 11, mid: 1
+DEAL::f: 32, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 15, mid: 1
+DEAL::f: 40, mid: 1
+DEAL::f: 37, mid: 1
+DEAL::f: 22, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 31, mid: 1
+DEAL::C: 1.3, mid: 1
+DEAL::f: 40, mid: 1
+DEAL::f: 19, mid: 1
+DEAL::f: 35, mid: 1
+DEAL::f: 24, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 30, mid: 1
+DEAL::C: 1.4, mid: 1
+DEAL::f: 16, mid: 1
+DEAL::f: 39, mid: 1
+DEAL::f: 7, mid: 1
+DEAL::f: 36, mid: 1
+DEAL::f: 33, mid: 1
+DEAL::f: 26, mid: 1
+DEAL::C: 1.5, mid: 1
+DEAL::f: 39, mid: 1
+DEAL::f: 20, mid: 1
+DEAL::f: 9, mid: 1
+DEAL::f: 34, mid: 1
+DEAL::f: 32, mid: 1
+DEAL::f: 27, mid: 1
+DEAL::C: 1.6, mid: 1
+DEAL::f: 17, mid: 1
+DEAL::f: 38, mid: 1
+DEAL::f: 36, mid: 1
+DEAL::f: 23, mid: 1
+DEAL::f: 31, mid: 1
+DEAL::f: 28, mid: 1
+DEAL::C: 1.7, mid: 1
+DEAL::f: 38, mid: 1
+DEAL::f: 21, mid: 1
+DEAL::f: 34, mid: 1
+DEAL::f: 25, mid: 1
+DEAL::f: 30, mid: 1
+DEAL::f: 29, mid: 1
diff --git a/tests/manifold/manifold_id_03.cc b/tests/manifold/manifold_id_03.cc
new file mode 100644 (file)
index 0000000..e5109da
--- /dev/null
@@ -0,0 +1,73 @@
+//----------------------------  manifold_id_03.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_03.cc  ---------------------------
+
+
+// Test Manifold ID. Now we test the function set_manifold_id(), and verify
+// that they are correctly inherited from one cell onward. Notice that only the interior
+// of the cell is given a manifold id.
+// This is inherited by all objects created inside that cells, including all the newly created
+// inner faces.
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+       deallog << "Testing dim=" << dim
+       << ", spacedim="<< spacedim << std::endl;
+
+       Triangulation<dim,spacedim> tria;
+       GridGenerator::hyper_cube (tria);
+       Point<spacedim> center;
+       
+       typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+       
+       tria.begin_active()->set_manifold_id(1);
+       
+       tria.refine_global(1);
+       
+       for(cell = tria.begin_active(); cell != tria.end(); ++cell) {
+               deallog << "C: " << cell 
+           << ", mid: " << (int)cell->manifold_id() << std::endl;
+               for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+                       deallog << "f: " << cell->face(f) 
+                       << ", mid: " << (int)cell->face(f)->manifold_id() << std::endl;
+       }
+       
+}
+
+int main () 
+{
+       std::ofstream logfile("output");
+       deallog.attach(logfile);
+       deallog.depth_console(0);
+       deallog.threshold_double(1.e-10);
+       
+       test<1,1>();
+       test<1,2>();
+       test<2,2>();
+       test<2,3>();
+       test<3,3>();
+       
+       return 0;
+}
+
diff --git a/tests/manifold/manifold_id_03.output b/tests/manifold/manifold_id_03.output
new file mode 100644 (file)
index 0000000..c2d883e
--- /dev/null
@@ -0,0 +1,114 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 1.0, mid: 1
+DEAL::f: 0, mid: 255
+DEAL::f: 2, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::f: 1, mid: 255
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 1.0, mid: 1
+DEAL::f: 0, mid: 255
+DEAL::f: 2, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 2, mid: 1
+DEAL::f: 1, mid: 255
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 1.0, mid: 1
+DEAL::f: 6, mid: 255
+DEAL::f: 12, mid: 1
+DEAL::f: 4, mid: 255
+DEAL::f: 14, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 8, mid: 255
+DEAL::f: 5, mid: 255
+DEAL::f: 15, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 7, mid: 255
+DEAL::f: 13, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::f: 10, mid: 255
+DEAL::C: 1.3, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 9, mid: 255
+DEAL::f: 15, mid: 1
+DEAL::f: 11, mid: 255
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 1.0, mid: 1
+DEAL::f: 6, mid: 255
+DEAL::f: 12, mid: 1
+DEAL::f: 4, mid: 255
+DEAL::f: 14, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 12, mid: 1
+DEAL::f: 8, mid: 255
+DEAL::f: 5, mid: 255
+DEAL::f: 15, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 7, mid: 255
+DEAL::f: 13, mid: 1
+DEAL::f: 14, mid: 1
+DEAL::f: 10, mid: 255
+DEAL::C: 1.3, mid: 1
+DEAL::f: 13, mid: 1
+DEAL::f: 9, mid: 255
+DEAL::f: 15, mid: 1
+DEAL::f: 11, mid: 255
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 1.0, mid: 1
+DEAL::f: 14, mid: 255
+DEAL::f: 41, mid: 1
+DEAL::f: 6, mid: 255
+DEAL::f: 37, mid: 1
+DEAL::f: 10, mid: 255
+DEAL::f: 33, mid: 1
+DEAL::C: 1.1, mid: 1
+DEAL::f: 41, mid: 1
+DEAL::f: 18, mid: 255
+DEAL::f: 8, mid: 255
+DEAL::f: 35, mid: 1
+DEAL::f: 11, mid: 255
+DEAL::f: 32, mid: 1
+DEAL::C: 1.2, mid: 1
+DEAL::f: 15, mid: 255
+DEAL::f: 40, mid: 1
+DEAL::f: 37, mid: 1
+DEAL::f: 22, mid: 255
+DEAL::f: 12, mid: 255
+DEAL::f: 31, mid: 1
+DEAL::C: 1.3, mid: 1
+DEAL::f: 40, mid: 1
+DEAL::f: 19, mid: 255
+DEAL::f: 35, mid: 1
+DEAL::f: 24, mid: 255
+DEAL::f: 13, mid: 255
+DEAL::f: 30, mid: 1
+DEAL::C: 1.4, mid: 1
+DEAL::f: 16, mid: 255
+DEAL::f: 39, mid: 1
+DEAL::f: 7, mid: 255
+DEAL::f: 36, mid: 1
+DEAL::f: 33, mid: 1
+DEAL::f: 26, mid: 255
+DEAL::C: 1.5, mid: 1
+DEAL::f: 39, mid: 1
+DEAL::f: 20, mid: 255
+DEAL::f: 9, mid: 255
+DEAL::f: 34, mid: 1
+DEAL::f: 32, mid: 1
+DEAL::f: 27, mid: 255
+DEAL::C: 1.6, mid: 1
+DEAL::f: 17, mid: 255
+DEAL::f: 38, mid: 1
+DEAL::f: 36, mid: 1
+DEAL::f: 23, mid: 255
+DEAL::f: 31, mid: 1
+DEAL::f: 28, mid: 255
+DEAL::C: 1.7, mid: 1
+DEAL::f: 38, mid: 1
+DEAL::f: 21, mid: 255
+DEAL::f: 34, mid: 1
+DEAL::f: 25, mid: 255
+DEAL::f: 30, mid: 1
+DEAL::f: 29, mid: 255
diff --git a/tests/manifold/manifold_id_04.cc b/tests/manifold/manifold_id_04.cc
new file mode 100644 (file)
index 0000000..57583a3
--- /dev/null
@@ -0,0 +1,72 @@
+//----------------------------  manifold_id_03.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_03.cc  ---------------------------
+
+
+// Test Manifold ID. Now we set differently the id of the first cell and its faces, and verify
+// that the ids are correctly inherited from one cell onward.
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria_boundary_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+       deallog << "Testing dim=" << dim
+       << ", spacedim="<< spacedim << std::endl;
+
+       Triangulation<dim,spacedim> tria;
+       GridGenerator::hyper_cube (tria);
+       Point<spacedim> center;
+       
+       typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+       
+       tria.begin_active()->set_manifold_id(3);
+       for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+               tria.begin_active()->face(f)->set_manifold_id(2);
+
+       tria.refine_global(1);
+       
+       for(cell = tria.begin_active(); cell != tria.end(); ++cell) {
+               deallog << "C: " << cell 
+           << ", mid: " << (int)cell->manifold_id() << std::endl;
+               for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+                       deallog << "f: " << cell->face(f) 
+                       << ", mid: " << (int)cell->face(f)->manifold_id() << std::endl;
+       }
+       
+}
+
+int main () 
+{
+       std::ofstream logfile("output");
+       deallog.attach(logfile);
+       deallog.depth_console(1);
+       deallog.threshold_double(1.e-10);
+       
+       test<1,1>();
+       test<1,2>();
+       test<2,2>();
+       test<2,3>();
+       test<3,3>();
+       
+       return 0;
+}
+
diff --git a/tests/manifold/manifold_id_04.output b/tests/manifold/manifold_id_04.output
new file mode 100644 (file)
index 0000000..5429010
--- /dev/null
@@ -0,0 +1,114 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 1.0, mid: 3
+DEAL::f: 0, mid: 2
+DEAL::f: 2, mid: 3
+DEAL::C: 1.1, mid: 3
+DEAL::f: 2, mid: 3
+DEAL::f: 1, mid: 2
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 1.0, mid: 3
+DEAL::f: 0, mid: 2
+DEAL::f: 2, mid: 3
+DEAL::C: 1.1, mid: 3
+DEAL::f: 2, mid: 3
+DEAL::f: 1, mid: 2
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 1.0, mid: 3
+DEAL::f: 6, mid: 2
+DEAL::f: 12, mid: 3
+DEAL::f: 4, mid: 2
+DEAL::f: 14, mid: 3
+DEAL::C: 1.1, mid: 3
+DEAL::f: 12, mid: 3
+DEAL::f: 8, mid: 2
+DEAL::f: 5, mid: 2
+DEAL::f: 15, mid: 3
+DEAL::C: 1.2, mid: 3
+DEAL::f: 7, mid: 2
+DEAL::f: 13, mid: 3
+DEAL::f: 14, mid: 3
+DEAL::f: 10, mid: 2
+DEAL::C: 1.3, mid: 3
+DEAL::f: 13, mid: 3
+DEAL::f: 9, mid: 2
+DEAL::f: 15, mid: 3
+DEAL::f: 11, mid: 2
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 1.0, mid: 3
+DEAL::f: 6, mid: 2
+DEAL::f: 12, mid: 3
+DEAL::f: 4, mid: 2
+DEAL::f: 14, mid: 3
+DEAL::C: 1.1, mid: 3
+DEAL::f: 12, mid: 3
+DEAL::f: 8, mid: 2
+DEAL::f: 5, mid: 2
+DEAL::f: 15, mid: 3
+DEAL::C: 1.2, mid: 3
+DEAL::f: 7, mid: 2
+DEAL::f: 13, mid: 3
+DEAL::f: 14, mid: 3
+DEAL::f: 10, mid: 2
+DEAL::C: 1.3, mid: 3
+DEAL::f: 13, mid: 3
+DEAL::f: 9, mid: 2
+DEAL::f: 15, mid: 3
+DEAL::f: 11, mid: 2
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 1.0, mid: 3
+DEAL::f: 14, mid: 2
+DEAL::f: 41, mid: 3
+DEAL::f: 6, mid: 2
+DEAL::f: 37, mid: 3
+DEAL::f: 10, mid: 2
+DEAL::f: 33, mid: 3
+DEAL::C: 1.1, mid: 3
+DEAL::f: 41, mid: 3
+DEAL::f: 18, mid: 2
+DEAL::f: 8, mid: 2
+DEAL::f: 35, mid: 3
+DEAL::f: 11, mid: 2
+DEAL::f: 32, mid: 3
+DEAL::C: 1.2, mid: 3
+DEAL::f: 15, mid: 2
+DEAL::f: 40, mid: 3
+DEAL::f: 37, mid: 3
+DEAL::f: 22, mid: 2
+DEAL::f: 12, mid: 2
+DEAL::f: 31, mid: 3
+DEAL::C: 1.3, mid: 3
+DEAL::f: 40, mid: 3
+DEAL::f: 19, mid: 2
+DEAL::f: 35, mid: 3
+DEAL::f: 24, mid: 2
+DEAL::f: 13, mid: 2
+DEAL::f: 30, mid: 3
+DEAL::C: 1.4, mid: 3
+DEAL::f: 16, mid: 2
+DEAL::f: 39, mid: 3
+DEAL::f: 7, mid: 2
+DEAL::f: 36, mid: 3
+DEAL::f: 33, mid: 3
+DEAL::f: 26, mid: 2
+DEAL::C: 1.5, mid: 3
+DEAL::f: 39, mid: 3
+DEAL::f: 20, mid: 2
+DEAL::f: 9, mid: 2
+DEAL::f: 34, mid: 3
+DEAL::f: 32, mid: 3
+DEAL::f: 27, mid: 2
+DEAL::C: 1.6, mid: 3
+DEAL::f: 17, mid: 2
+DEAL::f: 38, mid: 3
+DEAL::f: 36, mid: 3
+DEAL::f: 23, mid: 2
+DEAL::f: 31, mid: 3
+DEAL::f: 28, mid: 2
+DEAL::C: 1.7, mid: 3
+DEAL::f: 38, mid: 3
+DEAL::f: 21, mid: 2
+DEAL::f: 34, mid: 3
+DEAL::f: 25, mid: 2
+DEAL::f: 30, mid: 3
+DEAL::f: 29, mid: 2
diff --git a/tests/manifold/manifold_id_05.cc b/tests/manifold/manifold_id_05.cc
new file mode 100644 (file)
index 0000000..3d94f71
--- /dev/null
@@ -0,0 +1,81 @@
+//----------------------------  manifold_id_05.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_05.cc  ---------------------------
+
+
+// Set a manifold id on one of the boundary face, and attach the
+// boundary description to it. Refine globally twice and output the mesh.
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/manifold_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+       deallog << "Testing dim=" << dim
+       << ", spacedim="<< spacedim << std::endl;
+
+       Point<spacedim> center;
+       for(unsigned int i=0; i<dim; ++i)
+         center[i] = .5;
+
+       PolarManifold<spacedim> boundary(center);
+       Triangulation<dim,spacedim> tria;
+       GridGenerator::hyper_cube (tria);
+       typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+       tria.begin_active()->face(0)->set_manifold_id(1);
+       tria.set_manifold(1,boundary);
+       
+       tria.refine_global(2);
+
+       for(cell=tria.begin_active(); cell!=tria.end(); ++cell)
+         {
+           deallog << "C: " << cell << std::endl;
+           for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell;++f)
+             deallog << "F: " << cell->face(f) << ", mid: " 
+                     << (int) cell->face(f)->manifold_id() << std::endl;
+         }
+       
+
+       GridOut gridout;
+       gridout.write_msh(tria, deallog.get_file_stream());
+       char fname[30];
+       sprintf(fname, "/tmp/id_5_mesh_%d_%d.msh",
+               dim, spacedim);
+       std::ofstream ofile(fname);
+       gridout.write_msh(tria,ofile);
+}
+
+int main () 
+{
+       std::ofstream logfile("output");
+       deallog.attach(logfile);
+       deallog.depth_console(0);
+       deallog.threshold_double(1.e-10);
+       
+       test<1,1>();
+       test<1,2>();
+       test<2,2>();
+       test<2,3>();
+       test<3,3>();
+       
+       return 0;
+}
+
diff --git a/tests/manifold/manifold_id_05.output b/tests/manifold/manifold_id_05.output
new file mode 100644 (file)
index 0000000..549537d
--- /dev/null
@@ -0,0 +1,957 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 2.0
+DEAL::F: 0, mid: 1
+DEAL::F: 3, mid: 255
+DEAL::C: 2.1
+DEAL::F: 3, mid: 255
+DEAL::F: 2, mid: 255
+DEAL::C: 2.2
+DEAL::F: 2, mid: 255
+DEAL::F: 4, mid: 255
+DEAL::C: 2.3
+DEAL::F: 4, mid: 255
+DEAL::F: 1, mid: 255
+$NOD
+5
+1  0.00000 0 0
+2  1.00000 0 0
+3  0.500000 0 0
+4  0.250000 0 0
+5  0.750000 0 0
+$ENDNOD
+$ELM
+4
+1 1 0 0 2 1 4 
+2 1 0 0 2 4 3 
+3 1 0 0 2 3 5 
+4 1 0 0 2 5 2 
+$ENDELM
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 2.0
+DEAL::F: 0, mid: 1
+DEAL::F: 3, mid: 255
+DEAL::C: 2.1
+DEAL::F: 3, mid: 255
+DEAL::F: 2, mid: 255
+DEAL::C: 2.2
+DEAL::F: 2, mid: 255
+DEAL::F: 4, mid: 255
+DEAL::C: 2.3
+DEAL::F: 4, mid: 255
+DEAL::F: 1, mid: 255
+$NOD
+5
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.500000 0.00000 0
+4  0.250000 0.00000 0
+5  0.750000 0.00000 0
+$ENDNOD
+$ELM
+4
+1 1 0 0 2 1 4 
+2 1 0 0 2 4 3 
+3 1 0 0 2 3 5 
+4 1 0 0 2 5 2 
+$ENDELM
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 2.0
+DEAL::F: 20, mid: 1
+DEAL::F: 40, mid: 255
+DEAL::F: 16, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::C: 2.1
+DEAL::F: 40, mid: 255
+DEAL::F: 32, mid: 255
+DEAL::F: 17, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::C: 2.2
+DEAL::F: 21, mid: 1
+DEAL::F: 41, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::C: 2.3
+DEAL::F: 41, mid: 255
+DEAL::F: 33, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::C: 2.4
+DEAL::F: 32, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 18, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::C: 2.5
+DEAL::F: 44, mid: 255
+DEAL::F: 24, mid: 255
+DEAL::F: 19, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::C: 2.6
+DEAL::F: 33, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::C: 2.7
+DEAL::F: 45, mid: 255
+DEAL::F: 25, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::C: 2.8
+DEAL::F: 22, mid: 1
+DEAL::F: 48, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::C: 2.9
+DEAL::F: 48, mid: 255
+DEAL::F: 34, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::C: 2.10
+DEAL::F: 23, mid: 1
+DEAL::F: 49, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 28, mid: 255
+DEAL::C: 2.11
+DEAL::F: 49, mid: 255
+DEAL::F: 35, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 29, mid: 255
+DEAL::C: 2.12
+DEAL::F: 34, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::C: 2.13
+DEAL::F: 52, mid: 255
+DEAL::F: 26, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::C: 2.14
+DEAL::F: 35, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 30, mid: 255
+DEAL::C: 2.15
+DEAL::F: 53, mid: 255
+DEAL::F: 27, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 31, mid: 255
+$NOD
+25
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.00000 1.00000 0
+4  1.00000 1.00000 0
+5  0.500000 0.00000 0
+6  -0.207107 0.500000 0
+7  1.00000 0.500000 0
+8  0.500000 1.00000 0
+9  0.474112 0.500000 0
+10  0.250000 0.00000 0
+11  0.750000 0.00000 0
+12  -0.153281 0.229402 0
+13  -0.153281 0.770598 0
+14  1.00000 0.250000 0
+15  1.00000 0.750000 0
+16  0.250000 1.00000 0
+17  0.750000 1.00000 0
+18  0.487056 0.250000 0
+19  0.487056 0.750000 0
+20  0.133502 0.500000 0
+21  0.737056 0.500000 0
+22  0.185535 0.247425 0
+23  0.743528 0.250000 0
+24  0.185535 0.752575 0
+25  0.743528 0.750000 0
+$ENDNOD
+$ELM
+16
+1 3 0 0 4 1 10 22 12 
+2 3 0 0 4 10 5 18 22 
+3 3 0 0 4 12 22 20 6 
+4 3 0 0 4 22 18 9 20 
+5 3 0 0 4 5 11 23 18 
+6 3 0 0 4 11 2 14 23 
+7 3 0 0 4 18 23 21 9 
+8 3 0 0 4 23 14 7 21 
+9 3 0 0 4 6 20 24 13 
+10 3 0 0 4 20 9 19 24 
+11 3 0 0 4 13 24 16 3 
+12 3 0 0 4 24 19 8 16 
+13 3 0 0 4 9 21 25 19 
+14 3 0 0 4 21 7 15 25 
+15 3 0 0 4 19 25 17 8 
+16 3 0 0 4 25 15 4 17 
+$ENDELM
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 2.0
+DEAL::F: 20, mid: 1
+DEAL::F: 40, mid: 255
+DEAL::F: 16, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::C: 2.1
+DEAL::F: 40, mid: 255
+DEAL::F: 32, mid: 255
+DEAL::F: 17, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::C: 2.2
+DEAL::F: 21, mid: 1
+DEAL::F: 41, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::C: 2.3
+DEAL::F: 41, mid: 255
+DEAL::F: 33, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::C: 2.4
+DEAL::F: 32, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 18, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::C: 2.5
+DEAL::F: 44, mid: 255
+DEAL::F: 24, mid: 255
+DEAL::F: 19, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::C: 2.6
+DEAL::F: 33, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::C: 2.7
+DEAL::F: 45, mid: 255
+DEAL::F: 25, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::C: 2.8
+DEAL::F: 22, mid: 1
+DEAL::F: 48, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::C: 2.9
+DEAL::F: 48, mid: 255
+DEAL::F: 34, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::C: 2.10
+DEAL::F: 23, mid: 1
+DEAL::F: 49, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 28, mid: 255
+DEAL::C: 2.11
+DEAL::F: 49, mid: 255
+DEAL::F: 35, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 29, mid: 255
+DEAL::C: 2.12
+DEAL::F: 34, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::C: 2.13
+DEAL::F: 52, mid: 255
+DEAL::F: 26, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::C: 2.14
+DEAL::F: 35, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 30, mid: 255
+DEAL::C: 2.15
+DEAL::F: 53, mid: 255
+DEAL::F: 27, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 31, mid: 255
+$NOD
+25
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.500000 0.00000 0.00000
+6  -0.207107 0.500000 0.00000
+7  1.00000 0.500000 0.00000
+8  0.500000 1.00000 0.00000
+9  0.474112 0.500000 0.00000
+10  0.250000 0.00000 0.00000
+11  0.750000 0.00000 0.00000
+12  -0.153281 0.229402 0.00000
+13  -0.153281 0.770598 0.00000
+14  1.00000 0.250000 0.00000
+15  1.00000 0.750000 0.00000
+16  0.250000 1.00000 0.00000
+17  0.750000 1.00000 0.00000
+18  0.487056 0.250000 0.00000
+19  0.487056 0.750000 0.00000
+20  0.133502 0.500000 0.00000
+21  0.737056 0.500000 0.00000
+22  0.185535 0.247425 0.00000
+23  0.743528 0.250000 0.00000
+24  0.185535 0.752575 0.00000
+25  0.743528 0.750000 0.00000
+$ENDNOD
+$ELM
+16
+1 3 0 0 4 1 10 22 12 
+2 3 0 0 4 10 5 18 22 
+3 3 0 0 4 12 22 20 6 
+4 3 0 0 4 22 18 9 20 
+5 3 0 0 4 5 11 23 18 
+6 3 0 0 4 11 2 14 23 
+7 3 0 0 4 18 23 21 9 
+8 3 0 0 4 23 14 7 21 
+9 3 0 0 4 6 20 24 13 
+10 3 0 0 4 20 9 19 24 
+11 3 0 0 4 13 24 16 3 
+12 3 0 0 4 24 19 8 16 
+13 3 0 0 4 9 21 25 19 
+14 3 0 0 4 21 7 15 25 
+15 3 0 0 4 19 25 17 8 
+16 3 0 0 4 25 15 4 17 
+$ENDELM
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 2.0
+DEAL::F: 74, mid: 1
+DEAL::F: 281, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 277, mid: 255
+DEAL::F: 58, mid: 255
+DEAL::F: 273, mid: 255
+DEAL::C: 2.1
+DEAL::F: 281, mid: 255
+DEAL::F: 182, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 275, mid: 255
+DEAL::F: 59, mid: 255
+DEAL::F: 272, mid: 255
+DEAL::C: 2.2
+DEAL::F: 75, mid: 1
+DEAL::F: 280, mid: 255
+DEAL::F: 277, mid: 255
+DEAL::F: 166, mid: 255
+DEAL::F: 60, mid: 255
+DEAL::F: 271, mid: 255
+DEAL::C: 2.3
+DEAL::F: 280, mid: 255
+DEAL::F: 183, mid: 255
+DEAL::F: 275, mid: 255
+DEAL::F: 168, mid: 255
+DEAL::F: 61, mid: 255
+DEAL::F: 270, mid: 255
+DEAL::C: 2.4
+DEAL::F: 76, mid: 1
+DEAL::F: 279, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 276, mid: 255
+DEAL::F: 273, mid: 255
+DEAL::F: 150, mid: 255
+DEAL::C: 2.5
+DEAL::F: 279, mid: 255
+DEAL::F: 184, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 274, mid: 255
+DEAL::F: 272, mid: 255
+DEAL::F: 151, mid: 255
+DEAL::C: 2.6
+DEAL::F: 77, mid: 1
+DEAL::F: 278, mid: 255
+DEAL::F: 276, mid: 255
+DEAL::F: 167, mid: 255
+DEAL::F: 271, mid: 255
+DEAL::F: 152, mid: 255
+DEAL::C: 2.7
+DEAL::F: 278, mid: 255
+DEAL::F: 185, mid: 255
+DEAL::F: 274, mid: 255
+DEAL::F: 169, mid: 255
+DEAL::F: 270, mid: 255
+DEAL::F: 153, mid: 255
+DEAL::C: 2.8
+DEAL::F: 182, mid: 255
+DEAL::F: 269, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 265, mid: 255
+DEAL::F: 62, mid: 255
+DEAL::F: 261, mid: 255
+DEAL::C: 2.9
+DEAL::F: 269, mid: 255
+DEAL::F: 90, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 263, mid: 255
+DEAL::F: 63, mid: 255
+DEAL::F: 260, mid: 255
+DEAL::C: 2.10
+DEAL::F: 183, mid: 255
+DEAL::F: 268, mid: 255
+DEAL::F: 265, mid: 255
+DEAL::F: 158, mid: 255
+DEAL::F: 64, mid: 255
+DEAL::F: 259, mid: 255
+DEAL::C: 2.11
+DEAL::F: 268, mid: 255
+DEAL::F: 91, mid: 255
+DEAL::F: 263, mid: 255
+DEAL::F: 160, mid: 255
+DEAL::F: 65, mid: 255
+DEAL::F: 258, mid: 255
+DEAL::C: 2.12
+DEAL::F: 184, mid: 255
+DEAL::F: 267, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 264, mid: 255
+DEAL::F: 261, mid: 255
+DEAL::F: 146, mid: 255
+DEAL::C: 2.13
+DEAL::F: 267, mid: 255
+DEAL::F: 92, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 262, mid: 255
+DEAL::F: 260, mid: 255
+DEAL::F: 147, mid: 255
+DEAL::C: 2.14
+DEAL::F: 185, mid: 255
+DEAL::F: 266, mid: 255
+DEAL::F: 264, mid: 255
+DEAL::F: 159, mid: 255
+DEAL::F: 259, mid: 255
+DEAL::F: 148, mid: 255
+DEAL::C: 2.15
+DEAL::F: 266, mid: 255
+DEAL::F: 93, mid: 255
+DEAL::F: 262, mid: 255
+DEAL::F: 161, mid: 255
+DEAL::F: 258, mid: 255
+DEAL::F: 149, mid: 255
+DEAL::C: 2.16
+DEAL::F: 78, mid: 1
+DEAL::F: 257, mid: 255
+DEAL::F: 166, mid: 255
+DEAL::F: 253, mid: 255
+DEAL::F: 66, mid: 255
+DEAL::F: 249, mid: 255
+DEAL::C: 2.17
+DEAL::F: 257, mid: 255
+DEAL::F: 178, mid: 255
+DEAL::F: 168, mid: 255
+DEAL::F: 251, mid: 255
+DEAL::F: 67, mid: 255
+DEAL::F: 248, mid: 255
+DEAL::C: 2.18
+DEAL::F: 79, mid: 1
+DEAL::F: 256, mid: 255
+DEAL::F: 253, mid: 255
+DEAL::F: 106, mid: 255
+DEAL::F: 68, mid: 255
+DEAL::F: 247, mid: 255
+DEAL::C: 2.19
+DEAL::F: 256, mid: 255
+DEAL::F: 179, mid: 255
+DEAL::F: 251, mid: 255
+DEAL::F: 108, mid: 255
+DEAL::F: 69, mid: 255
+DEAL::F: 246, mid: 255
+DEAL::C: 2.20
+DEAL::F: 80, mid: 1
+DEAL::F: 255, mid: 255
+DEAL::F: 167, mid: 255
+DEAL::F: 252, mid: 255
+DEAL::F: 249, mid: 255
+DEAL::F: 142, mid: 255
+DEAL::C: 2.21
+DEAL::F: 255, mid: 255
+DEAL::F: 180, mid: 255
+DEAL::F: 169, mid: 255
+DEAL::F: 250, mid: 255
+DEAL::F: 248, mid: 255
+DEAL::F: 143, mid: 255
+DEAL::C: 2.22
+DEAL::F: 81, mid: 1
+DEAL::F: 254, mid: 255
+DEAL::F: 252, mid: 255
+DEAL::F: 107, mid: 255
+DEAL::F: 247, mid: 255
+DEAL::F: 144, mid: 255
+DEAL::C: 2.23
+DEAL::F: 254, mid: 255
+DEAL::F: 181, mid: 255
+DEAL::F: 250, mid: 255
+DEAL::F: 109, mid: 255
+DEAL::F: 246, mid: 255
+DEAL::F: 145, mid: 255
+DEAL::C: 2.24
+DEAL::F: 178, mid: 255
+DEAL::F: 245, mid: 255
+DEAL::F: 158, mid: 255
+DEAL::F: 241, mid: 255
+DEAL::F: 70, mid: 255
+DEAL::F: 237, mid: 255
+DEAL::C: 2.25
+DEAL::F: 245, mid: 255
+DEAL::F: 94, mid: 255
+DEAL::F: 160, mid: 255
+DEAL::F: 239, mid: 255
+DEAL::F: 71, mid: 255
+DEAL::F: 236, mid: 255
+DEAL::C: 2.26
+DEAL::F: 179, mid: 255
+DEAL::F: 244, mid: 255
+DEAL::F: 241, mid: 255
+DEAL::F: 114, mid: 255
+DEAL::F: 72, mid: 255
+DEAL::F: 235, mid: 255
+DEAL::C: 2.27
+DEAL::F: 244, mid: 255
+DEAL::F: 95, mid: 255
+DEAL::F: 239, mid: 255
+DEAL::F: 116, mid: 255
+DEAL::F: 73, mid: 255
+DEAL::F: 234, mid: 255
+DEAL::C: 2.28
+DEAL::F: 180, mid: 255
+DEAL::F: 243, mid: 255
+DEAL::F: 159, mid: 255
+DEAL::F: 240, mid: 255
+DEAL::F: 237, mid: 255
+DEAL::F: 138, mid: 255
+DEAL::C: 2.29
+DEAL::F: 243, mid: 255
+DEAL::F: 96, mid: 255
+DEAL::F: 161, mid: 255
+DEAL::F: 238, mid: 255
+DEAL::F: 236, mid: 255
+DEAL::F: 139, mid: 255
+DEAL::C: 2.30
+DEAL::F: 181, mid: 255
+DEAL::F: 242, mid: 255
+DEAL::F: 240, mid: 255
+DEAL::F: 115, mid: 255
+DEAL::F: 235, mid: 255
+DEAL::F: 140, mid: 255
+DEAL::C: 2.31
+DEAL::F: 242, mid: 255
+DEAL::F: 97, mid: 255
+DEAL::F: 238, mid: 255
+DEAL::F: 117, mid: 255
+DEAL::F: 234, mid: 255
+DEAL::F: 141, mid: 255
+DEAL::C: 2.32
+DEAL::F: 82, mid: 1
+DEAL::F: 233, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 229, mid: 255
+DEAL::F: 150, mid: 255
+DEAL::F: 225, mid: 255
+DEAL::C: 2.33
+DEAL::F: 233, mid: 255
+DEAL::F: 174, mid: 255
+DEAL::F: 48, mid: 255
+DEAL::F: 227, mid: 255
+DEAL::F: 151, mid: 255
+DEAL::F: 224, mid: 255
+DEAL::C: 2.34
+DEAL::F: 83, mid: 1
+DEAL::F: 232, mid: 255
+DEAL::F: 229, mid: 255
+DEAL::F: 162, mid: 255
+DEAL::F: 152, mid: 255
+DEAL::F: 223, mid: 255
+DEAL::C: 2.35
+DEAL::F: 232, mid: 255
+DEAL::F: 175, mid: 255
+DEAL::F: 227, mid: 255
+DEAL::F: 164, mid: 255
+DEAL::F: 153, mid: 255
+DEAL::F: 222, mid: 255
+DEAL::C: 2.36
+DEAL::F: 84, mid: 1
+DEAL::F: 231, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 228, mid: 255
+DEAL::F: 225, mid: 255
+DEAL::F: 122, mid: 255
+DEAL::C: 2.37
+DEAL::F: 231, mid: 255
+DEAL::F: 176, mid: 255
+DEAL::F: 49, mid: 255
+DEAL::F: 226, mid: 255
+DEAL::F: 224, mid: 255
+DEAL::F: 123, mid: 255
+DEAL::C: 2.38
+DEAL::F: 85, mid: 1
+DEAL::F: 230, mid: 255
+DEAL::F: 228, mid: 255
+DEAL::F: 163, mid: 255
+DEAL::F: 223, mid: 255
+DEAL::F: 124, mid: 255
+DEAL::C: 2.39
+DEAL::F: 230, mid: 255
+DEAL::F: 177, mid: 255
+DEAL::F: 226, mid: 255
+DEAL::F: 165, mid: 255
+DEAL::F: 222, mid: 255
+DEAL::F: 125, mid: 255
+DEAL::C: 2.40
+DEAL::F: 174, mid: 255
+DEAL::F: 221, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 217, mid: 255
+DEAL::F: 146, mid: 255
+DEAL::F: 213, mid: 255
+DEAL::C: 2.41
+DEAL::F: 221, mid: 255
+DEAL::F: 98, mid: 255
+DEAL::F: 56, mid: 255
+DEAL::F: 215, mid: 255
+DEAL::F: 147, mid: 255
+DEAL::F: 212, mid: 255
+DEAL::C: 2.42
+DEAL::F: 175, mid: 255
+DEAL::F: 220, mid: 255
+DEAL::F: 217, mid: 255
+DEAL::F: 154, mid: 255
+DEAL::F: 148, mid: 255
+DEAL::F: 211, mid: 255
+DEAL::C: 2.43
+DEAL::F: 220, mid: 255
+DEAL::F: 99, mid: 255
+DEAL::F: 215, mid: 255
+DEAL::F: 156, mid: 255
+DEAL::F: 149, mid: 255
+DEAL::F: 210, mid: 255
+DEAL::C: 2.44
+DEAL::F: 176, mid: 255
+DEAL::F: 219, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 216, mid: 255
+DEAL::F: 213, mid: 255
+DEAL::F: 126, mid: 255
+DEAL::C: 2.45
+DEAL::F: 219, mid: 255
+DEAL::F: 100, mid: 255
+DEAL::F: 57, mid: 255
+DEAL::F: 214, mid: 255
+DEAL::F: 212, mid: 255
+DEAL::F: 127, mid: 255
+DEAL::C: 2.46
+DEAL::F: 177, mid: 255
+DEAL::F: 218, mid: 255
+DEAL::F: 216, mid: 255
+DEAL::F: 155, mid: 255
+DEAL::F: 211, mid: 255
+DEAL::F: 128, mid: 255
+DEAL::C: 2.47
+DEAL::F: 218, mid: 255
+DEAL::F: 101, mid: 255
+DEAL::F: 214, mid: 255
+DEAL::F: 157, mid: 255
+DEAL::F: 210, mid: 255
+DEAL::F: 129, mid: 255
+DEAL::C: 2.48
+DEAL::F: 86, mid: 1
+DEAL::F: 209, mid: 255
+DEAL::F: 162, mid: 255
+DEAL::F: 205, mid: 255
+DEAL::F: 142, mid: 255
+DEAL::F: 201, mid: 255
+DEAL::C: 2.49
+DEAL::F: 209, mid: 255
+DEAL::F: 170, mid: 255
+DEAL::F: 164, mid: 255
+DEAL::F: 203, mid: 255
+DEAL::F: 143, mid: 255
+DEAL::F: 200, mid: 255
+DEAL::C: 2.50
+DEAL::F: 87, mid: 1
+DEAL::F: 208, mid: 255
+DEAL::F: 205, mid: 255
+DEAL::F: 110, mid: 255
+DEAL::F: 144, mid: 255
+DEAL::F: 199, mid: 255
+DEAL::C: 2.51
+DEAL::F: 208, mid: 255
+DEAL::F: 171, mid: 255
+DEAL::F: 203, mid: 255
+DEAL::F: 112, mid: 255
+DEAL::F: 145, mid: 255
+DEAL::F: 198, mid: 255
+DEAL::C: 2.52
+DEAL::F: 88, mid: 1
+DEAL::F: 207, mid: 255
+DEAL::F: 163, mid: 255
+DEAL::F: 204, mid: 255
+DEAL::F: 201, mid: 255
+DEAL::F: 130, mid: 255
+DEAL::C: 2.53
+DEAL::F: 207, mid: 255
+DEAL::F: 172, mid: 255
+DEAL::F: 165, mid: 255
+DEAL::F: 202, mid: 255
+DEAL::F: 200, mid: 255
+DEAL::F: 131, mid: 255
+DEAL::C: 2.54
+DEAL::F: 89, mid: 1
+DEAL::F: 206, mid: 255
+DEAL::F: 204, mid: 255
+DEAL::F: 111, mid: 255
+DEAL::F: 199, mid: 255
+DEAL::F: 132, mid: 255
+DEAL::C: 2.55
+DEAL::F: 206, mid: 255
+DEAL::F: 173, mid: 255
+DEAL::F: 202, mid: 255
+DEAL::F: 113, mid: 255
+DEAL::F: 198, mid: 255
+DEAL::F: 133, mid: 255
+DEAL::C: 2.56
+DEAL::F: 170, mid: 255
+DEAL::F: 197, mid: 255
+DEAL::F: 154, mid: 255
+DEAL::F: 193, mid: 255
+DEAL::F: 138, mid: 255
+DEAL::F: 189, mid: 255
+DEAL::C: 2.57
+DEAL::F: 197, mid: 255
+DEAL::F: 102, mid: 255
+DEAL::F: 156, mid: 255
+DEAL::F: 191, mid: 255
+DEAL::F: 139, mid: 255
+DEAL::F: 188, mid: 255
+DEAL::C: 2.58
+DEAL::F: 171, mid: 255
+DEAL::F: 196, mid: 255
+DEAL::F: 193, mid: 255
+DEAL::F: 118, mid: 255
+DEAL::F: 140, mid: 255
+DEAL::F: 187, mid: 255
+DEAL::C: 2.59
+DEAL::F: 196, mid: 255
+DEAL::F: 103, mid: 255
+DEAL::F: 191, mid: 255
+DEAL::F: 120, mid: 255
+DEAL::F: 141, mid: 255
+DEAL::F: 186, mid: 255
+DEAL::C: 2.60
+DEAL::F: 172, mid: 255
+DEAL::F: 195, mid: 255
+DEAL::F: 155, mid: 255
+DEAL::F: 192, mid: 255
+DEAL::F: 189, mid: 255
+DEAL::F: 134, mid: 255
+DEAL::C: 2.61
+DEAL::F: 195, mid: 255
+DEAL::F: 104, mid: 255
+DEAL::F: 157, mid: 255
+DEAL::F: 190, mid: 255
+DEAL::F: 188, mid: 255
+DEAL::F: 135, mid: 255
+DEAL::C: 2.62
+DEAL::F: 173, mid: 255
+DEAL::F: 194, mid: 255
+DEAL::F: 192, mid: 255
+DEAL::F: 119, mid: 255
+DEAL::F: 187, mid: 255
+DEAL::F: 136, mid: 255
+DEAL::C: 2.63
+DEAL::F: 194, mid: 255
+DEAL::F: 105, mid: 255
+DEAL::F: 190, mid: 255
+DEAL::F: 121, mid: 255
+DEAL::F: 186, mid: 255
+DEAL::F: 137, mid: 255
+$NOD
+125
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.00000 0.00000 1.00000
+6  1.00000 0.00000 1.00000
+7  0.00000 1.00000 1.00000
+8  1.00000 1.00000 1.00000
+9  0.500000 0.00000 0.00000
+10  0.00000 0.500000 0.00000
+11  0.00000 0.00000 0.500000
+12  1.00000 0.500000 0.00000
+13  1.00000 0.00000 0.500000
+14  0.500000 1.00000 0.00000
+15  0.00000 1.00000 0.500000
+16  1.00000 1.00000 0.500000
+17  0.500000 0.00000 1.00000
+18  0.00000 0.500000 1.00000
+19  1.00000 0.500000 1.00000
+20  0.500000 1.00000 1.00000
+21  0.500000 0.00000 0.500000
+22  0.500000 0.500000 0.00000
+23  -0.366025 0.500000 0.500000
+24  1.00000 0.500000 0.500000
+25  0.500000 1.00000 0.500000
+26  0.500000 0.500000 1.00000
+27  0.469498 0.500000 0.500000
+28  0.250000 0.00000 0.00000
+29  0.750000 0.00000 0.00000
+30  0.00000 0.250000 0.00000
+31  0.00000 0.750000 0.00000
+32  0.00000 0.00000 0.250000
+33  0.00000 0.00000 0.750000
+34  1.00000 0.250000 0.00000
+35  1.00000 0.750000 0.00000
+36  1.00000 0.00000 0.250000
+37  1.00000 0.00000 0.750000
+38  0.250000 1.00000 0.00000
+39  0.750000 1.00000 0.00000
+40  0.00000 1.00000 0.250000
+41  0.00000 1.00000 0.750000
+42  1.00000 1.00000 0.250000
+43  1.00000 1.00000 0.750000
+44  0.250000 0.00000 1.00000
+45  0.750000 0.00000 1.00000
+46  0.00000 0.250000 1.00000
+47  0.00000 0.750000 1.00000
+48  1.00000 0.250000 1.00000
+49  1.00000 0.750000 1.00000
+50  0.250000 1.00000 1.00000
+51  0.750000 1.00000 1.00000
+52  0.250000 0.00000 0.500000
+53  0.750000 0.00000 0.500000
+54  0.500000 0.00000 0.250000
+55  0.500000 0.00000 0.750000
+56  0.500000 0.250000 0.00000
+57  0.500000 0.750000 0.00000
+58  0.250000 0.500000 0.00000
+59  0.750000 0.500000 0.00000
+60  -0.313259 0.500000 0.202326
+61  -0.313259 0.500000 0.797674
+62  -0.313259 0.202326 0.500000
+63  -0.313259 0.797674 0.500000
+64  1.00000 0.500000 0.250000
+65  1.00000 0.500000 0.750000
+66  1.00000 0.250000 0.500000
+67  1.00000 0.750000 0.500000
+68  0.250000 1.00000 0.500000
+69  0.750000 1.00000 0.500000
+70  0.500000 1.00000 0.250000
+71  0.500000 1.00000 0.750000
+72  0.500000 0.250000 1.00000
+73  0.500000 0.750000 1.00000
+74  0.250000 0.500000 1.00000
+75  0.750000 0.500000 1.00000
+76  0.484749 0.500000 0.750000
+77  0.484749 0.500000 0.250000
+78  0.734749 0.500000 0.500000
+79  0.0517362 0.500000 0.500000
+80  0.484749 0.750000 0.500000
+81  0.484749 0.250000 0.500000
+82  0.250000 0.00000 0.250000
+83  0.250000 0.00000 0.750000
+84  0.750000 0.00000 0.250000
+85  0.750000 0.00000 0.750000
+86  0.250000 0.250000 0.00000
+87  0.750000 0.250000 0.00000
+88  0.250000 0.750000 0.00000
+89  0.750000 0.750000 0.00000
+90  -0.249128 0.192748 0.192748
+91  -0.249128 0.807252 0.192748
+92  -0.249128 0.192748 0.807252
+93  -0.249128 0.807252 0.807252
+94  1.00000 0.250000 0.250000
+95  1.00000 0.750000 0.250000
+96  1.00000 0.250000 0.750000
+97  1.00000 0.750000 0.750000
+98  0.250000 1.00000 0.250000
+99  0.250000 1.00000 0.750000
+100  0.750000 1.00000 0.250000
+101  0.750000 1.00000 0.750000
+102  0.250000 0.250000 1.00000
+103  0.750000 0.250000 1.00000
+104  0.250000 0.750000 1.00000
+105  0.750000 0.750000 1.00000
+106  0.742374 0.750000 0.500000
+107  0.126447 0.758939 0.500000
+108  0.742374 0.250000 0.500000
+109  0.126447 0.241061 0.500000
+110  0.742374 0.500000 0.750000
+111  0.742374 0.500000 0.250000
+112  0.126447 0.500000 0.758939
+113  0.126447 0.500000 0.241061
+114  0.492374 0.750000 0.750000
+115  0.492374 0.250000 0.750000
+116  0.492374 0.750000 0.250000
+117  0.492374 0.250000 0.250000
+118  0.173732 0.242746 0.242746
+119  0.746187 0.250000 0.250000
+120  0.173732 0.757254 0.242746
+121  0.746187 0.750000 0.250000
+122  0.173732 0.242746 0.757254
+123  0.746187 0.250000 0.750000
+124  0.173732 0.757254 0.757254
+125  0.746187 0.750000 0.750000
+$ENDNOD
+$ELM
+64
+1 5 0 0 8 1 28 82 32 30 86 118 90 
+2 5 0 0 8 28 9 54 82 86 56 117 118 
+3 5 0 0 8 30 86 118 90 10 58 113 60 
+4 5 0 0 8 86 56 117 118 58 22 77 113 
+5 5 0 0 8 32 82 52 11 90 118 109 62 
+6 5 0 0 8 82 54 21 52 118 117 81 109 
+7 5 0 0 8 90 118 109 62 60 113 79 23 
+8 5 0 0 8 118 117 81 109 113 77 27 79 
+9 5 0 0 8 9 29 84 54 56 87 119 117 
+10 5 0 0 8 29 2 36 84 87 34 94 119 
+11 5 0 0 8 56 87 119 117 22 59 111 77 
+12 5 0 0 8 87 34 94 119 59 12 64 111 
+13 5 0 0 8 54 84 53 21 117 119 108 81 
+14 5 0 0 8 84 36 13 53 119 94 66 108 
+15 5 0 0 8 117 119 108 81 77 111 78 27 
+16 5 0 0 8 119 94 66 108 111 64 24 78 
+17 5 0 0 8 10 58 113 60 31 88 120 91 
+18 5 0 0 8 58 22 77 113 88 57 116 120 
+19 5 0 0 8 31 88 120 91 3 38 98 40 
+20 5 0 0 8 88 57 116 120 38 14 70 98 
+21 5 0 0 8 60 113 79 23 91 120 107 63 
+22 5 0 0 8 113 77 27 79 120 116 80 107 
+23 5 0 0 8 91 120 107 63 40 98 68 15 
+24 5 0 0 8 120 116 80 107 98 70 25 68 
+25 5 0 0 8 22 59 111 77 57 89 121 116 
+26 5 0 0 8 59 12 64 111 89 35 95 121 
+27 5 0 0 8 57 89 121 116 14 39 100 70 
+28 5 0 0 8 89 35 95 121 39 4 42 100 
+29 5 0 0 8 77 111 78 27 116 121 106 80 
+30 5 0 0 8 111 64 24 78 121 95 67 106 
+31 5 0 0 8 116 121 106 80 70 100 69 25 
+32 5 0 0 8 121 95 67 106 100 42 16 69 
+33 5 0 0 8 11 52 83 33 62 109 122 92 
+34 5 0 0 8 52 21 55 83 109 81 115 122 
+35 5 0 0 8 62 109 122 92 23 79 112 61 
+36 5 0 0 8 109 81 115 122 79 27 76 112 
+37 5 0 0 8 33 83 44 5 92 122 102 46 
+38 5 0 0 8 83 55 17 44 122 115 72 102 
+39 5 0 0 8 92 122 102 46 61 112 74 18 
+40 5 0 0 8 122 115 72 102 112 76 26 74 
+41 5 0 0 8 21 53 85 55 81 108 123 115 
+42 5 0 0 8 53 13 37 85 108 66 96 123 
+43 5 0 0 8 81 108 123 115 27 78 110 76 
+44 5 0 0 8 108 66 96 123 78 24 65 110 
+45 5 0 0 8 55 85 45 17 115 123 103 72 
+46 5 0 0 8 85 37 6 45 123 96 48 103 
+47 5 0 0 8 115 123 103 72 76 110 75 26 
+48 5 0 0 8 123 96 48 103 110 65 19 75 
+49 5 0 0 8 23 79 112 61 63 107 124 93 
+50 5 0 0 8 79 27 76 112 107 80 114 124 
+51 5 0 0 8 63 107 124 93 15 68 99 41 
+52 5 0 0 8 107 80 114 124 68 25 71 99 
+53 5 0 0 8 61 112 74 18 93 124 104 47 
+54 5 0 0 8 112 76 26 74 124 114 73 104 
+55 5 0 0 8 93 124 104 47 41 99 50 7 
+56 5 0 0 8 124 114 73 104 99 71 20 50 
+57 5 0 0 8 27 78 110 76 80 106 125 114 
+58 5 0 0 8 78 24 65 110 106 67 97 125 
+59 5 0 0 8 80 106 125 114 25 69 101 71 
+60 5 0 0 8 106 67 97 125 69 16 43 101 
+61 5 0 0 8 76 110 75 26 114 125 105 73 
+62 5 0 0 8 110 65 19 75 125 97 49 105 
+63 5 0 0 8 114 125 105 73 71 101 51 20 
+64 5 0 0 8 125 97 49 105 101 43 8 51 
+$ENDELM
diff --git a/tests/manifold/manifold_id_06.cc b/tests/manifold/manifold_id_06.cc
new file mode 100644 (file)
index 0000000..ccf108b
--- /dev/null
@@ -0,0 +1,82 @@
+//----------------------------  manifold_id_06.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_06.cc  ---------------------------
+
+
+// Set a manifold id on the boundary faces of a small cell, and change also
+// the interior boundaries.
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/manifold_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+       deallog << "Testing dim=" << dim
+       << ", spacedim="<< spacedim << std::endl;
+
+       Point<spacedim> center;
+       for(unsigned int i=0; i<spacedim; ++i)
+         center[i] = .25;
+
+       double radius=center.norm();
+       
+       PolarManifold<spacedim> boundary(center);       
+       Triangulation<dim,spacedim> tria;
+       GridGenerator::hyper_cube (tria);
+       typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+
+       tria.refine_global(1);
+       
+       for(cell=tria.begin_active(); cell!=tria.end(); ++cell)
+         if(dim<spacedim && cell->center().distance(center)<radius)
+           cell->set_all_manifold_ids(1);
+         else
+           for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell;++f)
+             if(cell->face(f)->center().distance(center)< radius)
+               cell->face(f)->set_all_manifold_ids(1);
+
+       tria.set_manifold(1,boundary);
+       tria.refine_global(2);
+
+       GridOut gridout;
+       gridout.write_msh(tria, deallog.get_file_stream());
+       char fname[30];
+       sprintf(fname, "/tmp/id_6_mesh_%d_%d.msh",
+               dim, spacedim);
+       std::ofstream ofile(fname);
+       gridout.write_msh(tria,ofile);
+}
+
+int main () 
+{
+       std::ofstream logfile("output");
+       deallog.attach(logfile);
+       deallog.depth_console(0);
+       deallog.threshold_double(1.e-10);
+       
+       test<1,1>();
+       test<1,2>();
+       test<2,2>();
+       test<2,3>();
+       test<3,3>();
+       
+       return 0;
+}
+
diff --git a/tests/manifold/manifold_id_06.output b/tests/manifold/manifold_id_06.output
new file mode 100644 (file)
index 0000000..641ee09
--- /dev/null
@@ -0,0 +1,1601 @@
+
+DEAL::Testing dim=1, spacedim=1
+$NOD
+9
+1  0.00000 0 0
+2  1.00000 0 0
+3  0.500000 0 0
+4  0.250000 0 0
+5  0.750000 0 0
+6  0.125000 0 0
+7  0.375000 0 0
+8  0.625000 0 0
+9  0.875000 0 0
+$ENDNOD
+$ELM
+8
+1 1 0 0 2 1 6 
+2 1 0 0 2 6 4 
+3 1 0 0 2 4 7 
+4 1 0 0 2 7 3 
+5 1 0 0 2 3 8 
+6 1 0 0 2 8 5 
+7 1 0 0 2 5 9 
+8 1 0 0 2 9 2 
+$ENDELM
+DEAL::Testing dim=1, spacedim=2
+$NOD
+9
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.500000 0.00000 0
+4  0.250000 -0.103553 0
+5  0.750000 0.00000 0
+6  0.114701 -0.0766407 0
+7  0.385299 -0.0766407 0
+8  0.625000 0.00000 0
+9  0.875000 0.00000 0
+$ENDNOD
+$ELM
+8
+1 1 0 0 2 1 6 
+2 1 0 0 2 6 4 
+3 1 0 0 2 4 7 
+4 1 0 0 2 7 3 
+5 1 0 0 2 3 8 
+6 1 0 0 2 8 5 
+7 1 0 0 2 5 9 
+8 1 0 0 2 9 2 
+$ENDELM
+DEAL::Testing dim=2, spacedim=2
+$NOD
+81
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.00000 1.00000 0
+4  1.00000 1.00000 0
+5  0.500000 0.00000 0
+6  0.00000 0.500000 0
+7  1.00000 0.500000 0
+8  0.500000 1.00000 0
+9  0.500000 0.500000 0
+10  0.250000 -0.103553 0
+11  0.750000 0.00000 0
+12  -0.103553 0.250000 0
+13  0.00000 0.750000 0
+14  1.00000 0.250000 0
+15  1.00000 0.750000 0
+16  0.250000 1.00000 0
+17  0.750000 1.00000 0
+18  0.603553 0.250000 0
+19  0.500000 0.750000 0
+20  0.250000 0.603553 0
+21  0.750000 0.500000 0
+22  0.250000 0.250000 0
+23  0.762944 0.250000 0
+24  0.250000 0.762944 0
+25  0.750000 0.750000 0
+26  0.114701 -0.0766407 0
+27  0.385299 -0.0766407 0
+28  0.625000 0.00000 0
+29  0.875000 0.00000 0
+30  -0.0766407 0.114701 0
+31  -0.0766407 0.385299 0
+32  0.00000 0.625000 0
+33  0.00000 0.875000 0
+34  1.00000 0.125000 0
+35  1.00000 0.375000 0
+36  1.00000 0.625000 0
+37  1.00000 0.875000 0
+38  0.125000 1.00000 0
+39  0.375000 1.00000 0
+40  0.625000 1.00000 0
+41  0.875000 1.00000 0
+42  0.576641 0.114701 0
+43  0.576641 0.385299 0
+44  0.500000 0.625000 0
+45  0.500000 0.875000 0
+46  0.114701 0.576641 0
+47  0.385299 0.576641 0
+48  0.625000 0.500000 0
+49  0.875000 0.500000 0
+50  0.250000 0.0732233 0
+51  0.250000 0.426777 0
+52  0.0732233 0.250000 0
+53  0.426777 0.250000 0
+54  0.756472 0.125000 0
+55  0.756472 0.375000 0
+56  0.683249 0.250000 0
+57  0.881472 0.250000 0
+58  0.250000 0.683249 0
+59  0.250000 0.881472 0
+60  0.125000 0.756472 0
+61  0.375000 0.756472 0
+62  0.750000 0.625000 0
+63  0.750000 0.875000 0
+64  0.625000 0.750000 0
+65  0.875000 0.750000 0
+66  0.0947163 0.0947163 0
+67  0.406038 0.0866796 0
+68  0.0866796 0.406038 0
+69  0.405284 0.405284 0
+70  0.654124 0.125000 0
+71  0.878236 0.125000 0
+72  0.657232 0.376287 0
+73  0.878236 0.375000 0
+74  0.125000 0.654124 0
+75  0.376287 0.657232 0
+76  0.125000 0.878236 0
+77  0.375000 0.878236 0
+78  0.625000 0.625000 0
+79  0.875000 0.625000 0
+80  0.625000 0.875000 0
+81  0.875000 0.875000 0
+$ENDNOD
+$ELM
+64
+1 3 0 0 4 1 26 66 30 
+2 3 0 0 4 26 10 50 66 
+3 3 0 0 4 30 66 52 12 
+4 3 0 0 4 66 50 22 52 
+5 3 0 0 4 10 27 67 50 
+6 3 0 0 4 27 5 42 67 
+7 3 0 0 4 50 67 53 22 
+8 3 0 0 4 67 42 18 53 
+9 3 0 0 4 12 52 68 31 
+10 3 0 0 4 52 22 51 68 
+11 3 0 0 4 31 68 46 6 
+12 3 0 0 4 68 51 20 46 
+13 3 0 0 4 22 53 69 51 
+14 3 0 0 4 53 18 43 69 
+15 3 0 0 4 51 69 47 20 
+16 3 0 0 4 69 43 9 47 
+17 3 0 0 4 5 28 70 42 
+18 3 0 0 4 28 11 54 70 
+19 3 0 0 4 42 70 56 18 
+20 3 0 0 4 70 54 23 56 
+21 3 0 0 4 11 29 71 54 
+22 3 0 0 4 29 2 34 71 
+23 3 0 0 4 54 71 57 23 
+24 3 0 0 4 71 34 14 57 
+25 3 0 0 4 18 56 72 43 
+26 3 0 0 4 56 23 55 72 
+27 3 0 0 4 43 72 48 9 
+28 3 0 0 4 72 55 21 48 
+29 3 0 0 4 23 57 73 55 
+30 3 0 0 4 57 14 35 73 
+31 3 0 0 4 55 73 49 21 
+32 3 0 0 4 73 35 7 49 
+33 3 0 0 4 6 46 74 32 
+34 3 0 0 4 46 20 58 74 
+35 3 0 0 4 32 74 60 13 
+36 3 0 0 4 74 58 24 60 
+37 3 0 0 4 20 47 75 58 
+38 3 0 0 4 47 9 44 75 
+39 3 0 0 4 58 75 61 24 
+40 3 0 0 4 75 44 19 61 
+41 3 0 0 4 13 60 76 33 
+42 3 0 0 4 60 24 59 76 
+43 3 0 0 4 33 76 38 3 
+44 3 0 0 4 76 59 16 38 
+45 3 0 0 4 24 61 77 59 
+46 3 0 0 4 61 19 45 77 
+47 3 0 0 4 59 77 39 16 
+48 3 0 0 4 77 45 8 39 
+49 3 0 0 4 9 48 78 44 
+50 3 0 0 4 48 21 62 78 
+51 3 0 0 4 44 78 64 19 
+52 3 0 0 4 78 62 25 64 
+53 3 0 0 4 21 49 79 62 
+54 3 0 0 4 49 7 36 79 
+55 3 0 0 4 62 79 65 25 
+56 3 0 0 4 79 36 15 65 
+57 3 0 0 4 19 64 80 45 
+58 3 0 0 4 64 25 63 80 
+59 3 0 0 4 45 80 40 8 
+60 3 0 0 4 80 63 17 40 
+61 3 0 0 4 25 65 81 63 
+62 3 0 0 4 65 15 37 81 
+63 3 0 0 4 63 81 41 17 
+64 3 0 0 4 81 37 4 41 
+$ENDELM
+DEAL::Testing dim=2, spacedim=3
+$NOD
+81
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.500000 0.00000 0.00000
+6  0.00000 0.500000 0.00000
+7  1.00000 0.500000 0.00000
+8  0.500000 1.00000 0.00000
+9  0.500000 0.500000 0.00000
+10  0.250000 -0.0561862 -0.0561862
+11  0.750000 0.00000 0.00000
+12  -0.0561862 0.250000 -0.0561862
+13  0.00000 0.750000 0.00000
+14  1.00000 0.250000 0.00000
+15  1.00000 0.750000 0.00000
+16  0.250000 1.00000 0.00000
+17  0.750000 1.00000 0.00000
+18  0.556186 0.250000 -0.0561862
+19  0.500000 0.750000 0.00000
+20  0.250000 0.556186 -0.0561862
+21  0.750000 0.500000 0.00000
+22  0.250000 0.250000 -0.183013
+23  0.757023 0.250000 -0.00702328
+24  0.250000 0.757023 -0.00702328
+25  0.750000 0.750000 0.00000
+26  0.118838 -0.0418018 -0.0418018
+27  0.381162 -0.0418018 -0.0418018
+28  0.625000 0.00000 0.00000
+29  0.875000 0.00000 0.00000
+30  -0.0418018 0.118838 -0.0418018
+31  -0.0418018 0.381162 -0.0418018
+32  0.00000 0.625000 0.00000
+33  0.00000 0.875000 0.00000
+34  1.00000 0.125000 0.00000
+35  1.00000 0.375000 0.00000
+36  1.00000 0.625000 0.00000
+37  1.00000 0.875000 0.00000
+38  0.125000 1.00000 0.00000
+39  0.375000 1.00000 0.00000
+40  0.625000 1.00000 0.00000
+41  0.875000 1.00000 0.00000
+42  0.541802 0.118838 -0.0418018
+43  0.541802 0.381162 -0.0418018
+44  0.500000 0.625000 0.00000
+45  0.500000 0.875000 0.00000
+46  0.118838 0.541802 -0.0418018
+47  0.381162 0.541802 -0.0418018
+48  0.625000 0.500000 0.00000
+49  0.875000 0.500000 0.00000
+50  0.250000 0.0842932 -0.150052
+51  0.250000 0.415707 -0.150052
+52  0.0842932 0.250000 -0.150052
+53  0.415707 0.250000 -0.150052
+54  0.753512 0.125000 -0.00351164
+55  0.753512 0.375000 -0.00351164
+56  0.656605 0.250000 -0.0316047
+57  0.878512 0.250000 -0.00351164
+58  0.250000 0.656605 -0.0316047
+59  0.250000 0.878512 -0.00351164
+60  0.125000 0.753512 -0.00351164
+61  0.375000 0.753512 -0.00351164
+62  0.750000 0.625000 0.00000
+63  0.750000 0.875000 0.00000
+64  0.625000 0.750000 0.00000
+65  0.875000 0.750000 0.00000
+66  0.0916338 0.0916338 -0.120595
+67  0.408366 0.0916338 -0.120595
+68  0.0916338 0.408366 -0.120595
+69  0.408366 0.408366 -0.120595
+70  0.642516 0.124230 -0.0175160
+71  0.876756 0.125000 -0.00175582
+72  0.642516 0.375770 -0.0175160
+73  0.876756 0.375000 -0.00175582
+74  0.124230 0.642516 -0.0175160
+75  0.375770 0.642516 -0.0175160
+76  0.125000 0.876756 -0.00175582
+77  0.375000 0.876756 -0.00175582
+78  0.625000 0.625000 0.00000
+79  0.875000 0.625000 0.00000
+80  0.625000 0.875000 0.00000
+81  0.875000 0.875000 0.00000
+$ENDNOD
+$ELM
+64
+1 3 0 0 4 1 26 66 30 
+2 3 0 0 4 26 10 50 66 
+3 3 0 0 4 30 66 52 12 
+4 3 0 0 4 66 50 22 52 
+5 3 0 0 4 10 27 67 50 
+6 3 0 0 4 27 5 42 67 
+7 3 0 0 4 50 67 53 22 
+8 3 0 0 4 67 42 18 53 
+9 3 0 0 4 12 52 68 31 
+10 3 0 0 4 52 22 51 68 
+11 3 0 0 4 31 68 46 6 
+12 3 0 0 4 68 51 20 46 
+13 3 0 0 4 22 53 69 51 
+14 3 0 0 4 53 18 43 69 
+15 3 0 0 4 51 69 47 20 
+16 3 0 0 4 69 43 9 47 
+17 3 0 0 4 5 28 70 42 
+18 3 0 0 4 28 11 54 70 
+19 3 0 0 4 42 70 56 18 
+20 3 0 0 4 70 54 23 56 
+21 3 0 0 4 11 29 71 54 
+22 3 0 0 4 29 2 34 71 
+23 3 0 0 4 54 71 57 23 
+24 3 0 0 4 71 34 14 57 
+25 3 0 0 4 18 56 72 43 
+26 3 0 0 4 56 23 55 72 
+27 3 0 0 4 43 72 48 9 
+28 3 0 0 4 72 55 21 48 
+29 3 0 0 4 23 57 73 55 
+30 3 0 0 4 57 14 35 73 
+31 3 0 0 4 55 73 49 21 
+32 3 0 0 4 73 35 7 49 
+33 3 0 0 4 6 46 74 32 
+34 3 0 0 4 46 20 58 74 
+35 3 0 0 4 32 74 60 13 
+36 3 0 0 4 74 58 24 60 
+37 3 0 0 4 20 47 75 58 
+38 3 0 0 4 47 9 44 75 
+39 3 0 0 4 58 75 61 24 
+40 3 0 0 4 75 44 19 61 
+41 3 0 0 4 13 60 76 33 
+42 3 0 0 4 60 24 59 76 
+43 3 0 0 4 33 76 38 3 
+44 3 0 0 4 76 59 16 38 
+45 3 0 0 4 24 61 77 59 
+46 3 0 0 4 61 19 45 77 
+47 3 0 0 4 59 77 39 16 
+48 3 0 0 4 77 45 8 39 
+49 3 0 0 4 9 48 78 44 
+50 3 0 0 4 48 21 62 78 
+51 3 0 0 4 44 78 64 19 
+52 3 0 0 4 78 62 25 64 
+53 3 0 0 4 21 49 79 62 
+54 3 0 0 4 49 7 36 79 
+55 3 0 0 4 62 79 65 25 
+56 3 0 0 4 79 36 15 65 
+57 3 0 0 4 19 64 80 45 
+58 3 0 0 4 64 25 63 80 
+59 3 0 0 4 45 80 40 8 
+60 3 0 0 4 80 63 17 40 
+61 3 0 0 4 25 65 81 63 
+62 3 0 0 4 65 15 37 81 
+63 3 0 0 4 63 81 41 17 
+64 3 0 0 4 81 37 4 41 
+$ENDELM
+DEAL::Testing dim=3, spacedim=3
+$NOD
+729
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.00000 0.00000 1.00000
+6  1.00000 0.00000 1.00000
+7  0.00000 1.00000 1.00000
+8  1.00000 1.00000 1.00000
+9  0.500000 0.00000 0.00000
+10  0.00000 0.500000 0.00000
+11  0.00000 0.00000 0.500000
+12  1.00000 0.500000 0.00000
+13  1.00000 0.00000 0.500000
+14  0.500000 1.00000 0.00000
+15  0.00000 1.00000 0.500000
+16  1.00000 1.00000 0.500000
+17  0.500000 0.00000 1.00000
+18  0.00000 0.500000 1.00000
+19  1.00000 0.500000 1.00000
+20  0.500000 1.00000 1.00000
+21  0.500000 0.00000 0.500000
+22  0.500000 0.500000 0.00000
+23  0.00000 0.500000 0.500000
+24  1.00000 0.500000 0.500000
+25  0.500000 1.00000 0.500000
+26  0.500000 0.500000 1.00000
+27  0.500000 0.500000 0.500000
+28  0.250000 -0.0561862 -0.0561862
+29  0.750000 0.00000 0.00000
+30  -0.0561862 0.250000 -0.0561862
+31  0.00000 0.750000 0.00000
+32  -0.0561862 -0.0561862 0.250000
+33  0.00000 0.00000 0.750000
+34  1.00000 0.250000 0.00000
+35  1.00000 0.750000 0.00000
+36  1.00000 0.00000 0.250000
+37  1.00000 0.00000 0.750000
+38  0.250000 1.00000 0.00000
+39  0.750000 1.00000 0.00000
+40  0.00000 1.00000 0.250000
+41  0.00000 1.00000 0.750000
+42  1.00000 1.00000 0.250000
+43  1.00000 1.00000 0.750000
+44  0.250000 0.00000 1.00000
+45  0.750000 0.00000 1.00000
+46  0.00000 0.250000 1.00000
+47  0.00000 0.750000 1.00000
+48  1.00000 0.250000 1.00000
+49  1.00000 0.750000 1.00000
+50  0.250000 1.00000 1.00000
+51  0.750000 1.00000 1.00000
+52  0.250000 -0.0561862 0.556186
+53  0.750000 0.00000 0.500000
+54  0.556186 -0.0561862 0.250000
+55  0.500000 0.00000 0.750000
+56  0.556186 0.250000 -0.0561862
+57  0.500000 0.750000 0.00000
+58  0.250000 0.556186 -0.0561862
+59  0.750000 0.500000 0.00000
+60  -0.0561862 0.556186 0.250000
+61  0.00000 0.500000 0.750000
+62  -0.0561862 0.250000 0.556186
+63  0.00000 0.750000 0.500000
+64  1.00000 0.500000 0.250000
+65  1.00000 0.500000 0.750000
+66  1.00000 0.250000 0.500000
+67  1.00000 0.750000 0.500000
+68  0.250000 1.00000 0.500000
+69  0.750000 1.00000 0.500000
+70  0.500000 1.00000 0.250000
+71  0.500000 1.00000 0.750000
+72  0.500000 0.250000 1.00000
+73  0.500000 0.750000 1.00000
+74  0.250000 0.500000 1.00000
+75  0.750000 0.500000 1.00000
+76  0.500000 0.500000 0.750000
+77  0.556186 0.556186 0.250000
+78  0.750000 0.500000 0.500000
+79  0.250000 0.556186 0.556186
+80  0.500000 0.750000 0.500000
+81  0.556186 0.250000 0.556186
+82  0.250000 -0.183013 0.250000
+83  0.250000 -0.00702328 0.757023
+84  0.757023 -0.00702328 0.250000
+85  0.750000 0.00000 0.750000
+86  0.250000 0.250000 -0.183013
+87  0.757023 0.250000 -0.00702328
+88  0.250000 0.757023 -0.00702328
+89  0.750000 0.750000 0.00000
+90  -0.183013 0.250000 0.250000
+91  -0.00702328 0.757023 0.250000
+92  -0.00702328 0.250000 0.757023
+93  0.00000 0.750000 0.750000
+94  1.00000 0.250000 0.250000
+95  1.00000 0.750000 0.250000
+96  1.00000 0.250000 0.750000
+97  1.00000 0.750000 0.750000
+98  0.250000 1.00000 0.250000
+99  0.250000 1.00000 0.750000
+100  0.750000 1.00000 0.250000
+101  0.750000 1.00000 0.750000
+102  0.250000 0.250000 1.00000
+103  0.750000 0.250000 1.00000
+104  0.250000 0.750000 1.00000
+105  0.750000 0.750000 1.00000
+106  0.750000 0.750000 0.500000
+107  0.250000 0.760535 0.510535
+108  0.760535 0.250000 0.510535
+109  0.250000 0.250000 0.683013
+110  0.750000 0.500000 0.750000
+111  0.760535 0.510535 0.250000
+112  0.250000 0.510535 0.760535
+113  0.250000 0.683013 0.250000
+114  0.500000 0.750000 0.750000
+115  0.510535 0.250000 0.760535
+116  0.510535 0.760535 0.250000
+117  0.683013 0.250000 0.250000
+118  0.250000 0.250000 0.250000
+119  0.776371 0.250293 0.250293
+120  0.250293 0.776371 0.250293
+121  0.753804 0.753804 0.250000
+122  0.250293 0.250293 0.776371
+123  0.753804 0.250000 0.753804
+124  0.250000 0.753804 0.753804
+125  0.750000 0.750000 0.750000
+126  0.118838 -0.0418018 -0.0418018
+127  0.381162 -0.0418018 -0.0418018
+128  0.625000 0.00000 0.00000
+129  0.875000 0.00000 0.00000
+130  -0.0418018 0.118838 -0.0418018
+131  -0.0418018 0.381162 -0.0418018
+132  0.00000 0.625000 0.00000
+133  0.00000 0.875000 0.00000
+134  -0.0418018 -0.0418018 0.118838
+135  -0.0418018 -0.0418018 0.381162
+136  0.00000 0.00000 0.625000
+137  0.00000 0.00000 0.875000
+138  1.00000 0.125000 0.00000
+139  1.00000 0.375000 0.00000
+140  1.00000 0.625000 0.00000
+141  1.00000 0.875000 0.00000
+142  1.00000 0.00000 0.125000
+143  1.00000 0.00000 0.375000
+144  1.00000 0.00000 0.625000
+145  1.00000 0.00000 0.875000
+146  0.125000 1.00000 0.00000
+147  0.375000 1.00000 0.00000
+148  0.625000 1.00000 0.00000
+149  0.875000 1.00000 0.00000
+150  0.00000 1.00000 0.125000
+151  0.00000 1.00000 0.375000
+152  0.00000 1.00000 0.625000
+153  0.00000 1.00000 0.875000
+154  1.00000 1.00000 0.125000
+155  1.00000 1.00000 0.375000
+156  1.00000 1.00000 0.625000
+157  1.00000 1.00000 0.875000
+158  0.125000 0.00000 1.00000
+159  0.375000 0.00000 1.00000
+160  0.625000 0.00000 1.00000
+161  0.875000 0.00000 1.00000
+162  0.00000 0.125000 1.00000
+163  0.00000 0.375000 1.00000
+164  0.00000 0.625000 1.00000
+165  0.00000 0.875000 1.00000
+166  1.00000 0.125000 1.00000
+167  1.00000 0.375000 1.00000
+168  1.00000 0.625000 1.00000
+169  1.00000 0.875000 1.00000
+170  0.125000 1.00000 1.00000
+171  0.375000 1.00000 1.00000
+172  0.625000 1.00000 1.00000
+173  0.875000 1.00000 1.00000
+174  0.118838 -0.0418018 0.541802
+175  0.381162 -0.0418018 0.541802
+176  0.625000 0.00000 0.500000
+177  0.875000 0.00000 0.500000
+178  0.541802 -0.0418018 0.118838
+179  0.541802 -0.0418018 0.381162
+180  0.500000 0.00000 0.625000
+181  0.500000 0.00000 0.875000
+182  0.541802 0.118838 -0.0418018
+183  0.541802 0.381162 -0.0418018
+184  0.500000 0.625000 0.00000
+185  0.500000 0.875000 0.00000
+186  0.118838 0.541802 -0.0418018
+187  0.381162 0.541802 -0.0418018
+188  0.625000 0.500000 0.00000
+189  0.875000 0.500000 0.00000
+190  -0.0418018 0.541802 0.118838
+191  -0.0418018 0.541802 0.381162
+192  0.00000 0.500000 0.625000
+193  0.00000 0.500000 0.875000
+194  -0.0418018 0.118838 0.541802
+195  -0.0418018 0.381162 0.541802
+196  0.00000 0.625000 0.500000
+197  0.00000 0.875000 0.500000
+198  1.00000 0.500000 0.125000
+199  1.00000 0.500000 0.375000
+200  1.00000 0.500000 0.625000
+201  1.00000 0.500000 0.875000
+202  1.00000 0.125000 0.500000
+203  1.00000 0.375000 0.500000
+204  1.00000 0.625000 0.500000
+205  1.00000 0.875000 0.500000
+206  0.125000 1.00000 0.500000
+207  0.375000 1.00000 0.500000
+208  0.625000 1.00000 0.500000
+209  0.875000 1.00000 0.500000
+210  0.500000 1.00000 0.125000
+211  0.500000 1.00000 0.375000
+212  0.500000 1.00000 0.625000
+213  0.500000 1.00000 0.875000
+214  0.500000 0.125000 1.00000
+215  0.500000 0.375000 1.00000
+216  0.500000 0.625000 1.00000
+217  0.500000 0.875000 1.00000
+218  0.125000 0.500000 1.00000
+219  0.375000 0.500000 1.00000
+220  0.625000 0.500000 1.00000
+221  0.875000 0.500000 1.00000
+222  0.500000 0.500000 0.625000
+223  0.500000 0.500000 0.875000
+224  0.541802 0.541802 0.118838
+225  0.541802 0.541802 0.381162
+226  0.625000 0.500000 0.500000
+227  0.875000 0.500000 0.500000
+228  0.118838 0.541802 0.541802
+229  0.381162 0.541802 0.541802
+230  0.500000 0.625000 0.500000
+231  0.500000 0.875000 0.500000
+232  0.541802 0.118838 0.541802
+233  0.541802 0.381162 0.541802
+234  0.0842932 -0.150052 0.250000
+235  0.415707 -0.150052 0.250000
+236  0.250000 -0.150052 0.0842932
+237  0.250000 -0.150052 0.415707
+238  0.125000 -0.00351164 0.753512
+239  0.375000 -0.00351164 0.753512
+240  0.250000 -0.0316047 0.656605
+241  0.250000 -0.00351164 0.878512
+242  0.656605 -0.0316047 0.250000
+243  0.878512 -0.00351164 0.250000
+244  0.753512 -0.00351164 0.125000
+245  0.753512 -0.00351164 0.375000
+246  0.625000 0.00000 0.750000
+247  0.875000 0.00000 0.750000
+248  0.750000 0.00000 0.625000
+249  0.750000 0.00000 0.875000
+250  0.250000 0.0842932 -0.150052
+251  0.250000 0.415707 -0.150052
+252  0.0842932 0.250000 -0.150052
+253  0.415707 0.250000 -0.150052
+254  0.753512 0.125000 -0.00351164
+255  0.753512 0.375000 -0.00351164
+256  0.656605 0.250000 -0.0316047
+257  0.878512 0.250000 -0.00351164
+258  0.250000 0.656605 -0.0316047
+259  0.250000 0.878512 -0.00351164
+260  0.125000 0.753512 -0.00351164
+261  0.375000 0.753512 -0.00351164
+262  0.750000 0.625000 0.00000
+263  0.750000 0.875000 0.00000
+264  0.625000 0.750000 0.00000
+265  0.875000 0.750000 0.00000
+266  -0.150052 0.250000 0.0842932
+267  -0.150052 0.250000 0.415707
+268  -0.150052 0.0842932 0.250000
+269  -0.150052 0.415707 0.250000
+270  -0.00351164 0.753512 0.125000
+271  -0.00351164 0.753512 0.375000
+272  -0.0316047 0.656605 0.250000
+273  -0.00351164 0.878512 0.250000
+274  -0.0316047 0.250000 0.656605
+275  -0.00351164 0.250000 0.878512
+276  -0.00351164 0.125000 0.753512
+277  -0.00351164 0.375000 0.753512
+278  0.00000 0.750000 0.625000
+279  0.00000 0.750000 0.875000
+280  0.00000 0.625000 0.750000
+281  0.00000 0.875000 0.750000
+282  1.00000 0.250000 0.125000
+283  1.00000 0.250000 0.375000
+284  1.00000 0.125000 0.250000
+285  1.00000 0.375000 0.250000
+286  1.00000 0.750000 0.125000
+287  1.00000 0.750000 0.375000
+288  1.00000 0.625000 0.250000
+289  1.00000 0.875000 0.250000
+290  1.00000 0.250000 0.625000
+291  1.00000 0.250000 0.875000
+292  1.00000 0.125000 0.750000
+293  1.00000 0.375000 0.750000
+294  1.00000 0.750000 0.625000
+295  1.00000 0.750000 0.875000
+296  1.00000 0.625000 0.750000
+297  1.00000 0.875000 0.750000
+298  0.125000 1.00000 0.250000
+299  0.375000 1.00000 0.250000
+300  0.250000 1.00000 0.125000
+301  0.250000 1.00000 0.375000
+302  0.125000 1.00000 0.750000
+303  0.375000 1.00000 0.750000
+304  0.250000 1.00000 0.625000
+305  0.250000 1.00000 0.875000
+306  0.625000 1.00000 0.250000
+307  0.875000 1.00000 0.250000
+308  0.750000 1.00000 0.125000
+309  0.750000 1.00000 0.375000
+310  0.625000 1.00000 0.750000
+311  0.875000 1.00000 0.750000
+312  0.750000 1.00000 0.625000
+313  0.750000 1.00000 0.875000
+314  0.250000 0.125000 1.00000
+315  0.250000 0.375000 1.00000
+316  0.125000 0.250000 1.00000
+317  0.375000 0.250000 1.00000
+318  0.750000 0.125000 1.00000
+319  0.750000 0.375000 1.00000
+320  0.625000 0.250000 1.00000
+321  0.875000 0.250000 1.00000
+322  0.250000 0.625000 1.00000
+323  0.250000 0.875000 1.00000
+324  0.125000 0.750000 1.00000
+325  0.375000 0.750000 1.00000
+326  0.750000 0.625000 1.00000
+327  0.750000 0.875000 1.00000
+328  0.625000 0.750000 1.00000
+329  0.875000 0.750000 1.00000
+330  0.750000 0.625000 0.500000
+331  0.750000 0.875000 0.500000
+332  0.625000 0.750000 0.500000
+333  0.875000 0.750000 0.500000
+334  0.250000 0.658361 0.533361
+335  0.250000 0.880267 0.505267
+336  0.125000 0.755267 0.505267
+337  0.375000 0.755267 0.505267
+338  0.755267 0.125000 0.505267
+339  0.755267 0.375000 0.505267
+340  0.658361 0.250000 0.533361
+341  0.880267 0.250000 0.505267
+342  0.250000 0.0842932 0.650052
+343  0.250000 0.415707 0.650052
+344  0.0842932 0.250000 0.650052
+345  0.415707 0.250000 0.650052
+346  0.625000 0.500000 0.750000
+347  0.875000 0.500000 0.750000
+348  0.750000 0.500000 0.625000
+349  0.750000 0.500000 0.875000
+350  0.658361 0.533361 0.250000
+351  0.880267 0.505267 0.250000
+352  0.755267 0.505267 0.125000
+353  0.755267 0.505267 0.375000
+354  0.125000 0.505267 0.755267
+355  0.375000 0.505267 0.755267
+356  0.250000 0.533361 0.658361
+357  0.250000 0.505267 0.880267
+358  0.0842932 0.650052 0.250000
+359  0.415707 0.650052 0.250000
+360  0.250000 0.650052 0.0842932
+361  0.250000 0.650052 0.415707
+362  0.500000 0.750000 0.625000
+363  0.500000 0.750000 0.875000
+364  0.500000 0.625000 0.750000
+365  0.500000 0.875000 0.750000
+366  0.533361 0.250000 0.658361
+367  0.505267 0.250000 0.880267
+368  0.505267 0.125000 0.755267
+369  0.505267 0.375000 0.755267
+370  0.505267 0.755267 0.125000
+371  0.505267 0.755267 0.375000
+372  0.533361 0.658361 0.250000
+373  0.505267 0.880267 0.250000
+374  0.650052 0.250000 0.0842932
+375  0.650052 0.250000 0.415707
+376  0.650052 0.0842932 0.250000
+377  0.650052 0.415707 0.250000
+378  0.750000 0.750000 0.875000
+379  0.750000 0.750000 0.625000
+380  0.875000 0.750000 0.750000
+381  0.625000 0.750000 0.750000
+382  0.750000 0.875000 0.750000
+383  0.750000 0.625000 0.750000
+384  0.250000 0.751902 0.876902
+385  0.250000 0.757170 0.632170
+386  0.375000 0.751902 0.751902
+387  0.125000 0.751902 0.751902
+388  0.250000 0.876902 0.751902
+389  0.250000 0.632170 0.757170
+390  0.751902 0.250000 0.876902
+391  0.757170 0.250000 0.632170
+392  0.876902 0.250000 0.751902
+393  0.632170 0.250000 0.757170
+394  0.751902 0.375000 0.751902
+395  0.751902 0.125000 0.751902
+396  0.250146 0.250146 0.888186
+397  0.250146 0.250146 0.729692
+398  0.380414 0.250146 0.768453
+399  0.121635 0.250146 0.766697
+400  0.250146 0.380414 0.768453
+401  0.250146 0.121635 0.766697
+402  0.751902 0.751902 0.375000
+403  0.751902 0.751902 0.125000
+404  0.876902 0.751902 0.250000
+405  0.632170 0.757170 0.250000
+406  0.751902 0.876902 0.250000
+407  0.757170 0.632170 0.250000
+408  0.250146 0.768453 0.380414
+409  0.250146 0.766697 0.121635
+410  0.380414 0.768453 0.250146
+411  0.121635 0.766697 0.250146
+412  0.250146 0.888186 0.250146
+413  0.250146 0.729692 0.250146
+414  0.768453 0.250146 0.380414
+415  0.766697 0.250146 0.121635
+416  0.888186 0.250146 0.250146
+417  0.729692 0.250146 0.250146
+418  0.768453 0.380414 0.250146
+419  0.766697 0.121635 0.250146
+420  0.250000 0.250000 0.466506
+421  0.250000 0.250000 0.0334936
+422  0.466506 0.250000 0.250000
+423  0.0334936 0.250000 0.250000
+424  0.250000 0.466506 0.250000
+425  0.250000 0.0334936 0.250000
+426  0.0916338 -0.120595 0.0916338
+427  0.0916338 -0.120595 0.408366
+428  0.408366 -0.120595 0.0916338
+429  0.408366 -0.120595 0.408366
+430  0.124230 -0.0175160 0.642516
+431  0.125000 -0.00175582 0.876756
+432  0.375770 -0.0175160 0.642516
+433  0.375000 -0.00175582 0.876756
+434  0.642516 -0.0175160 0.124230
+435  0.642516 -0.0175160 0.375770
+436  0.876756 -0.00175582 0.125000
+437  0.876756 -0.00175582 0.375000
+438  0.625000 0.00000 0.625000
+439  0.625000 0.00000 0.875000
+440  0.875000 0.00000 0.625000
+441  0.875000 0.00000 0.875000
+442  0.0916338 0.0916338 -0.120595
+443  0.408366 0.0916338 -0.120595
+444  0.0916338 0.408366 -0.120595
+445  0.408366 0.408366 -0.120595
+446  0.642516 0.124230 -0.0175160
+447  0.876756 0.125000 -0.00175582
+448  0.642516 0.375770 -0.0175160
+449  0.876756 0.375000 -0.00175582
+450  0.124230 0.642516 -0.0175160
+451  0.375770 0.642516 -0.0175160
+452  0.125000 0.876756 -0.00175582
+453  0.375000 0.876756 -0.00175582
+454  0.625000 0.625000 0.00000
+455  0.875000 0.625000 0.00000
+456  0.625000 0.875000 0.00000
+457  0.875000 0.875000 0.00000
+458  -0.120595 0.0916338 0.0916338
+459  -0.120595 0.408366 0.0916338
+460  -0.120595 0.0916338 0.408366
+461  -0.120595 0.408366 0.408366
+462  -0.0175160 0.642516 0.124230
+463  -0.00175582 0.876756 0.125000
+464  -0.0175160 0.642516 0.375770
+465  -0.00175582 0.876756 0.375000
+466  -0.0175160 0.124230 0.642516
+467  -0.0175160 0.375770 0.642516
+468  -0.00175582 0.125000 0.876756
+469  -0.00175582 0.375000 0.876756
+470  0.00000 0.625000 0.625000
+471  0.00000 0.875000 0.625000
+472  0.00000 0.625000 0.875000
+473  0.00000 0.875000 0.875000
+474  1.00000 0.125000 0.125000
+475  1.00000 0.375000 0.125000
+476  1.00000 0.125000 0.375000
+477  1.00000 0.375000 0.375000
+478  1.00000 0.625000 0.125000
+479  1.00000 0.875000 0.125000
+480  1.00000 0.625000 0.375000
+481  1.00000 0.875000 0.375000
+482  1.00000 0.125000 0.625000
+483  1.00000 0.375000 0.625000
+484  1.00000 0.125000 0.875000
+485  1.00000 0.375000 0.875000
+486  1.00000 0.625000 0.625000
+487  1.00000 0.875000 0.625000
+488  1.00000 0.625000 0.875000
+489  1.00000 0.875000 0.875000
+490  0.125000 1.00000 0.125000
+491  0.125000 1.00000 0.375000
+492  0.375000 1.00000 0.125000
+493  0.375000 1.00000 0.375000
+494  0.125000 1.00000 0.625000
+495  0.125000 1.00000 0.875000
+496  0.375000 1.00000 0.625000
+497  0.375000 1.00000 0.875000
+498  0.625000 1.00000 0.125000
+499  0.625000 1.00000 0.375000
+500  0.875000 1.00000 0.125000
+501  0.875000 1.00000 0.375000
+502  0.625000 1.00000 0.625000
+503  0.625000 1.00000 0.875000
+504  0.875000 1.00000 0.625000
+505  0.875000 1.00000 0.875000
+506  0.125000 0.125000 1.00000
+507  0.375000 0.125000 1.00000
+508  0.125000 0.375000 1.00000
+509  0.375000 0.375000 1.00000
+510  0.625000 0.125000 1.00000
+511  0.875000 0.125000 1.00000
+512  0.625000 0.375000 1.00000
+513  0.875000 0.375000 1.00000
+514  0.125000 0.625000 1.00000
+515  0.375000 0.625000 1.00000
+516  0.125000 0.875000 1.00000
+517  0.375000 0.875000 1.00000
+518  0.625000 0.625000 1.00000
+519  0.875000 0.625000 1.00000
+520  0.625000 0.875000 1.00000
+521  0.875000 0.875000 1.00000
+522  0.625000 0.625000 0.500000
+523  0.875000 0.625000 0.500000
+524  0.625000 0.875000 0.500000
+525  0.875000 0.875000 0.500000
+526  0.123845 0.644251 0.519251
+527  0.376155 0.644251 0.519251
+528  0.125000 0.877634 0.502634
+529  0.375000 0.877634 0.502634
+530  0.644251 0.123845 0.519251
+531  0.877634 0.125000 0.502634
+532  0.644251 0.376155 0.519251
+533  0.877634 0.375000 0.502634
+534  0.0916338 0.0916338 0.620595
+535  0.408366 0.0916338 0.620595
+536  0.0916338 0.408366 0.620595
+537  0.408366 0.408366 0.620595
+538  0.625000 0.500000 0.625000
+539  0.625000 0.500000 0.875000
+540  0.875000 0.500000 0.625000
+541  0.875000 0.500000 0.875000
+542  0.644251 0.519251 0.123845
+543  0.644251 0.519251 0.376155
+544  0.877634 0.502634 0.125000
+545  0.877634 0.502634 0.375000
+546  0.123845 0.519251 0.644251
+547  0.125000 0.502634 0.877634
+548  0.376155 0.519251 0.644251
+549  0.375000 0.502634 0.877634
+550  0.0916338 0.620595 0.0916338
+551  0.0916338 0.620595 0.408366
+552  0.408366 0.620595 0.0916338
+553  0.408366 0.620595 0.408366
+554  0.500000 0.625000 0.625000
+555  0.500000 0.875000 0.625000
+556  0.500000 0.625000 0.875000
+557  0.500000 0.875000 0.875000
+558  0.519251 0.123845 0.644251
+559  0.519251 0.376155 0.644251
+560  0.502634 0.125000 0.877634
+561  0.502634 0.375000 0.877634
+562  0.519251 0.644251 0.123845
+563  0.502634 0.877634 0.125000
+564  0.519251 0.644251 0.376155
+565  0.502634 0.877634 0.375000
+566  0.620595 0.0916338 0.0916338
+567  0.620595 0.408366 0.0916338
+568  0.620595 0.0916338 0.408366
+569  0.620595 0.408366 0.408366
+570  0.875000 0.875000 0.750000
+571  0.625000 0.875000 0.750000
+572  0.875000 0.625000 0.750000
+573  0.625000 0.625000 0.750000
+574  0.875000 0.750000 0.875000
+575  0.875000 0.750000 0.625000
+576  0.625000 0.750000 0.875000
+577  0.625000 0.750000 0.625000
+578  0.750000 0.875000 0.875000
+579  0.750000 0.625000 0.875000
+580  0.750000 0.875000 0.625000
+581  0.750000 0.625000 0.625000
+582  0.375000 0.875951 0.750951
+583  0.125000 0.875951 0.750951
+584  0.375000 0.628585 0.753585
+585  0.125000 0.628585 0.753585
+586  0.375000 0.750951 0.875951
+587  0.375000 0.753585 0.628585
+588  0.125000 0.750951 0.875951
+589  0.125000 0.753585 0.628585
+590  0.250000 0.875951 0.875951
+591  0.250000 0.628585 0.878585
+592  0.250000 0.878585 0.628585
+593  0.250000 0.645265 0.645265
+594  0.875951 0.375000 0.750951
+595  0.628585 0.375000 0.753585
+596  0.875951 0.125000 0.750951
+597  0.628585 0.125000 0.753585
+598  0.875951 0.250000 0.875951
+599  0.878585 0.250000 0.628585
+600  0.628585 0.250000 0.878585
+601  0.645265 0.250000 0.645265
+602  0.750951 0.375000 0.875951
+603  0.750951 0.125000 0.875951
+604  0.753585 0.375000 0.628585
+605  0.753585 0.125000 0.628585
+606  0.377707 0.377707 0.761860
+607  0.123317 0.377707 0.760982
+608  0.377707 0.123317 0.760982
+609  0.123317 0.123317 0.760104
+610  0.377707 0.250073 0.884227
+611  0.394119 0.250073 0.699736
+612  0.123317 0.250073 0.883349
+613  0.106906 0.250073 0.698858
+614  0.250073 0.377707 0.884227
+615  0.250073 0.123317 0.883349
+616  0.250073 0.394119 0.699736
+617  0.250073 0.106906 0.698858
+618  0.875951 0.875951 0.250000
+619  0.628585 0.878585 0.250000
+620  0.878585 0.628585 0.250000
+621  0.645265 0.645265 0.250000
+622  0.875951 0.750951 0.375000
+623  0.875951 0.750951 0.125000
+624  0.628585 0.753585 0.375000
+625  0.628585 0.753585 0.125000
+626  0.750951 0.875951 0.375000
+627  0.753585 0.628585 0.375000
+628  0.750951 0.875951 0.125000
+629  0.753585 0.628585 0.125000
+630  0.377707 0.884227 0.250073
+631  0.123317 0.883349 0.250073
+632  0.394119 0.699736 0.250073
+633  0.106906 0.698858 0.250073
+634  0.377707 0.761860 0.377707
+635  0.377707 0.760982 0.123317
+636  0.123317 0.760982 0.377707
+637  0.123317 0.760104 0.123317
+638  0.250073 0.884227 0.377707
+639  0.250073 0.699736 0.394119
+640  0.250073 0.883349 0.123317
+641  0.250073 0.698858 0.106906
+642  0.884227 0.377707 0.250073
+643  0.699736 0.394119 0.250073
+644  0.883349 0.123317 0.250073
+645  0.698858 0.106906 0.250073
+646  0.884227 0.250073 0.377707
+647  0.883349 0.250073 0.123317
+648  0.699736 0.250073 0.394119
+649  0.698858 0.250073 0.106906
+650  0.761860 0.377707 0.377707
+651  0.760982 0.123317 0.377707
+652  0.760982 0.377707 0.123317
+653  0.760104 0.123317 0.123317
+654  0.442875 0.442875 0.250000
+655  0.0571254 0.442875 0.250000
+656  0.442875 0.0571254 0.250000
+657  0.0571254 0.0571254 0.250000
+658  0.442875 0.250000 0.442875
+659  0.442875 0.250000 0.0571254
+660  0.0571254 0.250000 0.442875
+661  0.0571254 0.250000 0.0571254
+662  0.250000 0.442875 0.442875
+663  0.250000 0.0571254 0.442875
+664  0.250000 0.442875 0.0571254
+665  0.250000 0.0571254 0.0571254
+666  0.0752510 0.0752510 0.0752510
+667  0.424749 0.0752510 0.0752510
+668  0.0752510 0.424749 0.0752510
+669  0.424749 0.424749 0.0752510
+670  0.0752510 0.0752510 0.424749
+671  0.424749 0.0752510 0.424749
+672  0.0752510 0.424749 0.424749
+673  0.424749 0.424749 0.424749
+674  0.675328 0.113937 0.113937
+675  0.880052 0.124159 0.124159
+676  0.675839 0.386646 0.113905
+677  0.880491 0.376353 0.124159
+678  0.675839 0.113905 0.386646
+679  0.880491 0.124159 0.376353
+680  0.676349 0.386679 0.386679
+681  0.880930 0.376353 0.376353
+682  0.113937 0.675328 0.113937
+683  0.386646 0.675839 0.113905
+684  0.124159 0.880052 0.124159
+685  0.376353 0.880491 0.124159
+686  0.113905 0.675839 0.386646
+687  0.386679 0.676349 0.386679
+688  0.124159 0.880491 0.376353
+689  0.376353 0.880930 0.376353
+690  0.636061 0.636061 0.124583
+691  0.876792 0.626792 0.125000
+692  0.626792 0.876792 0.125000
+693  0.875476 0.875476 0.125000
+694  0.636061 0.636061 0.375417
+695  0.876792 0.626792 0.375000
+696  0.626792 0.876792 0.375000
+697  0.875476 0.875476 0.375000
+698  0.113937 0.113937 0.675328
+699  0.386646 0.113905 0.675839
+700  0.113905 0.386646 0.675839
+701  0.386679 0.386679 0.676349
+702  0.124159 0.124159 0.880052
+703  0.376353 0.124159 0.880491
+704  0.124159 0.376353 0.880491
+705  0.376353 0.376353 0.880930
+706  0.636061 0.124583 0.636061
+707  0.876792 0.125000 0.626792
+708  0.636061 0.375417 0.636061
+709  0.876792 0.375000 0.626792
+710  0.626792 0.125000 0.876792
+711  0.875476 0.125000 0.875476
+712  0.626792 0.375000 0.876792
+713  0.875476 0.375000 0.875476
+714  0.124583 0.636061 0.636061
+715  0.375417 0.636061 0.636061
+716  0.125000 0.876792 0.626792
+717  0.375000 0.876792 0.626792
+718  0.125000 0.626792 0.876792
+719  0.375000 0.626792 0.876792
+720  0.125000 0.875476 0.875476
+721  0.375000 0.875476 0.875476
+722  0.625000 0.625000 0.625000
+723  0.875000 0.625000 0.625000
+724  0.625000 0.875000 0.625000
+725  0.875000 0.875000 0.625000
+726  0.625000 0.625000 0.875000
+727  0.875000 0.625000 0.875000
+728  0.625000 0.875000 0.875000
+729  0.875000 0.875000 0.875000
+$ENDNOD
+$ELM
+512
+1 5 0 0 8 1 126 426 134 130 442 666 458 
+2 5 0 0 8 126 28 236 426 442 250 665 666 
+3 5 0 0 8 130 442 666 458 30 252 661 266 
+4 5 0 0 8 442 250 665 666 252 86 421 661 
+5 5 0 0 8 134 426 234 32 458 666 657 268 
+6 5 0 0 8 426 236 82 234 666 665 425 657 
+7 5 0 0 8 458 666 657 268 266 661 423 90 
+8 5 0 0 8 666 665 425 657 661 421 118 423 
+9 5 0 0 8 28 127 428 236 250 443 667 665 
+10 5 0 0 8 127 9 178 428 443 182 566 667 
+11 5 0 0 8 250 443 667 665 86 253 659 421 
+12 5 0 0 8 443 182 566 667 253 56 374 659 
+13 5 0 0 8 236 428 235 82 665 667 656 425 
+14 5 0 0 8 428 178 54 235 667 566 376 656 
+15 5 0 0 8 665 667 656 425 421 659 422 118 
+16 5 0 0 8 667 566 376 656 659 374 117 422 
+17 5 0 0 8 30 252 661 266 131 444 668 459 
+18 5 0 0 8 252 86 421 661 444 251 664 668 
+19 5 0 0 8 131 444 668 459 10 186 550 190 
+20 5 0 0 8 444 251 664 668 186 58 360 550 
+21 5 0 0 8 266 661 423 90 459 668 655 269 
+22 5 0 0 8 661 421 118 423 668 664 424 655 
+23 5 0 0 8 459 668 655 269 190 550 358 60 
+24 5 0 0 8 668 664 424 655 550 360 113 358 
+25 5 0 0 8 86 253 659 421 251 445 669 664 
+26 5 0 0 8 253 56 374 659 445 183 567 669 
+27 5 0 0 8 251 445 669 664 58 187 552 360 
+28 5 0 0 8 445 183 567 669 187 22 224 552 
+29 5 0 0 8 421 659 422 118 664 669 654 424 
+30 5 0 0 8 659 374 117 422 669 567 377 654 
+31 5 0 0 8 664 669 654 424 360 552 359 113 
+32 5 0 0 8 669 567 377 654 552 224 77 359 
+33 5 0 0 8 32 234 427 135 268 657 670 460 
+34 5 0 0 8 234 82 237 427 657 425 663 670 
+35 5 0 0 8 268 657 670 460 90 423 660 267 
+36 5 0 0 8 657 425 663 670 423 118 420 660 
+37 5 0 0 8 135 427 174 11 460 670 534 194 
+38 5 0 0 8 427 237 52 174 670 663 342 534 
+39 5 0 0 8 460 670 534 194 267 660 344 62 
+40 5 0 0 8 670 663 342 534 660 420 109 344 
+41 5 0 0 8 82 235 429 237 425 656 671 663 
+42 5 0 0 8 235 54 179 429 656 376 568 671 
+43 5 0 0 8 425 656 671 663 118 422 658 420 
+44 5 0 0 8 656 376 568 671 422 117 375 658 
+45 5 0 0 8 237 429 175 52 663 671 535 342 
+46 5 0 0 8 429 179 21 175 671 568 232 535 
+47 5 0 0 8 663 671 535 342 420 658 345 109 
+48 5 0 0 8 671 568 232 535 658 375 81 345 
+49 5 0 0 8 90 423 660 267 269 655 672 461 
+50 5 0 0 8 423 118 420 660 655 424 662 672 
+51 5 0 0 8 269 655 672 461 60 358 551 191 
+52 5 0 0 8 655 424 662 672 358 113 361 551 
+53 5 0 0 8 267 660 344 62 461 672 536 195 
+54 5 0 0 8 660 420 109 344 672 662 343 536 
+55 5 0 0 8 461 672 536 195 191 551 228 23 
+56 5 0 0 8 672 662 343 536 551 361 79 228 
+57 5 0 0 8 118 422 658 420 424 654 673 662 
+58 5 0 0 8 422 117 375 658 654 377 569 673 
+59 5 0 0 8 424 654 673 662 113 359 553 361 
+60 5 0 0 8 654 377 569 673 359 77 225 553 
+61 5 0 0 8 420 658 345 109 662 673 537 343 
+62 5 0 0 8 658 375 81 345 673 569 233 537 
+63 5 0 0 8 662 673 537 343 361 553 229 79 
+64 5 0 0 8 673 569 233 537 553 225 27 229 
+65 5 0 0 8 9 128 434 178 182 446 674 566 
+66 5 0 0 8 128 29 244 434 446 254 653 674 
+67 5 0 0 8 182 446 674 566 56 256 649 374 
+68 5 0 0 8 446 254 653 674 256 87 415 649 
+69 5 0 0 8 178 434 242 54 566 674 645 376 
+70 5 0 0 8 434 244 84 242 674 653 419 645 
+71 5 0 0 8 566 674 645 376 374 649 417 117 
+72 5 0 0 8 674 653 419 645 649 415 119 417 
+73 5 0 0 8 29 129 436 244 254 447 675 653 
+74 5 0 0 8 129 2 142 436 447 138 474 675 
+75 5 0 0 8 254 447 675 653 87 257 647 415 
+76 5 0 0 8 447 138 474 675 257 34 282 647 
+77 5 0 0 8 244 436 243 84 653 675 644 419 
+78 5 0 0 8 436 142 36 243 675 474 284 644 
+79 5 0 0 8 653 675 644 419 415 647 416 119 
+80 5 0 0 8 675 474 284 644 647 282 94 416 
+81 5 0 0 8 56 256 649 374 183 448 676 567 
+82 5 0 0 8 256 87 415 649 448 255 652 676 
+83 5 0 0 8 183 448 676 567 22 188 542 224 
+84 5 0 0 8 448 255 652 676 188 59 352 542 
+85 5 0 0 8 374 649 417 117 567 676 643 377 
+86 5 0 0 8 649 415 119 417 676 652 418 643 
+87 5 0 0 8 567 676 643 377 224 542 350 77 
+88 5 0 0 8 676 652 418 643 542 352 111 350 
+89 5 0 0 8 87 257 647 415 255 449 677 652 
+90 5 0 0 8 257 34 282 647 449 139 475 677 
+91 5 0 0 8 255 449 677 652 59 189 544 352 
+92 5 0 0 8 449 139 475 677 189 12 198 544 
+93 5 0 0 8 415 647 416 119 652 677 642 418 
+94 5 0 0 8 647 282 94 416 677 475 285 642 
+95 5 0 0 8 652 677 642 418 352 544 351 111 
+96 5 0 0 8 677 475 285 642 544 198 64 351 
+97 5 0 0 8 54 242 435 179 376 645 678 568 
+98 5 0 0 8 242 84 245 435 645 419 651 678 
+99 5 0 0 8 376 645 678 568 117 417 648 375 
+100 5 0 0 8 645 419 651 678 417 119 414 648 
+101 5 0 0 8 179 435 176 21 568 678 530 232 
+102 5 0 0 8 435 245 53 176 678 651 338 530 
+103 5 0 0 8 568 678 530 232 375 648 340 81 
+104 5 0 0 8 678 651 338 530 648 414 108 340 
+105 5 0 0 8 84 243 437 245 419 644 679 651 
+106 5 0 0 8 243 36 143 437 644 284 476 679 
+107 5 0 0 8 419 644 679 651 119 416 646 414 
+108 5 0 0 8 644 284 476 679 416 94 283 646 
+109 5 0 0 8 245 437 177 53 651 679 531 338 
+110 5 0 0 8 437 143 13 177 679 476 202 531 
+111 5 0 0 8 651 679 531 338 414 646 341 108 
+112 5 0 0 8 679 476 202 531 646 283 66 341 
+113 5 0 0 8 117 417 648 375 377 643 680 569 
+114 5 0 0 8 417 119 414 648 643 418 650 680 
+115 5 0 0 8 377 643 680 569 77 350 543 225 
+116 5 0 0 8 643 418 650 680 350 111 353 543 
+117 5 0 0 8 375 648 340 81 569 680 532 233 
+118 5 0 0 8 648 414 108 340 680 650 339 532 
+119 5 0 0 8 569 680 532 233 225 543 226 27 
+120 5 0 0 8 680 650 339 532 543 353 78 226 
+121 5 0 0 8 119 416 646 414 418 642 681 650 
+122 5 0 0 8 416 94 283 646 642 285 477 681 
+123 5 0 0 8 418 642 681 650 111 351 545 353 
+124 5 0 0 8 642 285 477 681 351 64 199 545 
+125 5 0 0 8 414 646 341 108 650 681 533 339 
+126 5 0 0 8 646 283 66 341 681 477 203 533 
+127 5 0 0 8 650 681 533 339 353 545 227 78 
+128 5 0 0 8 681 477 203 533 545 199 24 227 
+129 5 0 0 8 10 186 550 190 132 450 682 462 
+130 5 0 0 8 186 58 360 550 450 258 641 682 
+131 5 0 0 8 132 450 682 462 31 260 637 270 
+132 5 0 0 8 450 258 641 682 260 88 409 637 
+133 5 0 0 8 190 550 358 60 462 682 633 272 
+134 5 0 0 8 550 360 113 358 682 641 413 633 
+135 5 0 0 8 462 682 633 272 270 637 411 91 
+136 5 0 0 8 682 641 413 633 637 409 120 411 
+137 5 0 0 8 58 187 552 360 258 451 683 641 
+138 5 0 0 8 187 22 224 552 451 184 562 683 
+139 5 0 0 8 258 451 683 641 88 261 635 409 
+140 5 0 0 8 451 184 562 683 261 57 370 635 
+141 5 0 0 8 360 552 359 113 641 683 632 413 
+142 5 0 0 8 552 224 77 359 683 562 372 632 
+143 5 0 0 8 641 683 632 413 409 635 410 120 
+144 5 0 0 8 683 562 372 632 635 370 116 410 
+145 5 0 0 8 31 260 637 270 133 452 684 463 
+146 5 0 0 8 260 88 409 637 452 259 640 684 
+147 5 0 0 8 133 452 684 463 3 146 490 150 
+148 5 0 0 8 452 259 640 684 146 38 300 490 
+149 5 0 0 8 270 637 411 91 463 684 631 273 
+150 5 0 0 8 637 409 120 411 684 640 412 631 
+151 5 0 0 8 463 684 631 273 150 490 298 40 
+152 5 0 0 8 684 640 412 631 490 300 98 298 
+153 5 0 0 8 88 261 635 409 259 453 685 640 
+154 5 0 0 8 261 57 370 635 453 185 563 685 
+155 5 0 0 8 259 453 685 640 38 147 492 300 
+156 5 0 0 8 453 185 563 685 147 14 210 492 
+157 5 0 0 8 409 635 410 120 640 685 630 412 
+158 5 0 0 8 635 370 116 410 685 563 373 630 
+159 5 0 0 8 640 685 630 412 300 492 299 98 
+160 5 0 0 8 685 563 373 630 492 210 70 299 
+161 5 0 0 8 60 358 551 191 272 633 686 464 
+162 5 0 0 8 358 113 361 551 633 413 639 686 
+163 5 0 0 8 272 633 686 464 91 411 636 271 
+164 5 0 0 8 633 413 639 686 411 120 408 636 
+165 5 0 0 8 191 551 228 23 464 686 526 196 
+166 5 0 0 8 551 361 79 228 686 639 334 526 
+167 5 0 0 8 464 686 526 196 271 636 336 63 
+168 5 0 0 8 686 639 334 526 636 408 107 336 
+169 5 0 0 8 113 359 553 361 413 632 687 639 
+170 5 0 0 8 359 77 225 553 632 372 564 687 
+171 5 0 0 8 413 632 687 639 120 410 634 408 
+172 5 0 0 8 632 372 564 687 410 116 371 634 
+173 5 0 0 8 361 553 229 79 639 687 527 334 
+174 5 0 0 8 553 225 27 229 687 564 230 527 
+175 5 0 0 8 639 687 527 334 408 634 337 107 
+176 5 0 0 8 687 564 230 527 634 371 80 337 
+177 5 0 0 8 91 411 636 271 273 631 688 465 
+178 5 0 0 8 411 120 408 636 631 412 638 688 
+179 5 0 0 8 273 631 688 465 40 298 491 151 
+180 5 0 0 8 631 412 638 688 298 98 301 491 
+181 5 0 0 8 271 636 336 63 465 688 528 197 
+182 5 0 0 8 636 408 107 336 688 638 335 528 
+183 5 0 0 8 465 688 528 197 151 491 206 15 
+184 5 0 0 8 688 638 335 528 491 301 68 206 
+185 5 0 0 8 120 410 634 408 412 630 689 638 
+186 5 0 0 8 410 116 371 634 630 373 565 689 
+187 5 0 0 8 412 630 689 638 98 299 493 301 
+188 5 0 0 8 630 373 565 689 299 70 211 493 
+189 5 0 0 8 408 634 337 107 638 689 529 335 
+190 5 0 0 8 634 371 80 337 689 565 231 529 
+191 5 0 0 8 638 689 529 335 301 493 207 68 
+192 5 0 0 8 689 565 231 529 493 211 25 207 
+193 5 0 0 8 22 188 542 224 184 454 690 562 
+194 5 0 0 8 188 59 352 542 454 262 629 690 
+195 5 0 0 8 184 454 690 562 57 264 625 370 
+196 5 0 0 8 454 262 629 690 264 89 403 625 
+197 5 0 0 8 224 542 350 77 562 690 621 372 
+198 5 0 0 8 542 352 111 350 690 629 407 621 
+199 5 0 0 8 562 690 621 372 370 625 405 116 
+200 5 0 0 8 690 629 407 621 625 403 121 405 
+201 5 0 0 8 59 189 544 352 262 455 691 629 
+202 5 0 0 8 189 12 198 544 455 140 478 691 
+203 5 0 0 8 262 455 691 629 89 265 623 403 
+204 5 0 0 8 455 140 478 691 265 35 286 623 
+205 5 0 0 8 352 544 351 111 629 691 620 407 
+206 5 0 0 8 544 198 64 351 691 478 288 620 
+207 5 0 0 8 629 691 620 407 403 623 404 121 
+208 5 0 0 8 691 478 288 620 623 286 95 404 
+209 5 0 0 8 57 264 625 370 185 456 692 563 
+210 5 0 0 8 264 89 403 625 456 263 628 692 
+211 5 0 0 8 185 456 692 563 14 148 498 210 
+212 5 0 0 8 456 263 628 692 148 39 308 498 
+213 5 0 0 8 370 625 405 116 563 692 619 373 
+214 5 0 0 8 625 403 121 405 692 628 406 619 
+215 5 0 0 8 563 692 619 373 210 498 306 70 
+216 5 0 0 8 692 628 406 619 498 308 100 306 
+217 5 0 0 8 89 265 623 403 263 457 693 628 
+218 5 0 0 8 265 35 286 623 457 141 479 693 
+219 5 0 0 8 263 457 693 628 39 149 500 308 
+220 5 0 0 8 457 141 479 693 149 4 154 500 
+221 5 0 0 8 403 623 404 121 628 693 618 406 
+222 5 0 0 8 623 286 95 404 693 479 289 618 
+223 5 0 0 8 628 693 618 406 308 500 307 100 
+224 5 0 0 8 693 479 289 618 500 154 42 307 
+225 5 0 0 8 77 350 543 225 372 621 694 564 
+226 5 0 0 8 350 111 353 543 621 407 627 694 
+227 5 0 0 8 372 621 694 564 116 405 624 371 
+228 5 0 0 8 621 407 627 694 405 121 402 624 
+229 5 0 0 8 225 543 226 27 564 694 522 230 
+230 5 0 0 8 543 353 78 226 694 627 330 522 
+231 5 0 0 8 564 694 522 230 371 624 332 80 
+232 5 0 0 8 694 627 330 522 624 402 106 332 
+233 5 0 0 8 111 351 545 353 407 620 695 627 
+234 5 0 0 8 351 64 199 545 620 288 480 695 
+235 5 0 0 8 407 620 695 627 121 404 622 402 
+236 5 0 0 8 620 288 480 695 404 95 287 622 
+237 5 0 0 8 353 545 227 78 627 695 523 330 
+238 5 0 0 8 545 199 24 227 695 480 204 523 
+239 5 0 0 8 627 695 523 330 402 622 333 106 
+240 5 0 0 8 695 480 204 523 622 287 67 333 
+241 5 0 0 8 116 405 624 371 373 619 696 565 
+242 5 0 0 8 405 121 402 624 619 406 626 696 
+243 5 0 0 8 373 619 696 565 70 306 499 211 
+244 5 0 0 8 619 406 626 696 306 100 309 499 
+245 5 0 0 8 371 624 332 80 565 696 524 231 
+246 5 0 0 8 624 402 106 332 696 626 331 524 
+247 5 0 0 8 565 696 524 231 211 499 208 25 
+248 5 0 0 8 696 626 331 524 499 309 69 208 
+249 5 0 0 8 121 404 622 402 406 618 697 626 
+250 5 0 0 8 404 95 287 622 618 289 481 697 
+251 5 0 0 8 406 618 697 626 100 307 501 309 
+252 5 0 0 8 618 289 481 697 307 42 155 501 
+253 5 0 0 8 402 622 333 106 626 697 525 331 
+254 5 0 0 8 622 287 67 333 697 481 205 525 
+255 5 0 0 8 626 697 525 331 309 501 209 69 
+256 5 0 0 8 697 481 205 525 501 155 16 209 
+257 5 0 0 8 11 174 430 136 194 534 698 466 
+258 5 0 0 8 174 52 240 430 534 342 617 698 
+259 5 0 0 8 194 534 698 466 62 344 613 274 
+260 5 0 0 8 534 342 617 698 344 109 397 613 
+261 5 0 0 8 136 430 238 33 466 698 609 276 
+262 5 0 0 8 430 240 83 238 698 617 401 609 
+263 5 0 0 8 466 698 609 276 274 613 399 92 
+264 5 0 0 8 698 617 401 609 613 397 122 399 
+265 5 0 0 8 52 175 432 240 342 535 699 617 
+266 5 0 0 8 175 21 180 432 535 232 558 699 
+267 5 0 0 8 342 535 699 617 109 345 611 397 
+268 5 0 0 8 535 232 558 699 345 81 366 611 
+269 5 0 0 8 240 432 239 83 617 699 608 401 
+270 5 0 0 8 432 180 55 239 699 558 368 608 
+271 5 0 0 8 617 699 608 401 397 611 398 122 
+272 5 0 0 8 699 558 368 608 611 366 115 398 
+273 5 0 0 8 62 344 613 274 195 536 700 467 
+274 5 0 0 8 344 109 397 613 536 343 616 700 
+275 5 0 0 8 195 536 700 467 23 228 546 192 
+276 5 0 0 8 536 343 616 700 228 79 356 546 
+277 5 0 0 8 274 613 399 92 467 700 607 277 
+278 5 0 0 8 613 397 122 399 700 616 400 607 
+279 5 0 0 8 467 700 607 277 192 546 354 61 
+280 5 0 0 8 700 616 400 607 546 356 112 354 
+281 5 0 0 8 109 345 611 397 343 537 701 616 
+282 5 0 0 8 345 81 366 611 537 233 559 701 
+283 5 0 0 8 343 537 701 616 79 229 548 356 
+284 5 0 0 8 537 233 559 701 229 27 222 548 
+285 5 0 0 8 397 611 398 122 616 701 606 400 
+286 5 0 0 8 611 366 115 398 701 559 369 606 
+287 5 0 0 8 616 701 606 400 356 548 355 112 
+288 5 0 0 8 701 559 369 606 548 222 76 355 
+289 5 0 0 8 33 238 431 137 276 609 702 468 
+290 5 0 0 8 238 83 241 431 609 401 615 702 
+291 5 0 0 8 276 609 702 468 92 399 612 275 
+292 5 0 0 8 609 401 615 702 399 122 396 612 
+293 5 0 0 8 137 431 158 5 468 702 506 162 
+294 5 0 0 8 431 241 44 158 702 615 314 506 
+295 5 0 0 8 468 702 506 162 275 612 316 46 
+296 5 0 0 8 702 615 314 506 612 396 102 316 
+297 5 0 0 8 83 239 433 241 401 608 703 615 
+298 5 0 0 8 239 55 181 433 608 368 560 703 
+299 5 0 0 8 401 608 703 615 122 398 610 396 
+300 5 0 0 8 608 368 560 703 398 115 367 610 
+301 5 0 0 8 241 433 159 44 615 703 507 314 
+302 5 0 0 8 433 181 17 159 703 560 214 507 
+303 5 0 0 8 615 703 507 314 396 610 317 102 
+304 5 0 0 8 703 560 214 507 610 367 72 317 
+305 5 0 0 8 92 399 612 275 277 607 704 469 
+306 5 0 0 8 399 122 396 612 607 400 614 704 
+307 5 0 0 8 277 607 704 469 61 354 547 193 
+308 5 0 0 8 607 400 614 704 354 112 357 547 
+309 5 0 0 8 275 612 316 46 469 704 508 163 
+310 5 0 0 8 612 396 102 316 704 614 315 508 
+311 5 0 0 8 469 704 508 163 193 547 218 18 
+312 5 0 0 8 704 614 315 508 547 357 74 218 
+313 5 0 0 8 122 398 610 396 400 606 705 614 
+314 5 0 0 8 398 115 367 610 606 369 561 705 
+315 5 0 0 8 400 606 705 614 112 355 549 357 
+316 5 0 0 8 606 369 561 705 355 76 223 549 
+317 5 0 0 8 396 610 317 102 614 705 509 315 
+318 5 0 0 8 610 367 72 317 705 561 215 509 
+319 5 0 0 8 614 705 509 315 357 549 219 74 
+320 5 0 0 8 705 561 215 509 549 223 26 219 
+321 5 0 0 8 21 176 438 180 232 530 706 558 
+322 5 0 0 8 176 53 248 438 530 338 605 706 
+323 5 0 0 8 232 530 706 558 81 340 601 366 
+324 5 0 0 8 530 338 605 706 340 108 391 601 
+325 5 0 0 8 180 438 246 55 558 706 597 368 
+326 5 0 0 8 438 248 85 246 706 605 395 597 
+327 5 0 0 8 558 706 597 368 366 601 393 115 
+328 5 0 0 8 706 605 395 597 601 391 123 393 
+329 5 0 0 8 53 177 440 248 338 531 707 605 
+330 5 0 0 8 177 13 144 440 531 202 482 707 
+331 5 0 0 8 338 531 707 605 108 341 599 391 
+332 5 0 0 8 531 202 482 707 341 66 290 599 
+333 5 0 0 8 248 440 247 85 605 707 596 395 
+334 5 0 0 8 440 144 37 247 707 482 292 596 
+335 5 0 0 8 605 707 596 395 391 599 392 123 
+336 5 0 0 8 707 482 292 596 599 290 96 392 
+337 5 0 0 8 81 340 601 366 233 532 708 559 
+338 5 0 0 8 340 108 391 601 532 339 604 708 
+339 5 0 0 8 233 532 708 559 27 226 538 222 
+340 5 0 0 8 532 339 604 708 226 78 348 538 
+341 5 0 0 8 366 601 393 115 559 708 595 369 
+342 5 0 0 8 601 391 123 393 708 604 394 595 
+343 5 0 0 8 559 708 595 369 222 538 346 76 
+344 5 0 0 8 708 604 394 595 538 348 110 346 
+345 5 0 0 8 108 341 599 391 339 533 709 604 
+346 5 0 0 8 341 66 290 599 533 203 483 709 
+347 5 0 0 8 339 533 709 604 78 227 540 348 
+348 5 0 0 8 533 203 483 709 227 24 200 540 
+349 5 0 0 8 391 599 392 123 604 709 594 394 
+350 5 0 0 8 599 290 96 392 709 483 293 594 
+351 5 0 0 8 604 709 594 394 348 540 347 110 
+352 5 0 0 8 709 483 293 594 540 200 65 347 
+353 5 0 0 8 55 246 439 181 368 597 710 560 
+354 5 0 0 8 246 85 249 439 597 395 603 710 
+355 5 0 0 8 368 597 710 560 115 393 600 367 
+356 5 0 0 8 597 395 603 710 393 123 390 600 
+357 5 0 0 8 181 439 160 17 560 710 510 214 
+358 5 0 0 8 439 249 45 160 710 603 318 510 
+359 5 0 0 8 560 710 510 214 367 600 320 72 
+360 5 0 0 8 710 603 318 510 600 390 103 320 
+361 5 0 0 8 85 247 441 249 395 596 711 603 
+362 5 0 0 8 247 37 145 441 596 292 484 711 
+363 5 0 0 8 395 596 711 603 123 392 598 390 
+364 5 0 0 8 596 292 484 711 392 96 291 598 
+365 5 0 0 8 249 441 161 45 603 711 511 318 
+366 5 0 0 8 441 145 6 161 711 484 166 511 
+367 5 0 0 8 603 711 511 318 390 598 321 103 
+368 5 0 0 8 711 484 166 511 598 291 48 321 
+369 5 0 0 8 115 393 600 367 369 595 712 561 
+370 5 0 0 8 393 123 390 600 595 394 602 712 
+371 5 0 0 8 369 595 712 561 76 346 539 223 
+372 5 0 0 8 595 394 602 712 346 110 349 539 
+373 5 0 0 8 367 600 320 72 561 712 512 215 
+374 5 0 0 8 600 390 103 320 712 602 319 512 
+375 5 0 0 8 561 712 512 215 223 539 220 26 
+376 5 0 0 8 712 602 319 512 539 349 75 220 
+377 5 0 0 8 123 392 598 390 394 594 713 602 
+378 5 0 0 8 392 96 291 598 594 293 485 713 
+379 5 0 0 8 394 594 713 602 110 347 541 349 
+380 5 0 0 8 594 293 485 713 347 65 201 541 
+381 5 0 0 8 390 598 321 103 602 713 513 319 
+382 5 0 0 8 598 291 48 321 713 485 167 513 
+383 5 0 0 8 602 713 513 319 349 541 221 75 
+384 5 0 0 8 713 485 167 513 541 201 19 221 
+385 5 0 0 8 23 228 546 192 196 526 714 470 
+386 5 0 0 8 228 79 356 546 526 334 593 714 
+387 5 0 0 8 196 526 714 470 63 336 589 278 
+388 5 0 0 8 526 334 593 714 336 107 385 589 
+389 5 0 0 8 192 546 354 61 470 714 585 280 
+390 5 0 0 8 546 356 112 354 714 593 389 585 
+391 5 0 0 8 470 714 585 280 278 589 387 93 
+392 5 0 0 8 714 593 389 585 589 385 124 387 
+393 5 0 0 8 79 229 548 356 334 527 715 593 
+394 5 0 0 8 229 27 222 548 527 230 554 715 
+395 5 0 0 8 334 527 715 593 107 337 587 385 
+396 5 0 0 8 527 230 554 715 337 80 362 587 
+397 5 0 0 8 356 548 355 112 593 715 584 389 
+398 5 0 0 8 548 222 76 355 715 554 364 584 
+399 5 0 0 8 593 715 584 389 385 587 386 124 
+400 5 0 0 8 715 554 364 584 587 362 114 386 
+401 5 0 0 8 63 336 589 278 197 528 716 471 
+402 5 0 0 8 336 107 385 589 528 335 592 716 
+403 5 0 0 8 197 528 716 471 15 206 494 152 
+404 5 0 0 8 528 335 592 716 206 68 304 494 
+405 5 0 0 8 278 589 387 93 471 716 583 281 
+406 5 0 0 8 589 385 124 387 716 592 388 583 
+407 5 0 0 8 471 716 583 281 152 494 302 41 
+408 5 0 0 8 716 592 388 583 494 304 99 302 
+409 5 0 0 8 107 337 587 385 335 529 717 592 
+410 5 0 0 8 337 80 362 587 529 231 555 717 
+411 5 0 0 8 335 529 717 592 68 207 496 304 
+412 5 0 0 8 529 231 555 717 207 25 212 496 
+413 5 0 0 8 385 587 386 124 592 717 582 388 
+414 5 0 0 8 587 362 114 386 717 555 365 582 
+415 5 0 0 8 592 717 582 388 304 496 303 99 
+416 5 0 0 8 717 555 365 582 496 212 71 303 
+417 5 0 0 8 61 354 547 193 280 585 718 472 
+418 5 0 0 8 354 112 357 547 585 389 591 718 
+419 5 0 0 8 280 585 718 472 93 387 588 279 
+420 5 0 0 8 585 389 591 718 387 124 384 588 
+421 5 0 0 8 193 547 218 18 472 718 514 164 
+422 5 0 0 8 547 357 74 218 718 591 322 514 
+423 5 0 0 8 472 718 514 164 279 588 324 47 
+424 5 0 0 8 718 591 322 514 588 384 104 324 
+425 5 0 0 8 112 355 549 357 389 584 719 591 
+426 5 0 0 8 355 76 223 549 584 364 556 719 
+427 5 0 0 8 389 584 719 591 124 386 586 384 
+428 5 0 0 8 584 364 556 719 386 114 363 586 
+429 5 0 0 8 357 549 219 74 591 719 515 322 
+430 5 0 0 8 549 223 26 219 719 556 216 515 
+431 5 0 0 8 591 719 515 322 384 586 325 104 
+432 5 0 0 8 719 556 216 515 586 363 73 325 
+433 5 0 0 8 93 387 588 279 281 583 720 473 
+434 5 0 0 8 387 124 384 588 583 388 590 720 
+435 5 0 0 8 281 583 720 473 41 302 495 153 
+436 5 0 0 8 583 388 590 720 302 99 305 495 
+437 5 0 0 8 279 588 324 47 473 720 516 165 
+438 5 0 0 8 588 384 104 324 720 590 323 516 
+439 5 0 0 8 473 720 516 165 153 495 170 7 
+440 5 0 0 8 720 590 323 516 495 305 50 170 
+441 5 0 0 8 124 386 586 384 388 582 721 590 
+442 5 0 0 8 386 114 363 586 582 365 557 721 
+443 5 0 0 8 388 582 721 590 99 303 497 305 
+444 5 0 0 8 582 365 557 721 303 71 213 497 
+445 5 0 0 8 384 586 325 104 590 721 517 323 
+446 5 0 0 8 586 363 73 325 721 557 217 517 
+447 5 0 0 8 590 721 517 323 305 497 171 50 
+448 5 0 0 8 721 557 217 517 497 213 20 171 
+449 5 0 0 8 27 226 538 222 230 522 722 554 
+450 5 0 0 8 226 78 348 538 522 330 581 722 
+451 5 0 0 8 230 522 722 554 80 332 577 362 
+452 5 0 0 8 522 330 581 722 332 106 379 577 
+453 5 0 0 8 222 538 346 76 554 722 573 364 
+454 5 0 0 8 538 348 110 346 722 581 383 573 
+455 5 0 0 8 554 722 573 364 362 577 381 114 
+456 5 0 0 8 722 581 383 573 577 379 125 381 
+457 5 0 0 8 78 227 540 348 330 523 723 581 
+458 5 0 0 8 227 24 200 540 523 204 486 723 
+459 5 0 0 8 330 523 723 581 106 333 575 379 
+460 5 0 0 8 523 204 486 723 333 67 294 575 
+461 5 0 0 8 348 540 347 110 581 723 572 383 
+462 5 0 0 8 540 200 65 347 723 486 296 572 
+463 5 0 0 8 581 723 572 383 379 575 380 125 
+464 5 0 0 8 723 486 296 572 575 294 97 380 
+465 5 0 0 8 80 332 577 362 231 524 724 555 
+466 5 0 0 8 332 106 379 577 524 331 580 724 
+467 5 0 0 8 231 524 724 555 25 208 502 212 
+468 5 0 0 8 524 331 580 724 208 69 312 502 
+469 5 0 0 8 362 577 381 114 555 724 571 365 
+470 5 0 0 8 577 379 125 381 724 580 382 571 
+471 5 0 0 8 555 724 571 365 212 502 310 71 
+472 5 0 0 8 724 580 382 571 502 312 101 310 
+473 5 0 0 8 106 333 575 379 331 525 725 580 
+474 5 0 0 8 333 67 294 575 525 205 487 725 
+475 5 0 0 8 331 525 725 580 69 209 504 312 
+476 5 0 0 8 525 205 487 725 209 16 156 504 
+477 5 0 0 8 379 575 380 125 580 725 570 382 
+478 5 0 0 8 575 294 97 380 725 487 297 570 
+479 5 0 0 8 580 725 570 382 312 504 311 101 
+480 5 0 0 8 725 487 297 570 504 156 43 311 
+481 5 0 0 8 76 346 539 223 364 573 726 556 
+482 5 0 0 8 346 110 349 539 573 383 579 726 
+483 5 0 0 8 364 573 726 556 114 381 576 363 
+484 5 0 0 8 573 383 579 726 381 125 378 576 
+485 5 0 0 8 223 539 220 26 556 726 518 216 
+486 5 0 0 8 539 349 75 220 726 579 326 518 
+487 5 0 0 8 556 726 518 216 363 576 328 73 
+488 5 0 0 8 726 579 326 518 576 378 105 328 
+489 5 0 0 8 110 347 541 349 383 572 727 579 
+490 5 0 0 8 347 65 201 541 572 296 488 727 
+491 5 0 0 8 383 572 727 579 125 380 574 378 
+492 5 0 0 8 572 296 488 727 380 97 295 574 
+493 5 0 0 8 349 541 221 75 579 727 519 326 
+494 5 0 0 8 541 201 19 221 727 488 168 519 
+495 5 0 0 8 579 727 519 326 378 574 329 105 
+496 5 0 0 8 727 488 168 519 574 295 49 329 
+497 5 0 0 8 114 381 576 363 365 571 728 557 
+498 5 0 0 8 381 125 378 576 571 382 578 728 
+499 5 0 0 8 365 571 728 557 71 310 503 213 
+500 5 0 0 8 571 382 578 728 310 101 313 503 
+501 5 0 0 8 363 576 328 73 557 728 520 217 
+502 5 0 0 8 576 378 105 328 728 578 327 520 
+503 5 0 0 8 557 728 520 217 213 503 172 20 
+504 5 0 0 8 728 578 327 520 503 313 51 172 
+505 5 0 0 8 125 380 574 378 382 570 729 578 
+506 5 0 0 8 380 97 295 574 570 297 489 729 
+507 5 0 0 8 382 570 729 578 101 311 505 313 
+508 5 0 0 8 570 297 489 729 311 43 157 505 
+509 5 0 0 8 378 574 329 105 578 729 521 327 
+510 5 0 0 8 574 295 49 329 729 489 169 521 
+511 5 0 0 8 578 729 521 327 313 505 173 51 
+512 5 0 0 8 729 489 169 521 505 157 8 173 
+$ENDELM
diff --git a/tests/manifold/manifold_id_07.cc b/tests/manifold/manifold_id_07.cc
new file mode 100644 (file)
index 0000000..9430331
--- /dev/null
@@ -0,0 +1,84 @@
+//----------------------------  manifold_id_05.cc  ---------------------------
+//    Copyright (C) 2011, 2013 by the mathLab team.
+//
+//    This file is subject to LGPL 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.
+//
+//----------------------------  manifold_id_05.cc  ---------------------------
+
+
+// Set a manifold id on one of the boundary face, and attach the
+// boundary description to it. Refine globally twice and output the mesh. 
+// Do this building first the Tria, then the manifold, and setting the 
+// manifold at the end as well, to check proper destruction of the classes. 
+
+#include "../tests.h"
+#include <fstream>
+#include <base/logstream.h>
+
+
+// all include files you need here
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/manifold_lib.h>
+#include <deal.II/grid/grid_out.h>
+
+// Helper function
+template <int dim, int spacedim>
+void test(unsigned int ref=1){
+       deallog << "Testing dim=" << dim
+       << ", spacedim="<< spacedim << std::endl;
+
+       Point<spacedim> center;
+       for(unsigned int i=0; i<dim; ++i)
+         center[i] = .5;
+
+       Triangulation<dim,spacedim> tria;
+       PolarManifold<spacedim> boundary(center);       
+       GridGenerator::hyper_cube (tria);
+       typename Triangulation<dim,spacedim>::active_cell_iterator cell;
+       
+       tria.begin_active()->face(0)->set_manifold_id(1);
+       tria.set_manifold(1,boundary);
+       
+       tria.refine_global(2);
+
+       for(cell=tria.begin_active(); cell!=tria.end(); ++cell)
+         {
+           deallog << "C: " << cell << std::endl;
+           for(unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell;++f)
+             deallog << "F: " << cell->face(f) << ", mid: " 
+                     << (int) cell->face(f)->manifold_id() << std::endl;
+         }
+       
+
+       GridOut gridout;
+       gridout.write_msh(tria, deallog.get_file_stream());
+       char fname[30];
+       sprintf(fname, "/tmp/id_7_mesh_%d_%d.msh",
+               dim, spacedim);
+       std::ofstream ofile(fname);
+       gridout.write_msh(tria,ofile);
+       tria.set_manifold(1);
+}
+
+int main () 
+{
+       std::ofstream logfile("output");
+       deallog.attach(logfile);
+       deallog.depth_console(0);
+       deallog.threshold_double(1.e-10);
+       
+       test<1,1>();
+       test<1,2>();
+       test<2,2>();
+       test<2,3>();
+       test<3,3>();
+       
+       return 0;
+}
+
diff --git a/tests/manifold/manifold_id_07.output b/tests/manifold/manifold_id_07.output
new file mode 100644 (file)
index 0000000..549537d
--- /dev/null
@@ -0,0 +1,957 @@
+
+DEAL::Testing dim=1, spacedim=1
+DEAL::C: 2.0
+DEAL::F: 0, mid: 1
+DEAL::F: 3, mid: 255
+DEAL::C: 2.1
+DEAL::F: 3, mid: 255
+DEAL::F: 2, mid: 255
+DEAL::C: 2.2
+DEAL::F: 2, mid: 255
+DEAL::F: 4, mid: 255
+DEAL::C: 2.3
+DEAL::F: 4, mid: 255
+DEAL::F: 1, mid: 255
+$NOD
+5
+1  0.00000 0 0
+2  1.00000 0 0
+3  0.500000 0 0
+4  0.250000 0 0
+5  0.750000 0 0
+$ENDNOD
+$ELM
+4
+1 1 0 0 2 1 4 
+2 1 0 0 2 4 3 
+3 1 0 0 2 3 5 
+4 1 0 0 2 5 2 
+$ENDELM
+DEAL::Testing dim=1, spacedim=2
+DEAL::C: 2.0
+DEAL::F: 0, mid: 1
+DEAL::F: 3, mid: 255
+DEAL::C: 2.1
+DEAL::F: 3, mid: 255
+DEAL::F: 2, mid: 255
+DEAL::C: 2.2
+DEAL::F: 2, mid: 255
+DEAL::F: 4, mid: 255
+DEAL::C: 2.3
+DEAL::F: 4, mid: 255
+DEAL::F: 1, mid: 255
+$NOD
+5
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.500000 0.00000 0
+4  0.250000 0.00000 0
+5  0.750000 0.00000 0
+$ENDNOD
+$ELM
+4
+1 1 0 0 2 1 4 
+2 1 0 0 2 4 3 
+3 1 0 0 2 3 5 
+4 1 0 0 2 5 2 
+$ENDELM
+DEAL::Testing dim=2, spacedim=2
+DEAL::C: 2.0
+DEAL::F: 20, mid: 1
+DEAL::F: 40, mid: 255
+DEAL::F: 16, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::C: 2.1
+DEAL::F: 40, mid: 255
+DEAL::F: 32, mid: 255
+DEAL::F: 17, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::C: 2.2
+DEAL::F: 21, mid: 1
+DEAL::F: 41, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::C: 2.3
+DEAL::F: 41, mid: 255
+DEAL::F: 33, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::C: 2.4
+DEAL::F: 32, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 18, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::C: 2.5
+DEAL::F: 44, mid: 255
+DEAL::F: 24, mid: 255
+DEAL::F: 19, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::C: 2.6
+DEAL::F: 33, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::C: 2.7
+DEAL::F: 45, mid: 255
+DEAL::F: 25, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::C: 2.8
+DEAL::F: 22, mid: 1
+DEAL::F: 48, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::C: 2.9
+DEAL::F: 48, mid: 255
+DEAL::F: 34, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::C: 2.10
+DEAL::F: 23, mid: 1
+DEAL::F: 49, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 28, mid: 255
+DEAL::C: 2.11
+DEAL::F: 49, mid: 255
+DEAL::F: 35, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 29, mid: 255
+DEAL::C: 2.12
+DEAL::F: 34, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::C: 2.13
+DEAL::F: 52, mid: 255
+DEAL::F: 26, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::C: 2.14
+DEAL::F: 35, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 30, mid: 255
+DEAL::C: 2.15
+DEAL::F: 53, mid: 255
+DEAL::F: 27, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 31, mid: 255
+$NOD
+25
+1  0.00000 0.00000 0
+2  1.00000 0.00000 0
+3  0.00000 1.00000 0
+4  1.00000 1.00000 0
+5  0.500000 0.00000 0
+6  -0.207107 0.500000 0
+7  1.00000 0.500000 0
+8  0.500000 1.00000 0
+9  0.474112 0.500000 0
+10  0.250000 0.00000 0
+11  0.750000 0.00000 0
+12  -0.153281 0.229402 0
+13  -0.153281 0.770598 0
+14  1.00000 0.250000 0
+15  1.00000 0.750000 0
+16  0.250000 1.00000 0
+17  0.750000 1.00000 0
+18  0.487056 0.250000 0
+19  0.487056 0.750000 0
+20  0.133502 0.500000 0
+21  0.737056 0.500000 0
+22  0.185535 0.247425 0
+23  0.743528 0.250000 0
+24  0.185535 0.752575 0
+25  0.743528 0.750000 0
+$ENDNOD
+$ELM
+16
+1 3 0 0 4 1 10 22 12 
+2 3 0 0 4 10 5 18 22 
+3 3 0 0 4 12 22 20 6 
+4 3 0 0 4 22 18 9 20 
+5 3 0 0 4 5 11 23 18 
+6 3 0 0 4 11 2 14 23 
+7 3 0 0 4 18 23 21 9 
+8 3 0 0 4 23 14 7 21 
+9 3 0 0 4 6 20 24 13 
+10 3 0 0 4 20 9 19 24 
+11 3 0 0 4 13 24 16 3 
+12 3 0 0 4 24 19 8 16 
+13 3 0 0 4 9 21 25 19 
+14 3 0 0 4 21 7 15 25 
+15 3 0 0 4 19 25 17 8 
+16 3 0 0 4 25 15 4 17 
+$ENDELM
+DEAL::Testing dim=2, spacedim=3
+DEAL::C: 2.0
+DEAL::F: 20, mid: 1
+DEAL::F: 40, mid: 255
+DEAL::F: 16, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::C: 2.1
+DEAL::F: 40, mid: 255
+DEAL::F: 32, mid: 255
+DEAL::F: 17, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::C: 2.2
+DEAL::F: 21, mid: 1
+DEAL::F: 41, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::C: 2.3
+DEAL::F: 41, mid: 255
+DEAL::F: 33, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::C: 2.4
+DEAL::F: 32, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 18, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::C: 2.5
+DEAL::F: 44, mid: 255
+DEAL::F: 24, mid: 255
+DEAL::F: 19, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::C: 2.6
+DEAL::F: 33, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::C: 2.7
+DEAL::F: 45, mid: 255
+DEAL::F: 25, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::C: 2.8
+DEAL::F: 22, mid: 1
+DEAL::F: 48, mid: 255
+DEAL::F: 36, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::C: 2.9
+DEAL::F: 48, mid: 255
+DEAL::F: 34, mid: 255
+DEAL::F: 37, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::C: 2.10
+DEAL::F: 23, mid: 1
+DEAL::F: 49, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 28, mid: 255
+DEAL::C: 2.11
+DEAL::F: 49, mid: 255
+DEAL::F: 35, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 29, mid: 255
+DEAL::C: 2.12
+DEAL::F: 34, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 38, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::C: 2.13
+DEAL::F: 52, mid: 255
+DEAL::F: 26, mid: 255
+DEAL::F: 39, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::C: 2.14
+DEAL::F: 35, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 30, mid: 255
+DEAL::C: 2.15
+DEAL::F: 53, mid: 255
+DEAL::F: 27, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 31, mid: 255
+$NOD
+25
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.500000 0.00000 0.00000
+6  -0.207107 0.500000 0.00000
+7  1.00000 0.500000 0.00000
+8  0.500000 1.00000 0.00000
+9  0.474112 0.500000 0.00000
+10  0.250000 0.00000 0.00000
+11  0.750000 0.00000 0.00000
+12  -0.153281 0.229402 0.00000
+13  -0.153281 0.770598 0.00000
+14  1.00000 0.250000 0.00000
+15  1.00000 0.750000 0.00000
+16  0.250000 1.00000 0.00000
+17  0.750000 1.00000 0.00000
+18  0.487056 0.250000 0.00000
+19  0.487056 0.750000 0.00000
+20  0.133502 0.500000 0.00000
+21  0.737056 0.500000 0.00000
+22  0.185535 0.247425 0.00000
+23  0.743528 0.250000 0.00000
+24  0.185535 0.752575 0.00000
+25  0.743528 0.750000 0.00000
+$ENDNOD
+$ELM
+16
+1 3 0 0 4 1 10 22 12 
+2 3 0 0 4 10 5 18 22 
+3 3 0 0 4 12 22 20 6 
+4 3 0 0 4 22 18 9 20 
+5 3 0 0 4 5 11 23 18 
+6 3 0 0 4 11 2 14 23 
+7 3 0 0 4 18 23 21 9 
+8 3 0 0 4 23 14 7 21 
+9 3 0 0 4 6 20 24 13 
+10 3 0 0 4 20 9 19 24 
+11 3 0 0 4 13 24 16 3 
+12 3 0 0 4 24 19 8 16 
+13 3 0 0 4 9 21 25 19 
+14 3 0 0 4 21 7 15 25 
+15 3 0 0 4 19 25 17 8 
+16 3 0 0 4 25 15 4 17 
+$ENDELM
+DEAL::Testing dim=3, spacedim=3
+DEAL::C: 2.0
+DEAL::F: 74, mid: 1
+DEAL::F: 281, mid: 255
+DEAL::F: 42, mid: 255
+DEAL::F: 277, mid: 255
+DEAL::F: 58, mid: 255
+DEAL::F: 273, mid: 255
+DEAL::C: 2.1
+DEAL::F: 281, mid: 255
+DEAL::F: 182, mid: 255
+DEAL::F: 44, mid: 255
+DEAL::F: 275, mid: 255
+DEAL::F: 59, mid: 255
+DEAL::F: 272, mid: 255
+DEAL::C: 2.2
+DEAL::F: 75, mid: 1
+DEAL::F: 280, mid: 255
+DEAL::F: 277, mid: 255
+DEAL::F: 166, mid: 255
+DEAL::F: 60, mid: 255
+DEAL::F: 271, mid: 255
+DEAL::C: 2.3
+DEAL::F: 280, mid: 255
+DEAL::F: 183, mid: 255
+DEAL::F: 275, mid: 255
+DEAL::F: 168, mid: 255
+DEAL::F: 61, mid: 255
+DEAL::F: 270, mid: 255
+DEAL::C: 2.4
+DEAL::F: 76, mid: 1
+DEAL::F: 279, mid: 255
+DEAL::F: 43, mid: 255
+DEAL::F: 276, mid: 255
+DEAL::F: 273, mid: 255
+DEAL::F: 150, mid: 255
+DEAL::C: 2.5
+DEAL::F: 279, mid: 255
+DEAL::F: 184, mid: 255
+DEAL::F: 45, mid: 255
+DEAL::F: 274, mid: 255
+DEAL::F: 272, mid: 255
+DEAL::F: 151, mid: 255
+DEAL::C: 2.6
+DEAL::F: 77, mid: 1
+DEAL::F: 278, mid: 255
+DEAL::F: 276, mid: 255
+DEAL::F: 167, mid: 255
+DEAL::F: 271, mid: 255
+DEAL::F: 152, mid: 255
+DEAL::C: 2.7
+DEAL::F: 278, mid: 255
+DEAL::F: 185, mid: 255
+DEAL::F: 274, mid: 255
+DEAL::F: 169, mid: 255
+DEAL::F: 270, mid: 255
+DEAL::F: 153, mid: 255
+DEAL::C: 2.8
+DEAL::F: 182, mid: 255
+DEAL::F: 269, mid: 255
+DEAL::F: 50, mid: 255
+DEAL::F: 265, mid: 255
+DEAL::F: 62, mid: 255
+DEAL::F: 261, mid: 255
+DEAL::C: 2.9
+DEAL::F: 269, mid: 255
+DEAL::F: 90, mid: 255
+DEAL::F: 52, mid: 255
+DEAL::F: 263, mid: 255
+DEAL::F: 63, mid: 255
+DEAL::F: 260, mid: 255
+DEAL::C: 2.10
+DEAL::F: 183, mid: 255
+DEAL::F: 268, mid: 255
+DEAL::F: 265, mid: 255
+DEAL::F: 158, mid: 255
+DEAL::F: 64, mid: 255
+DEAL::F: 259, mid: 255
+DEAL::C: 2.11
+DEAL::F: 268, mid: 255
+DEAL::F: 91, mid: 255
+DEAL::F: 263, mid: 255
+DEAL::F: 160, mid: 255
+DEAL::F: 65, mid: 255
+DEAL::F: 258, mid: 255
+DEAL::C: 2.12
+DEAL::F: 184, mid: 255
+DEAL::F: 267, mid: 255
+DEAL::F: 51, mid: 255
+DEAL::F: 264, mid: 255
+DEAL::F: 261, mid: 255
+DEAL::F: 146, mid: 255
+DEAL::C: 2.13
+DEAL::F: 267, mid: 255
+DEAL::F: 92, mid: 255
+DEAL::F: 53, mid: 255
+DEAL::F: 262, mid: 255
+DEAL::F: 260, mid: 255
+DEAL::F: 147, mid: 255
+DEAL::C: 2.14
+DEAL::F: 185, mid: 255
+DEAL::F: 266, mid: 255
+DEAL::F: 264, mid: 255
+DEAL::F: 159, mid: 255
+DEAL::F: 259, mid: 255
+DEAL::F: 148, mid: 255
+DEAL::C: 2.15
+DEAL::F: 266, mid: 255
+DEAL::F: 93, mid: 255
+DEAL::F: 262, mid: 255
+DEAL::F: 161, mid: 255
+DEAL::F: 258, mid: 255
+DEAL::F: 149, mid: 255
+DEAL::C: 2.16
+DEAL::F: 78, mid: 1
+DEAL::F: 257, mid: 255
+DEAL::F: 166, mid: 255
+DEAL::F: 253, mid: 255
+DEAL::F: 66, mid: 255
+DEAL::F: 249, mid: 255
+DEAL::C: 2.17
+DEAL::F: 257, mid: 255
+DEAL::F: 178, mid: 255
+DEAL::F: 168, mid: 255
+DEAL::F: 251, mid: 255
+DEAL::F: 67, mid: 255
+DEAL::F: 248, mid: 255
+DEAL::C: 2.18
+DEAL::F: 79, mid: 1
+DEAL::F: 256, mid: 255
+DEAL::F: 253, mid: 255
+DEAL::F: 106, mid: 255
+DEAL::F: 68, mid: 255
+DEAL::F: 247, mid: 255
+DEAL::C: 2.19
+DEAL::F: 256, mid: 255
+DEAL::F: 179, mid: 255
+DEAL::F: 251, mid: 255
+DEAL::F: 108, mid: 255
+DEAL::F: 69, mid: 255
+DEAL::F: 246, mid: 255
+DEAL::C: 2.20
+DEAL::F: 80, mid: 1
+DEAL::F: 255, mid: 255
+DEAL::F: 167, mid: 255
+DEAL::F: 252, mid: 255
+DEAL::F: 249, mid: 255
+DEAL::F: 142, mid: 255
+DEAL::C: 2.21
+DEAL::F: 255, mid: 255
+DEAL::F: 180, mid: 255
+DEAL::F: 169, mid: 255
+DEAL::F: 250, mid: 255
+DEAL::F: 248, mid: 255
+DEAL::F: 143, mid: 255
+DEAL::C: 2.22
+DEAL::F: 81, mid: 1
+DEAL::F: 254, mid: 255
+DEAL::F: 252, mid: 255
+DEAL::F: 107, mid: 255
+DEAL::F: 247, mid: 255
+DEAL::F: 144, mid: 255
+DEAL::C: 2.23
+DEAL::F: 254, mid: 255
+DEAL::F: 181, mid: 255
+DEAL::F: 250, mid: 255
+DEAL::F: 109, mid: 255
+DEAL::F: 246, mid: 255
+DEAL::F: 145, mid: 255
+DEAL::C: 2.24
+DEAL::F: 178, mid: 255
+DEAL::F: 245, mid: 255
+DEAL::F: 158, mid: 255
+DEAL::F: 241, mid: 255
+DEAL::F: 70, mid: 255
+DEAL::F: 237, mid: 255
+DEAL::C: 2.25
+DEAL::F: 245, mid: 255
+DEAL::F: 94, mid: 255
+DEAL::F: 160, mid: 255
+DEAL::F: 239, mid: 255
+DEAL::F: 71, mid: 255
+DEAL::F: 236, mid: 255
+DEAL::C: 2.26
+DEAL::F: 179, mid: 255
+DEAL::F: 244, mid: 255
+DEAL::F: 241, mid: 255
+DEAL::F: 114, mid: 255
+DEAL::F: 72, mid: 255
+DEAL::F: 235, mid: 255
+DEAL::C: 2.27
+DEAL::F: 244, mid: 255
+DEAL::F: 95, mid: 255
+DEAL::F: 239, mid: 255
+DEAL::F: 116, mid: 255
+DEAL::F: 73, mid: 255
+DEAL::F: 234, mid: 255
+DEAL::C: 2.28
+DEAL::F: 180, mid: 255
+DEAL::F: 243, mid: 255
+DEAL::F: 159, mid: 255
+DEAL::F: 240, mid: 255
+DEAL::F: 237, mid: 255
+DEAL::F: 138, mid: 255
+DEAL::C: 2.29
+DEAL::F: 243, mid: 255
+DEAL::F: 96, mid: 255
+DEAL::F: 161, mid: 255
+DEAL::F: 238, mid: 255
+DEAL::F: 236, mid: 255
+DEAL::F: 139, mid: 255
+DEAL::C: 2.30
+DEAL::F: 181, mid: 255
+DEAL::F: 242, mid: 255
+DEAL::F: 240, mid: 255
+DEAL::F: 115, mid: 255
+DEAL::F: 235, mid: 255
+DEAL::F: 140, mid: 255
+DEAL::C: 2.31
+DEAL::F: 242, mid: 255
+DEAL::F: 97, mid: 255
+DEAL::F: 238, mid: 255
+DEAL::F: 117, mid: 255
+DEAL::F: 234, mid: 255
+DEAL::F: 141, mid: 255
+DEAL::C: 2.32
+DEAL::F: 82, mid: 1
+DEAL::F: 233, mid: 255
+DEAL::F: 46, mid: 255
+DEAL::F: 229, mid: 255
+DEAL::F: 150, mid: 255
+DEAL::F: 225, mid: 255
+DEAL::C: 2.33
+DEAL::F: 233, mid: 255
+DEAL::F: 174, mid: 255
+DEAL::F: 48, mid: 255
+DEAL::F: 227, mid: 255
+DEAL::F: 151, mid: 255
+DEAL::F: 224, mid: 255
+DEAL::C: 2.34
+DEAL::F: 83, mid: 1
+DEAL::F: 232, mid: 255
+DEAL::F: 229, mid: 255
+DEAL::F: 162, mid: 255
+DEAL::F: 152, mid: 255
+DEAL::F: 223, mid: 255
+DEAL::C: 2.35
+DEAL::F: 232, mid: 255
+DEAL::F: 175, mid: 255
+DEAL::F: 227, mid: 255
+DEAL::F: 164, mid: 255
+DEAL::F: 153, mid: 255
+DEAL::F: 222, mid: 255
+DEAL::C: 2.36
+DEAL::F: 84, mid: 1
+DEAL::F: 231, mid: 255
+DEAL::F: 47, mid: 255
+DEAL::F: 228, mid: 255
+DEAL::F: 225, mid: 255
+DEAL::F: 122, mid: 255
+DEAL::C: 2.37
+DEAL::F: 231, mid: 255
+DEAL::F: 176, mid: 255
+DEAL::F: 49, mid: 255
+DEAL::F: 226, mid: 255
+DEAL::F: 224, mid: 255
+DEAL::F: 123, mid: 255
+DEAL::C: 2.38
+DEAL::F: 85, mid: 1
+DEAL::F: 230, mid: 255
+DEAL::F: 228, mid: 255
+DEAL::F: 163, mid: 255
+DEAL::F: 223, mid: 255
+DEAL::F: 124, mid: 255
+DEAL::C: 2.39
+DEAL::F: 230, mid: 255
+DEAL::F: 177, mid: 255
+DEAL::F: 226, mid: 255
+DEAL::F: 165, mid: 255
+DEAL::F: 222, mid: 255
+DEAL::F: 125, mid: 255
+DEAL::C: 2.40
+DEAL::F: 174, mid: 255
+DEAL::F: 221, mid: 255
+DEAL::F: 54, mid: 255
+DEAL::F: 217, mid: 255
+DEAL::F: 146, mid: 255
+DEAL::F: 213, mid: 255
+DEAL::C: 2.41
+DEAL::F: 221, mid: 255
+DEAL::F: 98, mid: 255
+DEAL::F: 56, mid: 255
+DEAL::F: 215, mid: 255
+DEAL::F: 147, mid: 255
+DEAL::F: 212, mid: 255
+DEAL::C: 2.42
+DEAL::F: 175, mid: 255
+DEAL::F: 220, mid: 255
+DEAL::F: 217, mid: 255
+DEAL::F: 154, mid: 255
+DEAL::F: 148, mid: 255
+DEAL::F: 211, mid: 255
+DEAL::C: 2.43
+DEAL::F: 220, mid: 255
+DEAL::F: 99, mid: 255
+DEAL::F: 215, mid: 255
+DEAL::F: 156, mid: 255
+DEAL::F: 149, mid: 255
+DEAL::F: 210, mid: 255
+DEAL::C: 2.44
+DEAL::F: 176, mid: 255
+DEAL::F: 219, mid: 255
+DEAL::F: 55, mid: 255
+DEAL::F: 216, mid: 255
+DEAL::F: 213, mid: 255
+DEAL::F: 126, mid: 255
+DEAL::C: 2.45
+DEAL::F: 219, mid: 255
+DEAL::F: 100, mid: 255
+DEAL::F: 57, mid: 255
+DEAL::F: 214, mid: 255
+DEAL::F: 212, mid: 255
+DEAL::F: 127, mid: 255
+DEAL::C: 2.46
+DEAL::F: 177, mid: 255
+DEAL::F: 218, mid: 255
+DEAL::F: 216, mid: 255
+DEAL::F: 155, mid: 255
+DEAL::F: 211, mid: 255
+DEAL::F: 128, mid: 255
+DEAL::C: 2.47
+DEAL::F: 218, mid: 255
+DEAL::F: 101, mid: 255
+DEAL::F: 214, mid: 255
+DEAL::F: 157, mid: 255
+DEAL::F: 210, mid: 255
+DEAL::F: 129, mid: 255
+DEAL::C: 2.48
+DEAL::F: 86, mid: 1
+DEAL::F: 209, mid: 255
+DEAL::F: 162, mid: 255
+DEAL::F: 205, mid: 255
+DEAL::F: 142, mid: 255
+DEAL::F: 201, mid: 255
+DEAL::C: 2.49
+DEAL::F: 209, mid: 255
+DEAL::F: 170, mid: 255
+DEAL::F: 164, mid: 255
+DEAL::F: 203, mid: 255
+DEAL::F: 143, mid: 255
+DEAL::F: 200, mid: 255
+DEAL::C: 2.50
+DEAL::F: 87, mid: 1
+DEAL::F: 208, mid: 255
+DEAL::F: 205, mid: 255
+DEAL::F: 110, mid: 255
+DEAL::F: 144, mid: 255
+DEAL::F: 199, mid: 255
+DEAL::C: 2.51
+DEAL::F: 208, mid: 255
+DEAL::F: 171, mid: 255
+DEAL::F: 203, mid: 255
+DEAL::F: 112, mid: 255
+DEAL::F: 145, mid: 255
+DEAL::F: 198, mid: 255
+DEAL::C: 2.52
+DEAL::F: 88, mid: 1
+DEAL::F: 207, mid: 255
+DEAL::F: 163, mid: 255
+DEAL::F: 204, mid: 255
+DEAL::F: 201, mid: 255
+DEAL::F: 130, mid: 255
+DEAL::C: 2.53
+DEAL::F: 207, mid: 255
+DEAL::F: 172, mid: 255
+DEAL::F: 165, mid: 255
+DEAL::F: 202, mid: 255
+DEAL::F: 200, mid: 255
+DEAL::F: 131, mid: 255
+DEAL::C: 2.54
+DEAL::F: 89, mid: 1
+DEAL::F: 206, mid: 255
+DEAL::F: 204, mid: 255
+DEAL::F: 111, mid: 255
+DEAL::F: 199, mid: 255
+DEAL::F: 132, mid: 255
+DEAL::C: 2.55
+DEAL::F: 206, mid: 255
+DEAL::F: 173, mid: 255
+DEAL::F: 202, mid: 255
+DEAL::F: 113, mid: 255
+DEAL::F: 198, mid: 255
+DEAL::F: 133, mid: 255
+DEAL::C: 2.56
+DEAL::F: 170, mid: 255
+DEAL::F: 197, mid: 255
+DEAL::F: 154, mid: 255
+DEAL::F: 193, mid: 255
+DEAL::F: 138, mid: 255
+DEAL::F: 189, mid: 255
+DEAL::C: 2.57
+DEAL::F: 197, mid: 255
+DEAL::F: 102, mid: 255
+DEAL::F: 156, mid: 255
+DEAL::F: 191, mid: 255
+DEAL::F: 139, mid: 255
+DEAL::F: 188, mid: 255
+DEAL::C: 2.58
+DEAL::F: 171, mid: 255
+DEAL::F: 196, mid: 255
+DEAL::F: 193, mid: 255
+DEAL::F: 118, mid: 255
+DEAL::F: 140, mid: 255
+DEAL::F: 187, mid: 255
+DEAL::C: 2.59
+DEAL::F: 196, mid: 255
+DEAL::F: 103, mid: 255
+DEAL::F: 191, mid: 255
+DEAL::F: 120, mid: 255
+DEAL::F: 141, mid: 255
+DEAL::F: 186, mid: 255
+DEAL::C: 2.60
+DEAL::F: 172, mid: 255
+DEAL::F: 195, mid: 255
+DEAL::F: 155, mid: 255
+DEAL::F: 192, mid: 255
+DEAL::F: 189, mid: 255
+DEAL::F: 134, mid: 255
+DEAL::C: 2.61
+DEAL::F: 195, mid: 255
+DEAL::F: 104, mid: 255
+DEAL::F: 157, mid: 255
+DEAL::F: 190, mid: 255
+DEAL::F: 188, mid: 255
+DEAL::F: 135, mid: 255
+DEAL::C: 2.62
+DEAL::F: 173, mid: 255
+DEAL::F: 194, mid: 255
+DEAL::F: 192, mid: 255
+DEAL::F: 119, mid: 255
+DEAL::F: 187, mid: 255
+DEAL::F: 136, mid: 255
+DEAL::C: 2.63
+DEAL::F: 194, mid: 255
+DEAL::F: 105, mid: 255
+DEAL::F: 190, mid: 255
+DEAL::F: 121, mid: 255
+DEAL::F: 186, mid: 255
+DEAL::F: 137, mid: 255
+$NOD
+125
+1  0.00000 0.00000 0.00000
+2  1.00000 0.00000 0.00000
+3  0.00000 1.00000 0.00000
+4  1.00000 1.00000 0.00000
+5  0.00000 0.00000 1.00000
+6  1.00000 0.00000 1.00000
+7  0.00000 1.00000 1.00000
+8  1.00000 1.00000 1.00000
+9  0.500000 0.00000 0.00000
+10  0.00000 0.500000 0.00000
+11  0.00000 0.00000 0.500000
+12  1.00000 0.500000 0.00000
+13  1.00000 0.00000 0.500000
+14  0.500000 1.00000 0.00000
+15  0.00000 1.00000 0.500000
+16  1.00000 1.00000 0.500000
+17  0.500000 0.00000 1.00000
+18  0.00000 0.500000 1.00000
+19  1.00000 0.500000 1.00000
+20  0.500000 1.00000 1.00000
+21  0.500000 0.00000 0.500000
+22  0.500000 0.500000 0.00000
+23  -0.366025 0.500000 0.500000
+24  1.00000 0.500000 0.500000
+25  0.500000 1.00000 0.500000
+26  0.500000 0.500000 1.00000
+27  0.469498 0.500000 0.500000
+28  0.250000 0.00000 0.00000
+29  0.750000 0.00000 0.00000
+30  0.00000 0.250000 0.00000
+31  0.00000 0.750000 0.00000
+32  0.00000 0.00000 0.250000
+33  0.00000 0.00000 0.750000
+34  1.00000 0.250000 0.00000
+35  1.00000 0.750000 0.00000
+36  1.00000 0.00000 0.250000
+37  1.00000 0.00000 0.750000
+38  0.250000 1.00000 0.00000
+39  0.750000 1.00000 0.00000
+40  0.00000 1.00000 0.250000
+41  0.00000 1.00000 0.750000
+42  1.00000 1.00000 0.250000
+43  1.00000 1.00000 0.750000
+44  0.250000 0.00000 1.00000
+45  0.750000 0.00000 1.00000
+46  0.00000 0.250000 1.00000
+47  0.00000 0.750000 1.00000
+48  1.00000 0.250000 1.00000
+49  1.00000 0.750000 1.00000
+50  0.250000 1.00000 1.00000
+51  0.750000 1.00000 1.00000
+52  0.250000 0.00000 0.500000
+53  0.750000 0.00000 0.500000
+54  0.500000 0.00000 0.250000
+55  0.500000 0.00000 0.750000
+56  0.500000 0.250000 0.00000
+57  0.500000 0.750000 0.00000
+58  0.250000 0.500000 0.00000
+59  0.750000 0.500000 0.00000
+60  -0.313259 0.500000 0.202326
+61  -0.313259 0.500000 0.797674
+62  -0.313259 0.202326 0.500000
+63  -0.313259 0.797674 0.500000
+64  1.00000 0.500000 0.250000
+65  1.00000 0.500000 0.750000
+66  1.00000 0.250000 0.500000
+67  1.00000 0.750000 0.500000
+68  0.250000 1.00000 0.500000
+69  0.750000 1.00000 0.500000
+70  0.500000 1.00000 0.250000
+71  0.500000 1.00000 0.750000
+72  0.500000 0.250000 1.00000
+73  0.500000 0.750000 1.00000
+74  0.250000 0.500000 1.00000
+75  0.750000 0.500000 1.00000
+76  0.484749 0.500000 0.750000
+77  0.484749 0.500000 0.250000
+78  0.734749 0.500000 0.500000
+79  0.0517362 0.500000 0.500000
+80  0.484749 0.750000 0.500000
+81  0.484749 0.250000 0.500000
+82  0.250000 0.00000 0.250000
+83  0.250000 0.00000 0.750000
+84  0.750000 0.00000 0.250000
+85  0.750000 0.00000 0.750000
+86  0.250000 0.250000 0.00000
+87  0.750000 0.250000 0.00000
+88  0.250000 0.750000 0.00000
+89  0.750000 0.750000 0.00000
+90  -0.249128 0.192748 0.192748
+91  -0.249128 0.807252 0.192748
+92  -0.249128 0.192748 0.807252
+93  -0.249128 0.807252 0.807252
+94  1.00000 0.250000 0.250000
+95  1.00000 0.750000 0.250000
+96  1.00000 0.250000 0.750000
+97  1.00000 0.750000 0.750000
+98  0.250000 1.00000 0.250000
+99  0.250000 1.00000 0.750000
+100  0.750000 1.00000 0.250000
+101  0.750000 1.00000 0.750000
+102  0.250000 0.250000 1.00000
+103  0.750000 0.250000 1.00000
+104  0.250000 0.750000 1.00000
+105  0.750000 0.750000 1.00000
+106  0.742374 0.750000 0.500000
+107  0.126447 0.758939 0.500000
+108  0.742374 0.250000 0.500000
+109  0.126447 0.241061 0.500000
+110  0.742374 0.500000 0.750000
+111  0.742374 0.500000 0.250000
+112  0.126447 0.500000 0.758939
+113  0.126447 0.500000 0.241061
+114  0.492374 0.750000 0.750000
+115  0.492374 0.250000 0.750000
+116  0.492374 0.750000 0.250000
+117  0.492374 0.250000 0.250000
+118  0.173732 0.242746 0.242746
+119  0.746187 0.250000 0.250000
+120  0.173732 0.757254 0.242746
+121  0.746187 0.750000 0.250000
+122  0.173732 0.242746 0.757254
+123  0.746187 0.250000 0.750000
+124  0.173732 0.757254 0.757254
+125  0.746187 0.750000 0.750000
+$ENDNOD
+$ELM
+64
+1 5 0 0 8 1 28 82 32 30 86 118 90 
+2 5 0 0 8 28 9 54 82 86 56 117 118 
+3 5 0 0 8 30 86 118 90 10 58 113 60 
+4 5 0 0 8 86 56 117 118 58 22 77 113 
+5 5 0 0 8 32 82 52 11 90 118 109 62 
+6 5 0 0 8 82 54 21 52 118 117 81 109 
+7 5 0 0 8 90 118 109 62 60 113 79 23 
+8 5 0 0 8 118 117 81 109 113 77 27 79 
+9 5 0 0 8 9 29 84 54 56 87 119 117 
+10 5 0 0 8 29 2 36 84 87 34 94 119 
+11 5 0 0 8 56 87 119 117 22 59 111 77 
+12 5 0 0 8 87 34 94 119 59 12 64 111 
+13 5 0 0 8 54 84 53 21 117 119 108 81 
+14 5 0 0 8 84 36 13 53 119 94 66 108 
+15 5 0 0 8 117 119 108 81 77 111 78 27 
+16 5 0 0 8 119 94 66 108 111 64 24 78 
+17 5 0 0 8 10 58 113 60 31 88 120 91 
+18 5 0 0 8 58 22 77 113 88 57 116 120 
+19 5 0 0 8 31 88 120 91 3 38 98 40 
+20 5 0 0 8 88 57 116 120 38 14 70 98 
+21 5 0 0 8 60 113 79 23 91 120 107 63 
+22 5 0 0 8 113 77 27 79 120 116 80 107 
+23 5 0 0 8 91 120 107 63 40 98 68 15 
+24 5 0 0 8 120 116 80 107 98 70 25 68 
+25 5 0 0 8 22 59 111 77 57 89 121 116 
+26 5 0 0 8 59 12 64 111 89 35 95 121 
+27 5 0 0 8 57 89 121 116 14 39 100 70 
+28 5 0 0 8 89 35 95 121 39 4 42 100 
+29 5 0 0 8 77 111 78 27 116 121 106 80 
+30 5 0 0 8 111 64 24 78 121 95 67 106 
+31 5 0 0 8 116 121 106 80 70 100 69 25 
+32 5 0 0 8 121 95 67 106 100 42 16 69 
+33 5 0 0 8 11 52 83 33 62 109 122 92 
+34 5 0 0 8 52 21 55 83 109 81 115 122 
+35 5 0 0 8 62 109 122 92 23 79 112 61 
+36 5 0 0 8 109 81 115 122 79 27 76 112 
+37 5 0 0 8 33 83 44 5 92 122 102 46 
+38 5 0 0 8 83 55 17 44 122 115 72 102 
+39 5 0 0 8 92 122 102 46 61 112 74 18 
+40 5 0 0 8 122 115 72 102 112 76 26 74 
+41 5 0 0 8 21 53 85 55 81 108 123 115 
+42 5 0 0 8 53 13 37 85 108 66 96 123 
+43 5 0 0 8 81 108 123 115 27 78 110 76 
+44 5 0 0 8 108 66 96 123 78 24 65 110 
+45 5 0 0 8 55 85 45 17 115 123 103 72 
+46 5 0 0 8 85 37 6 45 123 96 48 103 
+47 5 0 0 8 115 123 103 72 76 110 75 26 
+48 5 0 0 8 123 96 48 103 110 65 19 75 
+49 5 0 0 8 23 79 112 61 63 107 124 93 
+50 5 0 0 8 79 27 76 112 107 80 114 124 
+51 5 0 0 8 63 107 124 93 15 68 99 41 
+52 5 0 0 8 107 80 114 124 68 25 71 99 
+53 5 0 0 8 61 112 74 18 93 124 104 47 
+54 5 0 0 8 112 76 26 74 124 114 73 104 
+55 5 0 0 8 93 124 104 47 41 99 50 7 
+56 5 0 0 8 124 114 73 104 99 71 20 50 
+57 5 0 0 8 27 78 110 76 80 106 125 114 
+58 5 0 0 8 78 24 65 110 106 67 97 125 
+59 5 0 0 8 80 106 125 114 25 69 101 71 
+60 5 0 0 8 106 67 97 125 69 16 43 101 
+61 5 0 0 8 76 110 75 26 114 125 105 73 
+62 5 0 0 8 110 65 19 75 125 97 49 105 
+63 5 0 0 8 114 125 105 73 71 101 51 20 
+64 5 0 0 8 125 97 49 105 101 43 8 51 
+$ENDELM

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.