*
* @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>
*
--- /dev/null
+// ---------------------------------------------------------------------
+// $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
+ */
* @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.
*/
*/
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
template <int, int, int> class TriaAccessor;
template <int spacedim> class TriaAccessor<0,1,spacedim>;
+
namespace internal
{
namespace Triangulation
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
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
virtual
void
create_notification (const Triangulation<dim, spacedim> &tria);
- };
+ };
/**
* A structure that is used as an
*
* @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,
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.
*/
*/
/*@{*/
/**
- * 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 ();
/** @} */
/** @{ */
/**
- * 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
*/
*/
/*@{*/
/**
- * 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);
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;
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;
/*@}*/
*/
/*@{*/
/**
- * 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);
/*@}*/
*/
/*@{*/
/**
- * 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;
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;
/**
- * 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;
/*@}*/
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;
/*@}*/
/*@{*/
/**
- * 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;
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;
/*@}*/
/*@{*/
/**
- * 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,
*/
/*@{*/
/**
- * 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
*/
*/
DeclException0 (ExcFacesHaveNoLevel);
/**
- * The triangulation level you
- * accessed is empty.
+ * The triangulation level you accessed is empty.
*
* @ingroup Exceptions
*/
<< "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,
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,
*/
/*@{*/
/**
- * 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;
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;
/*@{*/
/**
- * 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;
/*@}*/
/*@{
*/
/**
- * 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;
/*@{
*/
/**
- * 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;
/**
- * 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
vertices[i] = numbers::invalid_unsigned_int;
material_id = 0;
+
+ // And the manifold to be invalid
+ manifold_id = numbers::invalid_manifold_id;
}
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;
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;
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
* 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
*/
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
*/
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
/**
* @}
*/
+/**
+ * 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
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
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());
+ }
}
}
+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
}
+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
+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
#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
* @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:
/**
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);
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);
};
* @author Markus Bü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,
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:
/**
* 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;
};
* 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:
/**
*/
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.
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;
+
};
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;
};
* @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> ¢er = 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;
};
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.
* <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:
/**
*/
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.
*/
/* -------------- 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
*/
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
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;
}
// 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
// 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,
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
/
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
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
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);
// 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;
+ }
}
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);
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
ExcInteriorLineCantBeBoundary());
line->set_boundary_indicator (boundary_line->boundary_id);
+ line->set_manifold_id (boundary_line->manifold_id);
}
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);
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);
}
/////////////////////////////////////////
// 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
"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);
}
"if they carry the same boundary indicator."));
quad->set_boundary_indicator (boundary_quad->boundary_id);
+ quad->set_manifold_id (boundary_quad->manifold_id);
}
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();
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();
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)
// 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)
::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>
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());
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
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
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
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
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();
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();
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();
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
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
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
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
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
// 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)
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);
:
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 "
(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;
}
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);
}
+
+
template <int dim, int spacedim>
std::vector<types::boundary_id>
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;
+}
/*-----------------------------------------------------------------*/
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());
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
vertices.clear ();
vertices_used.clear ();
- boundary.clear();
+ manifold.clear();
number_cache = internal::Triangulation::NumberCache<dim>();
}
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);
{
#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
}
#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>
}
+// 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> -----------------------*/
// 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)
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);
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()));
}
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()));
}
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
used.clear();
user_flags.clear();
boundary_or_material_id.clear();
+ manifold_id.clear();
user_data.clear();
user_data_type = data_unknown;
}
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));
}
--- /dev/null
+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()
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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
--- /dev/null
+//---------------------------- 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;
+}
+
--- /dev/null
+
+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