From 385dfedb5ee12e191a312d4351fa38b2d1f0a2d4 Mon Sep 17 00:00:00 2001 From: Luca Heltai Date: Tue, 27 Aug 2019 15:06:47 +0200 Subject: [PATCH] Added GridGenerator::generate_from_name_and_arguments --- doc/news/changes/minor/20190827LucaHeltai | 5 + include/deal.II/base/mutable_bind.h | 11 +- include/deal.II/grid/grid_generator.h | 43 + source/grid/CMakeLists.txt | 2 + source/grid/grid_generator_from_name.cc | 367 ++++++ source/grid/grid_generator_from_name.inst.in | 30 + .../vector_tools_project_qpmf.inst.in | 2 +- ...rid_generator_from_name_and_argument_01.cc | 71 + ...generator_from_name_and_argument_01.output | 1174 +++++++++++++++++ 9 files changed, 1700 insertions(+), 5 deletions(-) create mode 100644 doc/news/changes/minor/20190827LucaHeltai create mode 100644 source/grid/grid_generator_from_name.cc create mode 100644 source/grid/grid_generator_from_name.inst.in create mode 100644 tests/grid_generator_from_name_and_argument_01.cc create mode 100644 tests/grid_generator_from_name_and_argument_01.output diff --git a/doc/news/changes/minor/20190827LucaHeltai b/doc/news/changes/minor/20190827LucaHeltai new file mode 100644 index 0000000000..dd0c86b8bf --- /dev/null +++ b/doc/news/changes/minor/20190827LucaHeltai @@ -0,0 +1,5 @@ +New: Added a GridGenerator::generate_from_name_and_arguments() that leverages the MutableBind class +to parse two strings, and generate a grid from them interpreting one as a GridGenerator function +name to call, and the other as a tuple of arguments to pass to the function. +
+(Luca Heltai, 2019/08/27) diff --git a/include/deal.II/base/mutable_bind.h b/include/deal.II/base/mutable_bind.h index eb0824d4a7..8abbaf6d1a 100644 --- a/include/deal.II/base/mutable_bind.h +++ b/include/deal.II/base/mutable_bind.h @@ -229,7 +229,8 @@ namespace Utilities FunctionType function, FunctionArgs &&... arguments) : function(function) - , arguments(std::make_tuple(std::move(arguments)...)){}; + , arguments(std::make_tuple(std::move(arguments)...)) + {} @@ -238,14 +239,16 @@ namespace Utilities MutableBind::MutableBind(FunctionType function, TupleType && arguments) : function(function) - , arguments(std::move(arguments)){}; + , arguments(std::move(arguments)) + {} template template MutableBind::MutableBind(FunctionType function) - : function(function){}; + : function(function) + {} @@ -296,7 +299,7 @@ namespace Utilities { return MutableBind(function, std::move(arguments)...); - }; + } diff --git a/include/deal.II/grid/grid_generator.h b/include/deal.II/grid/grid_generator.h index cb93c4f2b0..c8ffbbbad4 100644 --- a/include/deal.II/grid/grid_generator.h +++ b/include/deal.II/grid/grid_generator.h @@ -1328,6 +1328,49 @@ namespace GridGenerator const double R, const double r); + /** + * Call one of the other GridGenerator functions, parsing the name of the + * function to call from the string @p grid_generator_function_name, and + * the arguments to the function from the string + * @p grid_generator_function_arguments. + * + * The string that supplies the arguments is passed to the function + * Patterns::Tools::Convert::to_value(), where `TupleType` here is + * a tuple containing **all** the arguments of the GridGenerator function, + * including all optional arguments. + * + * An example usage of this function is given by: + * @code + * GridGenerator::generate_from_name_and_arguments( + * tria, + * "hyper_ball", + * "0.0, 0.0 : 1 : false"); + * @endcode + * Here, the colon separates the function arguments, and the comma separates + * the coordinates of a Point<2> argument. + * + * According to the arity of the `TupleType`, the arguments of the function + * may be separated by different separators (see the documentation of + * Patterns::Tuple for the details of how the conversion is + * performed). If a wrong format is used, an exception is thrown, and the + * expected format is output as an error message. + * + * All GridGenerator functions are supported. If you find some that are + * missing, please open an issue on GitHub. + * + * @param tria The triangulation to be worked on + * @param grid_generator_function_name The name of the function to call + * @param grid_generator_function_arguments The arguments of the function, in + * the format of a tuple-convertible string + * + * @author Luca Heltai, 2019. + */ + template + void + generate_from_name_and_arguments( + Triangulation &tria, + const std::string & grid_generator_function_name, + const std::string & grid_generator_function_arguments); ///@} /** diff --git a/source/grid/CMakeLists.txt b/source/grid/CMakeLists.txt index b4aebcc298..d23cd2d9fc 100644 --- a/source/grid/CMakeLists.txt +++ b/source/grid/CMakeLists.txt @@ -18,6 +18,7 @@ INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) SET(_unity_include_src cell_id.cc grid_generator.cc + grid_generator_from_name.cc grid_in.cc grid_out.cc grid_refinement.cc @@ -51,6 +52,7 @@ SETUP_SOURCE_LIST("${_unity_include_src}" SET(_inst cell_id.inst.in grid_generator.inst.in + grid_generator_from_name.inst.in grid_in.inst.in grid_out.inst.in grid_refinement.inst.in diff --git a/source/grid/grid_generator_from_name.cc b/source/grid/grid_generator_from_name.cc new file mode 100644 index 0000000000..693b8c1ab2 --- /dev/null +++ b/source/grid/grid_generator_from_name.cc @@ -0,0 +1,367 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include + +DEAL_II_NAMESPACE_OPEN + +namespace GridGenerator +{ + namespace + { + /** + * Given a GridGenerator function pointer, a string containig a text + * version of the function arguments and an empty Triangulation, calls the + * corresponding function, after parsing the arguments from the given + * string. + */ + template + void + parse_and_create(void (*generator)(Triangulation &, + Arguments...), + const std::string & arguments, + Triangulation &tria) + { + std::function wrapper = + [&tria, &generator](Arguments... args) { generator(tria, args...); }; + auto bound_function = Utilities::mutable_bind(wrapper); + bound_function.parse_arguments(arguments); + bound_function(); + } + + + /** + * Create grids that only exist for codimension zero combinations. + * + * Return true if a grid was actually generated, false otherwise. + */ + template + typename std::enable_if::type + generate_codimension_zero_grid(const std::string &, + const std::string &, + Triangulation &) + { + return false; + } + + /** + * Create grids that only exist for codimension zero combinations. + * + * Return true if a grid was actually generated, false otherwise. + */ + template + bool + generate_codimension_zero_grid(const std::string & name, + const std::string & arguments, + Triangulation &tria) + { + if (name == "simplex") + parse_and_create> &>(simplex, + arguments, + tria); + else if (name == "subdivided_hyper_rectangle") + { + // subdivided_hyper_rectangle is polymorphic, and can be called with + // different sets of arguments. We support two of these function + // calls. We try the first one, and if parsing fails, we go to the + // second one. + try + { + parse_and_create &, + const Point &, + const Point &, + bool>(subdivided_hyper_rectangle, + arguments, + tria); + } + catch (Patterns::Tools::ExcNoMatch) + { + parse_and_create> &, + const Point &, + const Point &, + bool>(subdivided_hyper_rectangle, + arguments, + tria); + } + } + else if (name == "plate_with_a_hole") + parse_and_create, + types::manifold_id, + types::manifold_id, + double, + unsigned int, + bool>(plate_with_a_hole, arguments, tria); + else if (name == "channel_with_cylinder") + parse_and_create( + channel_with_cylinder, arguments, tria); + + else if (name == "enclosed_hyper_cube") + parse_and_create( + enclosed_hyper_cube, arguments, tria); + + else if (name == "hyper_ball") + parse_and_create &, double, bool>(hyper_ball, + arguments, + tria); + + else if (name == "quarter_hyper_ball") + parse_and_create &, double>( + quarter_hyper_ball, arguments, tria); + + else if (name == "half_hyper_ball") + parse_and_create &, double>(half_hyper_ball, + arguments, + tria); + + else if (name == "cylinder") + parse_and_create(cylinder, arguments, tria); + + else if (name == "truncated_cone") + parse_and_create(truncated_cone, + arguments, + tria); + + else if (name == "hyper_L") + parse_and_create(hyper_L, + arguments, + tria); + + else if (name == "hyper_cube_slit") + parse_and_create(hyper_cube_slit, + arguments, + tria); + + else if (name == "hyper_shell") + parse_and_create &, + double, + double, + unsigned int, + bool>(hyper_shell, arguments, tria); + + else if (name == "half_hyper_shell") + parse_and_create &, + double, + double, + unsigned int, + bool>(half_hyper_shell, arguments, tria); + + else if (name == "quarter_hyper_shell") + parse_and_create &, + double, + double, + unsigned int, + bool>(quarter_hyper_shell, arguments, tria); + + else if (name == "cylinder_shell") + parse_and_create(cylinder_shell, arguments, tria); + + else if (name == "hyper_cube_with_cylindrical_hole") + parse_and_create( + hyper_cube_with_cylindrical_hole, arguments, tria); + + else if (name == "concentric_hyper_shells") + parse_and_create &, + double, + double, + unsigned int, + double, + unsigned int, + bool>(concentric_hyper_shells, arguments, tria); + else + return false; + + return true; + } + + + /** + * Create grids that only exist for codimension one combinations. + * + * Return true if a grid was actually generated, false otherwise. + */ + template + typename std::enable_if::type + generate_codimension_one_grid(const std::string &, + const std::string &, + Triangulation &) + { + return false; + } + + /** + * Create grids that only exist for codimension one combinations. + * + * Return true if a grid was actually generated, false otherwise. + */ + template + bool + generate_codimension_one_grid(const std::string & name, + const std::string & arguments, + Triangulation &tria) + { + if (name == "hyper_sphere") + parse_and_create &, double>( + hyper_sphere, arguments, tria); + else + return false; + return true; + } + + /** + * Methods only implemented for special combinations of dim and spacedim. + * + * Return true if a grid was actually generated, false otherwise. + */ + template + bool + generate_special(const std::string &, + const std::string &, + Triangulation &) + { + return false; + } + + /** + * Methods implemented only for Triangulation<3,3>. + * + * Return true if a grid was actually generated, false otherwise. + */ + bool + generate_special(const std::string & name, + const std::string & arguments, + Triangulation<3, 3> &tria) + { + if (name == "moebius") + parse_and_create<3, 3, unsigned int, unsigned int, double, double>( + moebius, arguments, tria); + else if (name == "torus") + parse_and_create<3, 3, double, double, unsigned int>(torus, + arguments, + tria); + else + { + return false; + } + return true; + } + + /** + * Methods implemented only for Triangulation<2,3>. + * + * Return true if a grid was actually generated, false otherwise. + */ + bool + generate_special(const std::string & name, + const std::string & arguments, + Triangulation<2, 3> &tria) + { + if (name == "torus") + parse_and_create<2, 3, double, double, unsigned int>(torus, + arguments, + tria); + else + { + return false; + } + return true; + } + } // namespace + + + + template + void + generate_from_name_and_arguments(Triangulation &tria, + const std::string & name, + const std::string & arguments) + { + // We begin with all function calls that are implemented for all + // combinations of dim and spacedim. + if (name == "hyper_cube") + parse_and_create(hyper_cube, + arguments, + tria); + else if (name == "subdivided_hyper_cube") + parse_and_create( + subdivided_hyper_cube, arguments, tria); + else if (name == "hyper_rectangle") + parse_and_create &, + const Point &, + bool>(hyper_rectangle, arguments, tria); + else if (name == "cheese") + parse_and_create &>( + cheese, arguments, tria); + else if (name == "general_cell") + parse_and_create> &, + bool>(general_cell, arguments, tria); + else if (name == "hyper_cross") + parse_and_create &, bool>( + hyper_cross, arguments, tria); + // If none of the above worked, than we try with more specific function + // calls. First we try to call functions that are only implemented when + // dim == spacedim, then when dim == spacedim-1, and lastly, we try to see + // if the name, dim, and spacedim match some of the very special grid + // generator functions, like torus, moebius, etc. + // + // If one of the function call succeeds, we skip the rest and return. + else if (generate_codimension_zero_grid(name, arguments, tria)) + {} + else if (generate_codimension_one_grid(name, arguments, tria)) + {} + else if (generate_special(name, arguments, tria)) + {} + else + // If we got here, we really have no idea what grid the user wants to + // generate. + AssertThrow(false, + ExcMessage(name + "(" + arguments + ") not implemented")); + } +} // namespace GridGenerator + +#include "grid_generator_from_name.inst" + +DEAL_II_NAMESPACE_CLOSE diff --git a/source/grid/grid_generator_from_name.inst.in b/source/grid/grid_generator_from_name.inst.in new file mode 100644 index 0000000000..fa209b071d --- /dev/null +++ b/source/grid/grid_generator_from_name.inst.in @@ -0,0 +1,30 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS) + { + namespace GridGenerator + \{ +#if deal_II_dimension <= deal_II_space_dimension + template void + generate_from_name_and_arguments( + Triangulation &, + const std::string &, + const std::string &); +#endif + \} + } diff --git a/source/numerics/vector_tools_project_qpmf.inst.in b/source/numerics/vector_tools_project_qpmf.inst.in index 12526638f1..08699b2c64 100644 --- a/source/numerics/vector_tools_project_qpmf.inst.in +++ b/source/numerics/vector_tools_project_qpmf.inst.in @@ -46,4 +46,4 @@ for (VEC : REAL_NONBLOCK_VECTORS; deal_II_dimension : DIMENSIONS) \} - } \ No newline at end of file + } diff --git a/tests/grid_generator_from_name_and_argument_01.cc b/tests/grid_generator_from_name_and_argument_01.cc new file mode 100644 index 0000000000..058d15b61c --- /dev/null +++ b/tests/grid_generator_from_name_and_argument_01.cc @@ -0,0 +1,71 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +// Test GridGenerator::generate_from_name_and_arguments. + +#include + +#include +#include +#include + +#include "../tests.h" + +template +void +test(const std::string &name, const std::string &arguments) +{ + Triangulation tria; + + deallog << "Generating Triangulation<" << dim << ", " << spacedim + << "> : " << name << "(" << arguments << ")" << std::endl; + + GridGenerator::generate_from_name_and_arguments(tria, name, arguments); + + GridOut go; + go.write_msh(tria, deallog.get_file_stream()); + + std::ofstream ofile(name + "_" + std::to_string(dim) + "_" + + std::to_string(spacedim) + ".msh"); + go.write_msh(tria, ofile); +} + + +int +main() +{ + initlog(); + + test<2, 2>("cheese", "3, 2"); + test<2, 3>("cheese", "3, 2"); + test<3, 3>("cheese", "4, 3, 2"); + + test<1, 1>("general_cell", "0; 1 : true"); + test<1, 2>("general_cell", "0,0 ; 1,0 : true"); + test<1, 3>("general_cell", "0,0,0; 1,0,0: true"); + + test<2, 2>("general_cell", "0,0; 1,0; 0,1; 1,1: true"); + test<2, 3>("general_cell", "0,0,0; 1,0,0; 0,1,0; 1,1,0: true"); + test<3, 3>("general_cell", + "0,0,0; 1,0,0; 0,1,0; 1,1,0; " + "0,0,1; 1,0,1; 0,1,1; 1,1,1: true"); + + test<1, 1>("hyper_cube", "0: 1: true"); + test<1, 2>("hyper_cube", "0: 1: true"); + test<1, 3>("hyper_cube", "0: 1: true"); + test<2, 2>("hyper_cube", "0: 1: true"); + test<2, 3>("hyper_cube", "0: 1: true"); + test<3, 3>("hyper_cube", "0: 1: true"); +} diff --git a/tests/grid_generator_from_name_and_argument_01.output b/tests/grid_generator_from_name_and_argument_01.output new file mode 100644 index 0000000000..d0b3e8bb74 --- /dev/null +++ b/tests/grid_generator_from_name_and_argument_01.output @@ -0,0 +1,1174 @@ + +DEAL::Generating Triangulation<2, 2> : cheese(3, 2) +$NOD +48 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +3 2.00000 0.00000 0 +4 3.00000 0.00000 0 +5 4.00000 0.00000 0 +6 5.00000 0.00000 0 +7 6.00000 0.00000 0 +8 7.00000 0.00000 0 +9 0.00000 1.00000 0 +10 1.00000 1.00000 0 +11 2.00000 1.00000 0 +12 3.00000 1.00000 0 +13 4.00000 1.00000 0 +14 5.00000 1.00000 0 +15 6.00000 1.00000 0 +16 7.00000 1.00000 0 +17 0.00000 2.00000 0 +18 1.00000 2.00000 0 +19 2.00000 2.00000 0 +20 3.00000 2.00000 0 +21 4.00000 2.00000 0 +22 5.00000 2.00000 0 +23 6.00000 2.00000 0 +24 7.00000 2.00000 0 +25 0.00000 3.00000 0 +26 1.00000 3.00000 0 +27 2.00000 3.00000 0 +28 3.00000 3.00000 0 +29 4.00000 3.00000 0 +30 5.00000 3.00000 0 +31 6.00000 3.00000 0 +32 7.00000 3.00000 0 +33 0.00000 4.00000 0 +34 1.00000 4.00000 0 +35 2.00000 4.00000 0 +36 3.00000 4.00000 0 +37 4.00000 4.00000 0 +38 5.00000 4.00000 0 +39 6.00000 4.00000 0 +40 7.00000 4.00000 0 +41 0.00000 5.00000 0 +42 1.00000 5.00000 0 +43 2.00000 5.00000 0 +44 3.00000 5.00000 0 +45 4.00000 5.00000 0 +46 5.00000 5.00000 0 +47 6.00000 5.00000 0 +48 7.00000 5.00000 0 +$ENDNOD +$ELM +29 +1 3 0 0 4 1 2 10 9 +2 3 0 0 4 2 3 11 10 +3 3 0 0 4 3 4 12 11 +4 3 0 0 4 4 5 13 12 +5 3 0 0 4 5 6 14 13 +6 3 0 0 4 6 7 15 14 +7 3 0 0 4 7 8 16 15 +8 3 0 0 4 9 10 18 17 +9 3 0 0 4 11 12 20 19 +10 3 0 0 4 13 14 22 21 +11 3 0 0 4 15 16 24 23 +12 3 0 0 4 17 18 26 25 +13 3 0 0 4 18 19 27 26 +14 3 0 0 4 19 20 28 27 +15 3 0 0 4 20 21 29 28 +16 3 0 0 4 21 22 30 29 +17 3 0 0 4 22 23 31 30 +18 3 0 0 4 23 24 32 31 +19 3 0 0 4 25 26 34 33 +20 3 0 0 4 27 28 36 35 +21 3 0 0 4 29 30 38 37 +22 3 0 0 4 31 32 40 39 +23 3 0 0 4 33 34 42 41 +24 3 0 0 4 34 35 43 42 +25 3 0 0 4 35 36 44 43 +26 3 0 0 4 36 37 45 44 +27 3 0 0 4 37 38 46 45 +28 3 0 0 4 38 39 47 46 +29 3 0 0 4 39 40 48 47 +$ENDELM +DEAL::Generating Triangulation<2, 3> : cheese(3, 2) +$NOD +48 +1 0.00000 0.00000 0.00000 +2 1.00000 0.00000 0.00000 +3 2.00000 0.00000 0.00000 +4 3.00000 0.00000 0.00000 +5 4.00000 0.00000 0.00000 +6 5.00000 0.00000 0.00000 +7 6.00000 0.00000 0.00000 +8 7.00000 0.00000 0.00000 +9 0.00000 1.00000 0.00000 +10 1.00000 1.00000 0.00000 +11 2.00000 1.00000 0.00000 +12 3.00000 1.00000 0.00000 +13 4.00000 1.00000 0.00000 +14 5.00000 1.00000 0.00000 +15 6.00000 1.00000 0.00000 +16 7.00000 1.00000 0.00000 +17 0.00000 2.00000 0.00000 +18 1.00000 2.00000 0.00000 +19 2.00000 2.00000 0.00000 +20 3.00000 2.00000 0.00000 +21 4.00000 2.00000 0.00000 +22 5.00000 2.00000 0.00000 +23 6.00000 2.00000 0.00000 +24 7.00000 2.00000 0.00000 +25 0.00000 3.00000 0.00000 +26 1.00000 3.00000 0.00000 +27 2.00000 3.00000 0.00000 +28 3.00000 3.00000 0.00000 +29 4.00000 3.00000 0.00000 +30 5.00000 3.00000 0.00000 +31 6.00000 3.00000 0.00000 +32 7.00000 3.00000 0.00000 +33 0.00000 4.00000 0.00000 +34 1.00000 4.00000 0.00000 +35 2.00000 4.00000 0.00000 +36 3.00000 4.00000 0.00000 +37 4.00000 4.00000 0.00000 +38 5.00000 4.00000 0.00000 +39 6.00000 4.00000 0.00000 +40 7.00000 4.00000 0.00000 +41 0.00000 5.00000 0.00000 +42 1.00000 5.00000 0.00000 +43 2.00000 5.00000 0.00000 +44 3.00000 5.00000 0.00000 +45 4.00000 5.00000 0.00000 +46 5.00000 5.00000 0.00000 +47 6.00000 5.00000 0.00000 +48 7.00000 5.00000 0.00000 +$ENDNOD +$ELM +29 +1 3 0 0 4 1 2 10 9 +2 3 0 0 4 2 3 11 10 +3 3 0 0 4 3 4 12 11 +4 3 0 0 4 4 5 13 12 +5 3 0 0 4 5 6 14 13 +6 3 0 0 4 6 7 15 14 +7 3 0 0 4 7 8 16 15 +8 3 0 0 4 9 10 18 17 +9 3 0 0 4 11 12 20 19 +10 3 0 0 4 13 14 22 21 +11 3 0 0 4 15 16 24 23 +12 3 0 0 4 17 18 26 25 +13 3 0 0 4 18 19 27 26 +14 3 0 0 4 19 20 28 27 +15 3 0 0 4 20 21 29 28 +16 3 0 0 4 21 22 30 29 +17 3 0 0 4 22 23 31 30 +18 3 0 0 4 23 24 32 31 +19 3 0 0 4 25 26 34 33 +20 3 0 0 4 27 28 36 35 +21 3 0 0 4 29 30 38 37 +22 3 0 0 4 31 32 40 39 +23 3 0 0 4 33 34 42 41 +24 3 0 0 4 34 35 43 42 +25 3 0 0 4 35 36 44 43 +26 3 0 0 4 36 37 45 44 +27 3 0 0 4 37 38 46 45 +28 3 0 0 4 38 39 47 46 +29 3 0 0 4 39 40 48 47 +$ENDELM +DEAL::Generating Triangulation<3, 3> : cheese(4, 3, 2) +$NOD +480 +1 0.00000 0.00000 0.00000 +2 1.00000 0.00000 0.00000 +3 2.00000 0.00000 0.00000 +4 3.00000 0.00000 0.00000 +5 4.00000 0.00000 0.00000 +6 5.00000 0.00000 0.00000 +7 6.00000 0.00000 0.00000 +8 7.00000 0.00000 0.00000 +9 8.00000 0.00000 0.00000 +10 9.00000 0.00000 0.00000 +11 0.00000 1.00000 0.00000 +12 1.00000 1.00000 0.00000 +13 2.00000 1.00000 0.00000 +14 3.00000 1.00000 0.00000 +15 4.00000 1.00000 0.00000 +16 5.00000 1.00000 0.00000 +17 6.00000 1.00000 0.00000 +18 7.00000 1.00000 0.00000 +19 8.00000 1.00000 0.00000 +20 9.00000 1.00000 0.00000 +21 0.00000 2.00000 0.00000 +22 1.00000 2.00000 0.00000 +23 2.00000 2.00000 0.00000 +24 3.00000 2.00000 0.00000 +25 4.00000 2.00000 0.00000 +26 5.00000 2.00000 0.00000 +27 6.00000 2.00000 0.00000 +28 7.00000 2.00000 0.00000 +29 8.00000 2.00000 0.00000 +30 9.00000 2.00000 0.00000 +31 0.00000 3.00000 0.00000 +32 1.00000 3.00000 0.00000 +33 2.00000 3.00000 0.00000 +34 3.00000 3.00000 0.00000 +35 4.00000 3.00000 0.00000 +36 5.00000 3.00000 0.00000 +37 6.00000 3.00000 0.00000 +38 7.00000 3.00000 0.00000 +39 8.00000 3.00000 0.00000 +40 9.00000 3.00000 0.00000 +41 0.00000 4.00000 0.00000 +42 1.00000 4.00000 0.00000 +43 2.00000 4.00000 0.00000 +44 3.00000 4.00000 0.00000 +45 4.00000 4.00000 0.00000 +46 5.00000 4.00000 0.00000 +47 6.00000 4.00000 0.00000 +48 7.00000 4.00000 0.00000 +49 8.00000 4.00000 0.00000 +50 9.00000 4.00000 0.00000 +51 0.00000 5.00000 0.00000 +52 1.00000 5.00000 0.00000 +53 2.00000 5.00000 0.00000 +54 3.00000 5.00000 0.00000 +55 4.00000 5.00000 0.00000 +56 5.00000 5.00000 0.00000 +57 6.00000 5.00000 0.00000 +58 7.00000 5.00000 0.00000 +59 8.00000 5.00000 0.00000 +60 9.00000 5.00000 0.00000 +61 0.00000 6.00000 0.00000 +62 1.00000 6.00000 0.00000 +63 2.00000 6.00000 0.00000 +64 3.00000 6.00000 0.00000 +65 4.00000 6.00000 0.00000 +66 5.00000 6.00000 0.00000 +67 6.00000 6.00000 0.00000 +68 7.00000 6.00000 0.00000 +69 8.00000 6.00000 0.00000 +70 9.00000 6.00000 0.00000 +71 0.00000 7.00000 0.00000 +72 1.00000 7.00000 0.00000 +73 2.00000 7.00000 0.00000 +74 3.00000 7.00000 0.00000 +75 4.00000 7.00000 0.00000 +76 5.00000 7.00000 0.00000 +77 6.00000 7.00000 0.00000 +78 7.00000 7.00000 0.00000 +79 8.00000 7.00000 0.00000 +80 9.00000 7.00000 0.00000 +81 0.00000 0.00000 1.00000 +82 1.00000 0.00000 1.00000 +83 2.00000 0.00000 1.00000 +84 3.00000 0.00000 1.00000 +85 4.00000 0.00000 1.00000 +86 5.00000 0.00000 1.00000 +87 6.00000 0.00000 1.00000 +88 7.00000 0.00000 1.00000 +89 8.00000 0.00000 1.00000 +90 9.00000 0.00000 1.00000 +91 0.00000 1.00000 1.00000 +92 1.00000 1.00000 1.00000 +93 2.00000 1.00000 1.00000 +94 3.00000 1.00000 1.00000 +95 4.00000 1.00000 1.00000 +96 5.00000 1.00000 1.00000 +97 6.00000 1.00000 1.00000 +98 7.00000 1.00000 1.00000 +99 8.00000 1.00000 1.00000 +100 9.00000 1.00000 1.00000 +101 0.00000 2.00000 1.00000 +102 1.00000 2.00000 1.00000 +103 2.00000 2.00000 1.00000 +104 3.00000 2.00000 1.00000 +105 4.00000 2.00000 1.00000 +106 5.00000 2.00000 1.00000 +107 6.00000 2.00000 1.00000 +108 7.00000 2.00000 1.00000 +109 8.00000 2.00000 1.00000 +110 9.00000 2.00000 1.00000 +111 0.00000 3.00000 1.00000 +112 1.00000 3.00000 1.00000 +113 2.00000 3.00000 1.00000 +114 3.00000 3.00000 1.00000 +115 4.00000 3.00000 1.00000 +116 5.00000 3.00000 1.00000 +117 6.00000 3.00000 1.00000 +118 7.00000 3.00000 1.00000 +119 8.00000 3.00000 1.00000 +120 9.00000 3.00000 1.00000 +121 0.00000 4.00000 1.00000 +122 1.00000 4.00000 1.00000 +123 2.00000 4.00000 1.00000 +124 3.00000 4.00000 1.00000 +125 4.00000 4.00000 1.00000 +126 5.00000 4.00000 1.00000 +127 6.00000 4.00000 1.00000 +128 7.00000 4.00000 1.00000 +129 8.00000 4.00000 1.00000 +130 9.00000 4.00000 1.00000 +131 0.00000 5.00000 1.00000 +132 1.00000 5.00000 1.00000 +133 2.00000 5.00000 1.00000 +134 3.00000 5.00000 1.00000 +135 4.00000 5.00000 1.00000 +136 5.00000 5.00000 1.00000 +137 6.00000 5.00000 1.00000 +138 7.00000 5.00000 1.00000 +139 8.00000 5.00000 1.00000 +140 9.00000 5.00000 1.00000 +141 0.00000 6.00000 1.00000 +142 1.00000 6.00000 1.00000 +143 2.00000 6.00000 1.00000 +144 3.00000 6.00000 1.00000 +145 4.00000 6.00000 1.00000 +146 5.00000 6.00000 1.00000 +147 6.00000 6.00000 1.00000 +148 7.00000 6.00000 1.00000 +149 8.00000 6.00000 1.00000 +150 9.00000 6.00000 1.00000 +151 0.00000 7.00000 1.00000 +152 1.00000 7.00000 1.00000 +153 2.00000 7.00000 1.00000 +154 3.00000 7.00000 1.00000 +155 4.00000 7.00000 1.00000 +156 5.00000 7.00000 1.00000 +157 6.00000 7.00000 1.00000 +158 7.00000 7.00000 1.00000 +159 8.00000 7.00000 1.00000 +160 9.00000 7.00000 1.00000 +161 0.00000 0.00000 2.00000 +162 1.00000 0.00000 2.00000 +163 2.00000 0.00000 2.00000 +164 3.00000 0.00000 2.00000 +165 4.00000 0.00000 2.00000 +166 5.00000 0.00000 2.00000 +167 6.00000 0.00000 2.00000 +168 7.00000 0.00000 2.00000 +169 8.00000 0.00000 2.00000 +170 9.00000 0.00000 2.00000 +171 0.00000 1.00000 2.00000 +172 1.00000 1.00000 2.00000 +173 2.00000 1.00000 2.00000 +174 3.00000 1.00000 2.00000 +175 4.00000 1.00000 2.00000 +176 5.00000 1.00000 2.00000 +177 6.00000 1.00000 2.00000 +178 7.00000 1.00000 2.00000 +179 8.00000 1.00000 2.00000 +180 9.00000 1.00000 2.00000 +181 0.00000 2.00000 2.00000 +182 1.00000 2.00000 2.00000 +183 2.00000 2.00000 2.00000 +184 3.00000 2.00000 2.00000 +185 4.00000 2.00000 2.00000 +186 5.00000 2.00000 2.00000 +187 6.00000 2.00000 2.00000 +188 7.00000 2.00000 2.00000 +189 8.00000 2.00000 2.00000 +190 9.00000 2.00000 2.00000 +191 0.00000 3.00000 2.00000 +192 1.00000 3.00000 2.00000 +193 2.00000 3.00000 2.00000 +194 3.00000 3.00000 2.00000 +195 4.00000 3.00000 2.00000 +196 5.00000 3.00000 2.00000 +197 6.00000 3.00000 2.00000 +198 7.00000 3.00000 2.00000 +199 8.00000 3.00000 2.00000 +200 9.00000 3.00000 2.00000 +201 0.00000 4.00000 2.00000 +202 1.00000 4.00000 2.00000 +203 2.00000 4.00000 2.00000 +204 3.00000 4.00000 2.00000 +205 4.00000 4.00000 2.00000 +206 5.00000 4.00000 2.00000 +207 6.00000 4.00000 2.00000 +208 7.00000 4.00000 2.00000 +209 8.00000 4.00000 2.00000 +210 9.00000 4.00000 2.00000 +211 0.00000 5.00000 2.00000 +212 1.00000 5.00000 2.00000 +213 2.00000 5.00000 2.00000 +214 3.00000 5.00000 2.00000 +215 4.00000 5.00000 2.00000 +216 5.00000 5.00000 2.00000 +217 6.00000 5.00000 2.00000 +218 7.00000 5.00000 2.00000 +219 8.00000 5.00000 2.00000 +220 9.00000 5.00000 2.00000 +221 0.00000 6.00000 2.00000 +222 1.00000 6.00000 2.00000 +223 2.00000 6.00000 2.00000 +224 3.00000 6.00000 2.00000 +225 4.00000 6.00000 2.00000 +226 5.00000 6.00000 2.00000 +227 6.00000 6.00000 2.00000 +228 7.00000 6.00000 2.00000 +229 8.00000 6.00000 2.00000 +230 9.00000 6.00000 2.00000 +231 0.00000 7.00000 2.00000 +232 1.00000 7.00000 2.00000 +233 2.00000 7.00000 2.00000 +234 3.00000 7.00000 2.00000 +235 4.00000 7.00000 2.00000 +236 5.00000 7.00000 2.00000 +237 6.00000 7.00000 2.00000 +238 7.00000 7.00000 2.00000 +239 8.00000 7.00000 2.00000 +240 9.00000 7.00000 2.00000 +241 0.00000 0.00000 3.00000 +242 1.00000 0.00000 3.00000 +243 2.00000 0.00000 3.00000 +244 3.00000 0.00000 3.00000 +245 4.00000 0.00000 3.00000 +246 5.00000 0.00000 3.00000 +247 6.00000 0.00000 3.00000 +248 7.00000 0.00000 3.00000 +249 8.00000 0.00000 3.00000 +250 9.00000 0.00000 3.00000 +251 0.00000 1.00000 3.00000 +252 1.00000 1.00000 3.00000 +253 2.00000 1.00000 3.00000 +254 3.00000 1.00000 3.00000 +255 4.00000 1.00000 3.00000 +256 5.00000 1.00000 3.00000 +257 6.00000 1.00000 3.00000 +258 7.00000 1.00000 3.00000 +259 8.00000 1.00000 3.00000 +260 9.00000 1.00000 3.00000 +261 0.00000 2.00000 3.00000 +262 1.00000 2.00000 3.00000 +263 2.00000 2.00000 3.00000 +264 3.00000 2.00000 3.00000 +265 4.00000 2.00000 3.00000 +266 5.00000 2.00000 3.00000 +267 6.00000 2.00000 3.00000 +268 7.00000 2.00000 3.00000 +269 8.00000 2.00000 3.00000 +270 9.00000 2.00000 3.00000 +271 0.00000 3.00000 3.00000 +272 1.00000 3.00000 3.00000 +273 2.00000 3.00000 3.00000 +274 3.00000 3.00000 3.00000 +275 4.00000 3.00000 3.00000 +276 5.00000 3.00000 3.00000 +277 6.00000 3.00000 3.00000 +278 7.00000 3.00000 3.00000 +279 8.00000 3.00000 3.00000 +280 9.00000 3.00000 3.00000 +281 0.00000 4.00000 3.00000 +282 1.00000 4.00000 3.00000 +283 2.00000 4.00000 3.00000 +284 3.00000 4.00000 3.00000 +285 4.00000 4.00000 3.00000 +286 5.00000 4.00000 3.00000 +287 6.00000 4.00000 3.00000 +288 7.00000 4.00000 3.00000 +289 8.00000 4.00000 3.00000 +290 9.00000 4.00000 3.00000 +291 0.00000 5.00000 3.00000 +292 1.00000 5.00000 3.00000 +293 2.00000 5.00000 3.00000 +294 3.00000 5.00000 3.00000 +295 4.00000 5.00000 3.00000 +296 5.00000 5.00000 3.00000 +297 6.00000 5.00000 3.00000 +298 7.00000 5.00000 3.00000 +299 8.00000 5.00000 3.00000 +300 9.00000 5.00000 3.00000 +301 0.00000 6.00000 3.00000 +302 1.00000 6.00000 3.00000 +303 2.00000 6.00000 3.00000 +304 3.00000 6.00000 3.00000 +305 4.00000 6.00000 3.00000 +306 5.00000 6.00000 3.00000 +307 6.00000 6.00000 3.00000 +308 7.00000 6.00000 3.00000 +309 8.00000 6.00000 3.00000 +310 9.00000 6.00000 3.00000 +311 0.00000 7.00000 3.00000 +312 1.00000 7.00000 3.00000 +313 2.00000 7.00000 3.00000 +314 3.00000 7.00000 3.00000 +315 4.00000 7.00000 3.00000 +316 5.00000 7.00000 3.00000 +317 6.00000 7.00000 3.00000 +318 7.00000 7.00000 3.00000 +319 8.00000 7.00000 3.00000 +320 9.00000 7.00000 3.00000 +321 0.00000 0.00000 4.00000 +322 1.00000 0.00000 4.00000 +323 2.00000 0.00000 4.00000 +324 3.00000 0.00000 4.00000 +325 4.00000 0.00000 4.00000 +326 5.00000 0.00000 4.00000 +327 6.00000 0.00000 4.00000 +328 7.00000 0.00000 4.00000 +329 8.00000 0.00000 4.00000 +330 9.00000 0.00000 4.00000 +331 0.00000 1.00000 4.00000 +332 1.00000 1.00000 4.00000 +333 2.00000 1.00000 4.00000 +334 3.00000 1.00000 4.00000 +335 4.00000 1.00000 4.00000 +336 5.00000 1.00000 4.00000 +337 6.00000 1.00000 4.00000 +338 7.00000 1.00000 4.00000 +339 8.00000 1.00000 4.00000 +340 9.00000 1.00000 4.00000 +341 0.00000 2.00000 4.00000 +342 1.00000 2.00000 4.00000 +343 2.00000 2.00000 4.00000 +344 3.00000 2.00000 4.00000 +345 4.00000 2.00000 4.00000 +346 5.00000 2.00000 4.00000 +347 6.00000 2.00000 4.00000 +348 7.00000 2.00000 4.00000 +349 8.00000 2.00000 4.00000 +350 9.00000 2.00000 4.00000 +351 0.00000 3.00000 4.00000 +352 1.00000 3.00000 4.00000 +353 2.00000 3.00000 4.00000 +354 3.00000 3.00000 4.00000 +355 4.00000 3.00000 4.00000 +356 5.00000 3.00000 4.00000 +357 6.00000 3.00000 4.00000 +358 7.00000 3.00000 4.00000 +359 8.00000 3.00000 4.00000 +360 9.00000 3.00000 4.00000 +361 0.00000 4.00000 4.00000 +362 1.00000 4.00000 4.00000 +363 2.00000 4.00000 4.00000 +364 3.00000 4.00000 4.00000 +365 4.00000 4.00000 4.00000 +366 5.00000 4.00000 4.00000 +367 6.00000 4.00000 4.00000 +368 7.00000 4.00000 4.00000 +369 8.00000 4.00000 4.00000 +370 9.00000 4.00000 4.00000 +371 0.00000 5.00000 4.00000 +372 1.00000 5.00000 4.00000 +373 2.00000 5.00000 4.00000 +374 3.00000 5.00000 4.00000 +375 4.00000 5.00000 4.00000 +376 5.00000 5.00000 4.00000 +377 6.00000 5.00000 4.00000 +378 7.00000 5.00000 4.00000 +379 8.00000 5.00000 4.00000 +380 9.00000 5.00000 4.00000 +381 0.00000 6.00000 4.00000 +382 1.00000 6.00000 4.00000 +383 2.00000 6.00000 4.00000 +384 3.00000 6.00000 4.00000 +385 4.00000 6.00000 4.00000 +386 5.00000 6.00000 4.00000 +387 6.00000 6.00000 4.00000 +388 7.00000 6.00000 4.00000 +389 8.00000 6.00000 4.00000 +390 9.00000 6.00000 4.00000 +391 0.00000 7.00000 4.00000 +392 1.00000 7.00000 4.00000 +393 2.00000 7.00000 4.00000 +394 3.00000 7.00000 4.00000 +395 4.00000 7.00000 4.00000 +396 5.00000 7.00000 4.00000 +397 6.00000 7.00000 4.00000 +398 7.00000 7.00000 4.00000 +399 8.00000 7.00000 4.00000 +400 9.00000 7.00000 4.00000 +401 0.00000 0.00000 5.00000 +402 1.00000 0.00000 5.00000 +403 2.00000 0.00000 5.00000 +404 3.00000 0.00000 5.00000 +405 4.00000 0.00000 5.00000 +406 5.00000 0.00000 5.00000 +407 6.00000 0.00000 5.00000 +408 7.00000 0.00000 5.00000 +409 8.00000 0.00000 5.00000 +410 9.00000 0.00000 5.00000 +411 0.00000 1.00000 5.00000 +412 1.00000 1.00000 5.00000 +413 2.00000 1.00000 5.00000 +414 3.00000 1.00000 5.00000 +415 4.00000 1.00000 5.00000 +416 5.00000 1.00000 5.00000 +417 6.00000 1.00000 5.00000 +418 7.00000 1.00000 5.00000 +419 8.00000 1.00000 5.00000 +420 9.00000 1.00000 5.00000 +421 0.00000 2.00000 5.00000 +422 1.00000 2.00000 5.00000 +423 2.00000 2.00000 5.00000 +424 3.00000 2.00000 5.00000 +425 4.00000 2.00000 5.00000 +426 5.00000 2.00000 5.00000 +427 6.00000 2.00000 5.00000 +428 7.00000 2.00000 5.00000 +429 8.00000 2.00000 5.00000 +430 9.00000 2.00000 5.00000 +431 0.00000 3.00000 5.00000 +432 1.00000 3.00000 5.00000 +433 2.00000 3.00000 5.00000 +434 3.00000 3.00000 5.00000 +435 4.00000 3.00000 5.00000 +436 5.00000 3.00000 5.00000 +437 6.00000 3.00000 5.00000 +438 7.00000 3.00000 5.00000 +439 8.00000 3.00000 5.00000 +440 9.00000 3.00000 5.00000 +441 0.00000 4.00000 5.00000 +442 1.00000 4.00000 5.00000 +443 2.00000 4.00000 5.00000 +444 3.00000 4.00000 5.00000 +445 4.00000 4.00000 5.00000 +446 5.00000 4.00000 5.00000 +447 6.00000 4.00000 5.00000 +448 7.00000 4.00000 5.00000 +449 8.00000 4.00000 5.00000 +450 9.00000 4.00000 5.00000 +451 0.00000 5.00000 5.00000 +452 1.00000 5.00000 5.00000 +453 2.00000 5.00000 5.00000 +454 3.00000 5.00000 5.00000 +455 4.00000 5.00000 5.00000 +456 5.00000 5.00000 5.00000 +457 6.00000 5.00000 5.00000 +458 7.00000 5.00000 5.00000 +459 8.00000 5.00000 5.00000 +460 9.00000 5.00000 5.00000 +461 0.00000 6.00000 5.00000 +462 1.00000 6.00000 5.00000 +463 2.00000 6.00000 5.00000 +464 3.00000 6.00000 5.00000 +465 4.00000 6.00000 5.00000 +466 5.00000 6.00000 5.00000 +467 6.00000 6.00000 5.00000 +468 7.00000 6.00000 5.00000 +469 8.00000 6.00000 5.00000 +470 9.00000 6.00000 5.00000 +471 0.00000 7.00000 5.00000 +472 1.00000 7.00000 5.00000 +473 2.00000 7.00000 5.00000 +474 3.00000 7.00000 5.00000 +475 4.00000 7.00000 5.00000 +476 5.00000 7.00000 5.00000 +477 6.00000 7.00000 5.00000 +478 7.00000 7.00000 5.00000 +479 8.00000 7.00000 5.00000 +480 9.00000 7.00000 5.00000 +$ENDNOD +$ELM +315 +1 5 0 0 8 1 2 82 81 11 12 92 91 +2 5 0 0 8 2 3 83 82 12 13 93 92 +3 5 0 0 8 3 4 84 83 13 14 94 93 +4 5 0 0 8 4 5 85 84 14 15 95 94 +5 5 0 0 8 5 6 86 85 15 16 96 95 +6 5 0 0 8 6 7 87 86 16 17 97 96 +7 5 0 0 8 7 8 88 87 17 18 98 97 +8 5 0 0 8 8 9 89 88 18 19 99 98 +9 5 0 0 8 9 10 90 89 19 20 100 99 +10 5 0 0 8 11 12 92 91 21 22 102 101 +11 5 0 0 8 12 13 93 92 22 23 103 102 +12 5 0 0 8 13 14 94 93 23 24 104 103 +13 5 0 0 8 14 15 95 94 24 25 105 104 +14 5 0 0 8 15 16 96 95 25 26 106 105 +15 5 0 0 8 16 17 97 96 26 27 107 106 +16 5 0 0 8 17 18 98 97 27 28 108 107 +17 5 0 0 8 18 19 99 98 28 29 109 108 +18 5 0 0 8 19 20 100 99 29 30 110 109 +19 5 0 0 8 21 22 102 101 31 32 112 111 +20 5 0 0 8 22 23 103 102 32 33 113 112 +21 5 0 0 8 23 24 104 103 33 34 114 113 +22 5 0 0 8 24 25 105 104 34 35 115 114 +23 5 0 0 8 25 26 106 105 35 36 116 115 +24 5 0 0 8 26 27 107 106 36 37 117 116 +25 5 0 0 8 27 28 108 107 37 38 118 117 +26 5 0 0 8 28 29 109 108 38 39 119 118 +27 5 0 0 8 29 30 110 109 39 40 120 119 +28 5 0 0 8 31 32 112 111 41 42 122 121 +29 5 0 0 8 32 33 113 112 42 43 123 122 +30 5 0 0 8 33 34 114 113 43 44 124 123 +31 5 0 0 8 34 35 115 114 44 45 125 124 +32 5 0 0 8 35 36 116 115 45 46 126 125 +33 5 0 0 8 36 37 117 116 46 47 127 126 +34 5 0 0 8 37 38 118 117 47 48 128 127 +35 5 0 0 8 38 39 119 118 48 49 129 128 +36 5 0 0 8 39 40 120 119 49 50 130 129 +37 5 0 0 8 41 42 122 121 51 52 132 131 +38 5 0 0 8 42 43 123 122 52 53 133 132 +39 5 0 0 8 43 44 124 123 53 54 134 133 +40 5 0 0 8 44 45 125 124 54 55 135 134 +41 5 0 0 8 45 46 126 125 55 56 136 135 +42 5 0 0 8 46 47 127 126 56 57 137 136 +43 5 0 0 8 47 48 128 127 57 58 138 137 +44 5 0 0 8 48 49 129 128 58 59 139 138 +45 5 0 0 8 49 50 130 129 59 60 140 139 +46 5 0 0 8 51 52 132 131 61 62 142 141 +47 5 0 0 8 52 53 133 132 62 63 143 142 +48 5 0 0 8 53 54 134 133 63 64 144 143 +49 5 0 0 8 54 55 135 134 64 65 145 144 +50 5 0 0 8 55 56 136 135 65 66 146 145 +51 5 0 0 8 56 57 137 136 66 67 147 146 +52 5 0 0 8 57 58 138 137 67 68 148 147 +53 5 0 0 8 58 59 139 138 68 69 149 148 +54 5 0 0 8 59 60 140 139 69 70 150 149 +55 5 0 0 8 61 62 142 141 71 72 152 151 +56 5 0 0 8 62 63 143 142 72 73 153 152 +57 5 0 0 8 63 64 144 143 73 74 154 153 +58 5 0 0 8 64 65 145 144 74 75 155 154 +59 5 0 0 8 65 66 146 145 75 76 156 155 +60 5 0 0 8 66 67 147 146 76 77 157 156 +61 5 0 0 8 67 68 148 147 77 78 158 157 +62 5 0 0 8 68 69 149 148 78 79 159 158 +63 5 0 0 8 69 70 150 149 79 80 160 159 +64 5 0 0 8 81 82 162 161 91 92 172 171 +65 5 0 0 8 82 83 163 162 92 93 173 172 +66 5 0 0 8 83 84 164 163 93 94 174 173 +67 5 0 0 8 84 85 165 164 94 95 175 174 +68 5 0 0 8 85 86 166 165 95 96 176 175 +69 5 0 0 8 86 87 167 166 96 97 177 176 +70 5 0 0 8 87 88 168 167 97 98 178 177 +71 5 0 0 8 88 89 169 168 98 99 179 178 +72 5 0 0 8 89 90 170 169 99 100 180 179 +73 5 0 0 8 91 92 172 171 101 102 182 181 +74 5 0 0 8 92 93 173 172 102 103 183 182 +75 5 0 0 8 93 94 174 173 103 104 184 183 +76 5 0 0 8 94 95 175 174 104 105 185 184 +77 5 0 0 8 95 96 176 175 105 106 186 185 +78 5 0 0 8 96 97 177 176 106 107 187 186 +79 5 0 0 8 97 98 178 177 107 108 188 187 +80 5 0 0 8 98 99 179 178 108 109 189 188 +81 5 0 0 8 99 100 180 179 109 110 190 189 +82 5 0 0 8 101 102 182 181 111 112 192 191 +83 5 0 0 8 102 103 183 182 112 113 193 192 +84 5 0 0 8 103 104 184 183 113 114 194 193 +85 5 0 0 8 104 105 185 184 114 115 195 194 +86 5 0 0 8 105 106 186 185 115 116 196 195 +87 5 0 0 8 106 107 187 186 116 117 197 196 +88 5 0 0 8 107 108 188 187 117 118 198 197 +89 5 0 0 8 108 109 189 188 118 119 199 198 +90 5 0 0 8 109 110 190 189 119 120 200 199 +91 5 0 0 8 111 112 192 191 121 122 202 201 +92 5 0 0 8 112 113 193 192 122 123 203 202 +93 5 0 0 8 113 114 194 193 123 124 204 203 +94 5 0 0 8 114 115 195 194 124 125 205 204 +95 5 0 0 8 115 116 196 195 125 126 206 205 +96 5 0 0 8 116 117 197 196 126 127 207 206 +97 5 0 0 8 117 118 198 197 127 128 208 207 +98 5 0 0 8 118 119 199 198 128 129 209 208 +99 5 0 0 8 119 120 200 199 129 130 210 209 +100 5 0 0 8 121 122 202 201 131 132 212 211 +101 5 0 0 8 122 123 203 202 132 133 213 212 +102 5 0 0 8 123 124 204 203 133 134 214 213 +103 5 0 0 8 124 125 205 204 134 135 215 214 +104 5 0 0 8 125 126 206 205 135 136 216 215 +105 5 0 0 8 126 127 207 206 136 137 217 216 +106 5 0 0 8 127 128 208 207 137 138 218 217 +107 5 0 0 8 128 129 209 208 138 139 219 218 +108 5 0 0 8 129 130 210 209 139 140 220 219 +109 5 0 0 8 131 132 212 211 141 142 222 221 +110 5 0 0 8 132 133 213 212 142 143 223 222 +111 5 0 0 8 133 134 214 213 143 144 224 223 +112 5 0 0 8 134 135 215 214 144 145 225 224 +113 5 0 0 8 135 136 216 215 145 146 226 225 +114 5 0 0 8 136 137 217 216 146 147 227 226 +115 5 0 0 8 137 138 218 217 147 148 228 227 +116 5 0 0 8 138 139 219 218 148 149 229 228 +117 5 0 0 8 139 140 220 219 149 150 230 229 +118 5 0 0 8 141 142 222 221 151 152 232 231 +119 5 0 0 8 142 143 223 222 152 153 233 232 +120 5 0 0 8 143 144 224 223 153 154 234 233 +121 5 0 0 8 144 145 225 224 154 155 235 234 +122 5 0 0 8 145 146 226 225 155 156 236 235 +123 5 0 0 8 146 147 227 226 156 157 237 236 +124 5 0 0 8 147 148 228 227 157 158 238 237 +125 5 0 0 8 148 149 229 228 158 159 239 238 +126 5 0 0 8 149 150 230 229 159 160 240 239 +127 5 0 0 8 161 162 242 241 171 172 252 251 +128 5 0 0 8 162 163 243 242 172 173 253 252 +129 5 0 0 8 163 164 244 243 173 174 254 253 +130 5 0 0 8 164 165 245 244 174 175 255 254 +131 5 0 0 8 165 166 246 245 175 176 256 255 +132 5 0 0 8 166 167 247 246 176 177 257 256 +133 5 0 0 8 167 168 248 247 177 178 258 257 +134 5 0 0 8 168 169 249 248 178 179 259 258 +135 5 0 0 8 169 170 250 249 179 180 260 259 +136 5 0 0 8 171 172 252 251 181 182 262 261 +137 5 0 0 8 172 173 253 252 182 183 263 262 +138 5 0 0 8 173 174 254 253 183 184 264 263 +139 5 0 0 8 174 175 255 254 184 185 265 264 +140 5 0 0 8 175 176 256 255 185 186 266 265 +141 5 0 0 8 176 177 257 256 186 187 267 266 +142 5 0 0 8 177 178 258 257 187 188 268 267 +143 5 0 0 8 178 179 259 258 188 189 269 268 +144 5 0 0 8 179 180 260 259 189 190 270 269 +145 5 0 0 8 181 182 262 261 191 192 272 271 +146 5 0 0 8 182 183 263 262 192 193 273 272 +147 5 0 0 8 183 184 264 263 193 194 274 273 +148 5 0 0 8 184 185 265 264 194 195 275 274 +149 5 0 0 8 185 186 266 265 195 196 276 275 +150 5 0 0 8 186 187 267 266 196 197 277 276 +151 5 0 0 8 187 188 268 267 197 198 278 277 +152 5 0 0 8 188 189 269 268 198 199 279 278 +153 5 0 0 8 189 190 270 269 199 200 280 279 +154 5 0 0 8 191 192 272 271 201 202 282 281 +155 5 0 0 8 192 193 273 272 202 203 283 282 +156 5 0 0 8 193 194 274 273 203 204 284 283 +157 5 0 0 8 194 195 275 274 204 205 285 284 +158 5 0 0 8 195 196 276 275 205 206 286 285 +159 5 0 0 8 196 197 277 276 206 207 287 286 +160 5 0 0 8 197 198 278 277 207 208 288 287 +161 5 0 0 8 198 199 279 278 208 209 289 288 +162 5 0 0 8 199 200 280 279 209 210 290 289 +163 5 0 0 8 201 202 282 281 211 212 292 291 +164 5 0 0 8 202 203 283 282 212 213 293 292 +165 5 0 0 8 203 204 284 283 213 214 294 293 +166 5 0 0 8 204 205 285 284 214 215 295 294 +167 5 0 0 8 205 206 286 285 215 216 296 295 +168 5 0 0 8 206 207 287 286 216 217 297 296 +169 5 0 0 8 207 208 288 287 217 218 298 297 +170 5 0 0 8 208 209 289 288 218 219 299 298 +171 5 0 0 8 209 210 290 289 219 220 300 299 +172 5 0 0 8 211 212 292 291 221 222 302 301 +173 5 0 0 8 212 213 293 292 222 223 303 302 +174 5 0 0 8 213 214 294 293 223 224 304 303 +175 5 0 0 8 214 215 295 294 224 225 305 304 +176 5 0 0 8 215 216 296 295 225 226 306 305 +177 5 0 0 8 216 217 297 296 226 227 307 306 +178 5 0 0 8 217 218 298 297 227 228 308 307 +179 5 0 0 8 218 219 299 298 228 229 309 308 +180 5 0 0 8 219 220 300 299 229 230 310 309 +181 5 0 0 8 221 222 302 301 231 232 312 311 +182 5 0 0 8 222 223 303 302 232 233 313 312 +183 5 0 0 8 223 224 304 303 233 234 314 313 +184 5 0 0 8 224 225 305 304 234 235 315 314 +185 5 0 0 8 225 226 306 305 235 236 316 315 +186 5 0 0 8 226 227 307 306 236 237 317 316 +187 5 0 0 8 227 228 308 307 237 238 318 317 +188 5 0 0 8 228 229 309 308 238 239 319 318 +189 5 0 0 8 229 230 310 309 239 240 320 319 +190 5 0 0 8 241 242 322 321 251 252 332 331 +191 5 0 0 8 242 243 323 322 252 253 333 332 +192 5 0 0 8 243 244 324 323 253 254 334 333 +193 5 0 0 8 244 245 325 324 254 255 335 334 +194 5 0 0 8 245 246 326 325 255 256 336 335 +195 5 0 0 8 246 247 327 326 256 257 337 336 +196 5 0 0 8 247 248 328 327 257 258 338 337 +197 5 0 0 8 248 249 329 328 258 259 339 338 +198 5 0 0 8 249 250 330 329 259 260 340 339 +199 5 0 0 8 251 252 332 331 261 262 342 341 +200 5 0 0 8 252 253 333 332 262 263 343 342 +201 5 0 0 8 253 254 334 333 263 264 344 343 +202 5 0 0 8 254 255 335 334 264 265 345 344 +203 5 0 0 8 255 256 336 335 265 266 346 345 +204 5 0 0 8 256 257 337 336 266 267 347 346 +205 5 0 0 8 257 258 338 337 267 268 348 347 +206 5 0 0 8 258 259 339 338 268 269 349 348 +207 5 0 0 8 259 260 340 339 269 270 350 349 +208 5 0 0 8 261 262 342 341 271 272 352 351 +209 5 0 0 8 262 263 343 342 272 273 353 352 +210 5 0 0 8 263 264 344 343 273 274 354 353 +211 5 0 0 8 264 265 345 344 274 275 355 354 +212 5 0 0 8 265 266 346 345 275 276 356 355 +213 5 0 0 8 266 267 347 346 276 277 357 356 +214 5 0 0 8 267 268 348 347 277 278 358 357 +215 5 0 0 8 268 269 349 348 278 279 359 358 +216 5 0 0 8 269 270 350 349 279 280 360 359 +217 5 0 0 8 271 272 352 351 281 282 362 361 +218 5 0 0 8 272 273 353 352 282 283 363 362 +219 5 0 0 8 273 274 354 353 283 284 364 363 +220 5 0 0 8 274 275 355 354 284 285 365 364 +221 5 0 0 8 275 276 356 355 285 286 366 365 +222 5 0 0 8 276 277 357 356 286 287 367 366 +223 5 0 0 8 277 278 358 357 287 288 368 367 +224 5 0 0 8 278 279 359 358 288 289 369 368 +225 5 0 0 8 279 280 360 359 289 290 370 369 +226 5 0 0 8 281 282 362 361 291 292 372 371 +227 5 0 0 8 282 283 363 362 292 293 373 372 +228 5 0 0 8 283 284 364 363 293 294 374 373 +229 5 0 0 8 284 285 365 364 294 295 375 374 +230 5 0 0 8 285 286 366 365 295 296 376 375 +231 5 0 0 8 286 287 367 366 296 297 377 376 +232 5 0 0 8 287 288 368 367 297 298 378 377 +233 5 0 0 8 288 289 369 368 298 299 379 378 +234 5 0 0 8 289 290 370 369 299 300 380 379 +235 5 0 0 8 291 292 372 371 301 302 382 381 +236 5 0 0 8 292 293 373 372 302 303 383 382 +237 5 0 0 8 293 294 374 373 303 304 384 383 +238 5 0 0 8 294 295 375 374 304 305 385 384 +239 5 0 0 8 295 296 376 375 305 306 386 385 +240 5 0 0 8 296 297 377 376 306 307 387 386 +241 5 0 0 8 297 298 378 377 307 308 388 387 +242 5 0 0 8 298 299 379 378 308 309 389 388 +243 5 0 0 8 299 300 380 379 309 310 390 389 +244 5 0 0 8 301 302 382 381 311 312 392 391 +245 5 0 0 8 302 303 383 382 312 313 393 392 +246 5 0 0 8 303 304 384 383 313 314 394 393 +247 5 0 0 8 304 305 385 384 314 315 395 394 +248 5 0 0 8 305 306 386 385 315 316 396 395 +249 5 0 0 8 306 307 387 386 316 317 397 396 +250 5 0 0 8 307 308 388 387 317 318 398 397 +251 5 0 0 8 308 309 389 388 318 319 399 398 +252 5 0 0 8 309 310 390 389 319 320 400 399 +253 5 0 0 8 321 322 402 401 331 332 412 411 +254 5 0 0 8 322 323 403 402 332 333 413 412 +255 5 0 0 8 323 324 404 403 333 334 414 413 +256 5 0 0 8 324 325 405 404 334 335 415 414 +257 5 0 0 8 325 326 406 405 335 336 416 415 +258 5 0 0 8 326 327 407 406 336 337 417 416 +259 5 0 0 8 327 328 408 407 337 338 418 417 +260 5 0 0 8 328 329 409 408 338 339 419 418 +261 5 0 0 8 329 330 410 409 339 340 420 419 +262 5 0 0 8 331 332 412 411 341 342 422 421 +263 5 0 0 8 332 333 413 412 342 343 423 422 +264 5 0 0 8 333 334 414 413 343 344 424 423 +265 5 0 0 8 334 335 415 414 344 345 425 424 +266 5 0 0 8 335 336 416 415 345 346 426 425 +267 5 0 0 8 336 337 417 416 346 347 427 426 +268 5 0 0 8 337 338 418 417 347 348 428 427 +269 5 0 0 8 338 339 419 418 348 349 429 428 +270 5 0 0 8 339 340 420 419 349 350 430 429 +271 5 0 0 8 341 342 422 421 351 352 432 431 +272 5 0 0 8 342 343 423 422 352 353 433 432 +273 5 0 0 8 343 344 424 423 353 354 434 433 +274 5 0 0 8 344 345 425 424 354 355 435 434 +275 5 0 0 8 345 346 426 425 355 356 436 435 +276 5 0 0 8 346 347 427 426 356 357 437 436 +277 5 0 0 8 347 348 428 427 357 358 438 437 +278 5 0 0 8 348 349 429 428 358 359 439 438 +279 5 0 0 8 349 350 430 429 359 360 440 439 +280 5 0 0 8 351 352 432 431 361 362 442 441 +281 5 0 0 8 352 353 433 432 362 363 443 442 +282 5 0 0 8 353 354 434 433 363 364 444 443 +283 5 0 0 8 354 355 435 434 364 365 445 444 +284 5 0 0 8 355 356 436 435 365 366 446 445 +285 5 0 0 8 356 357 437 436 366 367 447 446 +286 5 0 0 8 357 358 438 437 367 368 448 447 +287 5 0 0 8 358 359 439 438 368 369 449 448 +288 5 0 0 8 359 360 440 439 369 370 450 449 +289 5 0 0 8 361 362 442 441 371 372 452 451 +290 5 0 0 8 362 363 443 442 372 373 453 452 +291 5 0 0 8 363 364 444 443 373 374 454 453 +292 5 0 0 8 364 365 445 444 374 375 455 454 +293 5 0 0 8 365 366 446 445 375 376 456 455 +294 5 0 0 8 366 367 447 446 376 377 457 456 +295 5 0 0 8 367 368 448 447 377 378 458 457 +296 5 0 0 8 368 369 449 448 378 379 459 458 +297 5 0 0 8 369 370 450 449 379 380 460 459 +298 5 0 0 8 371 372 452 451 381 382 462 461 +299 5 0 0 8 372 373 453 452 382 383 463 462 +300 5 0 0 8 373 374 454 453 383 384 464 463 +301 5 0 0 8 374 375 455 454 384 385 465 464 +302 5 0 0 8 375 376 456 455 385 386 466 465 +303 5 0 0 8 376 377 457 456 386 387 467 466 +304 5 0 0 8 377 378 458 457 387 388 468 467 +305 5 0 0 8 378 379 459 458 388 389 469 468 +306 5 0 0 8 379 380 460 459 389 390 470 469 +307 5 0 0 8 381 382 462 461 391 392 472 471 +308 5 0 0 8 382 383 463 462 392 393 473 472 +309 5 0 0 8 383 384 464 463 393 394 474 473 +310 5 0 0 8 384 385 465 464 394 395 475 474 +311 5 0 0 8 385 386 466 465 395 396 476 475 +312 5 0 0 8 386 387 467 466 396 397 477 476 +313 5 0 0 8 387 388 468 467 397 398 478 477 +314 5 0 0 8 388 389 469 468 398 399 479 478 +315 5 0 0 8 389 390 470 469 399 400 480 479 +$ENDELM +DEAL::Generating Triangulation<1, 1> : general_cell(0; 1 : true) +$NOD +2 +1 0.00000 0 0 +2 1.00000 0 0 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<1, 2> : general_cell(0,0 ; 1,0 : true) +$NOD +2 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<1, 3> : general_cell(0,0,0; 1,0,0: true) +$NOD +2 +1 0.00000 0.00000 0.00000 +2 1.00000 0.00000 0.00000 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<2, 2> : general_cell(0,0; 1,0; 0,1; 1,1: true) +$NOD +4 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +3 0.00000 1.00000 0 +4 1.00000 1.00000 0 +$ENDNOD +$ELM +1 +1 3 0 0 4 1 2 4 3 +$ENDELM +DEAL::Generating Triangulation<2, 3> : general_cell(0,0,0; 1,0,0; 0,1,0; 1,1,0: true) +$NOD +4 +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 +$ENDNOD +$ELM +1 +1 3 0 0 4 1 2 4 3 +$ENDELM +DEAL::Generating Triangulation<3, 3> : general_cell(0,0,0; 1,0,0; 0,1,0; 1,1,0; 0,0,1; 1,0,1; 0,1,1; 1,1,1: true) +$NOD +8 +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 +$ENDNOD +$ELM +1 +1 5 0 0 8 1 2 6 5 3 4 8 7 +$ENDELM +DEAL::Generating Triangulation<1, 1> : hyper_cube(0: 1: true) +$NOD +2 +1 0.00000 0 0 +2 1.00000 0 0 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<1, 2> : hyper_cube(0: 1: true) +$NOD +2 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<1, 3> : hyper_cube(0: 1: true) +$NOD +2 +1 0.00000 0.00000 0.00000 +2 1.00000 0.00000 0.00000 +$ENDNOD +$ELM +1 +1 1 0 0 2 1 2 +$ENDELM +DEAL::Generating Triangulation<2, 2> : hyper_cube(0: 1: true) +$NOD +4 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +3 0.00000 1.00000 0 +4 1.00000 1.00000 0 +$ENDNOD +$ELM +1 +1 3 0 0 4 1 2 4 3 +$ENDELM +DEAL::Generating Triangulation<2, 3> : hyper_cube(0: 1: true) +$NOD +4 +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 +$ENDNOD +$ELM +1 +1 3 0 0 4 1 2 4 3 +$ENDELM +DEAL::Generating Triangulation<3, 3> : hyper_cube(0: 1: true) +$NOD +8 +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 +$ENDNOD +$ELM +1 +1 5 0 0 8 1 2 6 5 3 4 8 7 +$ENDELM +DEAL::Generating Triangulation<2, 2> : hyper_ball(0,0: 1: false) +$NOD +8 +1 -0.707107 -0.707107 0 +2 0.707107 -0.707107 0 +3 -0.292893 -0.292893 0 +4 0.292893 -0.292893 0 +5 -0.292893 0.292893 0 +6 0.292893 0.292893 0 +7 -0.707107 0.707107 0 +8 0.707107 0.707107 0 +$ENDNOD +$ELM +5 +1 3 0 0 4 1 2 4 3 +2 3 0 0 4 1 3 5 7 +3 3 0 0 4 3 4 6 5 +4 3 0 0 4 2 8 6 4 +5 3 0 0 4 7 5 6 8 +$ENDELM +DEAL::Generating Triangulation<2, 2> : simplex(0,0; 1,0; 0,1) +$NOD +7 +1 0.00000 0.00000 0 +2 1.00000 0.00000 0 +3 0.00000 1.00000 0 +4 0.500000 0.00000 0 +5 0.500000 0.500000 0 +6 0.00000 0.500000 0 +7 0.333333 0.333333 0 +$ENDNOD +$ELM +3 +1 3 0 0 4 1 4 7 6 +2 3 0 0 4 4 2 5 7 +3 3 0 0 4 6 7 5 3 +$ENDELM +DEAL::Generating Triangulation<3, 3> : simplex(0,0,0; 1,0,0; 0,1,0; 0,0,1) +$NOD +15 +1 0.00000 0.00000 0.00000 +2 1.00000 0.00000 0.00000 +3 0.00000 1.00000 0.00000 +4 0.00000 0.00000 1.00000 +5 0.500000 0.00000 0.00000 +6 0.500000 0.500000 0.00000 +7 0.00000 0.500000 0.500000 +8 0.00000 0.00000 0.500000 +9 0.00000 0.500000 0.00000 +10 0.500000 0.00000 0.500000 +11 0.333333 0.333333 0.00000 +12 0.333333 0.333333 0.333333 +13 0.00000 0.333333 0.333333 +14 0.333333 0.00000 0.333333 +15 0.250000 0.250000 0.250000 +$ENDNOD +$ELM +4 +1 5 0 0 8 1 5 14 8 9 11 15 13 +2 5 0 0 8 5 2 10 14 11 6 12 15 +3 5 0 0 8 9 11 15 13 3 6 12 7 +4 5 0 0 8 8 14 10 4 13 15 12 7 +$ENDELM -- 2.39.5