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