]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add new MappingQCache::initialize() function 11867/head
authorPeter Munch <peterrmuench@gmail.com>
Mon, 8 Mar 2021 12:24:56 +0000 (13:24 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Thu, 11 Mar 2021 15:29:16 +0000 (16:29 +0100)
doc/news/changes/incompatibilities/20210310Munch [new file with mode: 0644]
doc/news/changes/minor/20210310Fehn [new file with mode: 0644]
examples/step-65/step-65.cc
include/deal.II/fe/mapping_q_cache.h
source/fe/mapping_q_cache.cc
tests/mappings/mapping_q_cache_05.cc [new file with mode: 0644]
tests/mappings/mapping_q_cache_05.output [new file with mode: 0644]

diff --git a/doc/news/changes/incompatibilities/20210310Munch b/doc/news/changes/incompatibilities/20210310Munch
new file mode 100644 (file)
index 0000000..6a40d65
--- /dev/null
@@ -0,0 +1,4 @@
+Changed: The order of parameters has been switched in MappingQCache::initialize(), 
+with the Mapping now being the first argument.
+<br>
+(Peter Munch, 2020/05/23)
diff --git a/doc/news/changes/minor/20210310Fehn b/doc/news/changes/minor/20210310Fehn
new file mode 100644 (file)
index 0000000..b01b92c
--- /dev/null
@@ -0,0 +1,6 @@
+New: MappingQCache has a new initialize function that takes
+either a std::function or a dealii::Function for transforming
+individual points.
+<br>
+(Niklas Fehn, Martin Kronbichler, Peter Munch, 2021/03/10)
+
index bd48400a88292135eba5c4479c2b6f791e7f80f3..de676392f935ef16fb6ddb913bf45a753b4b36e1 100644 (file)
@@ -633,7 +633,7 @@ namespace Step65
       MappingQCache<dim> mapping(fe.degree + 1);
       {
         TimerOutput::Scope scope(timer, "Initialize mapping cache");
-        mapping.initialize(triangulation, MappingQGeneric<dim>(fe.degree + 1));
+        mapping.initialize(MappingQGeneric<dim>(fe.degree + 1), triangulation);
       }
       std::cout << "   Memory consumption cache:     "
                 << 1e-6 * mapping.memory_consumption() << " MB" << std::endl;
index 34ae3cf256affb8edf83d1fb4c60a989ea1267f3..3f576d9f8f7e5aa8ec1d1c9522838af2ac34fe66 100644 (file)
@@ -19,6 +19,8 @@
 
 #include <deal.II/base/config.h>
 
+#include <deal.II/base/function.h>
+
 #include <deal.II/fe/mapping_q_generic.h>
 
 #include <deal.II/grid/tria.h>
@@ -76,11 +78,25 @@ public:
 
   /**
    * Initialize the data cache by computing the mapping support points for all
-   * cells (on all levels) of the given triangulation. Note that the cache is
-   * invalidated upon the signal Triangulation::Signals::any_change of the
-   * underlying triangulation.
+   * cells (on all levels) of the given triangulation.
+   *
+   * @note The cache is invalidated upon the signal
+   * Triangulation::Signals::any_change of the underlying triangulation.
    */
   void
+  initialize(const Mapping<dim, spacedim> &      mapping,
+             const Triangulation<dim, spacedim> &triangulation);
+
+  /**
+   * Initialize the data cache by computing the mapping support points for all
+   * cells (on all levels) of the given triangulation.
+   *
+   * @note The cache is invalidated upon the signal
+   * Triangulation::Signals::any_change of the underlying triangulation.
+   *
+   * @deprecated Use initialize() version above instead.
+   */
+  DEAL_II_DEPRECATED_EARLY void
   initialize(const Triangulation<dim, spacedim> &  triangulation,
              const MappingQGeneric<dim, spacedim> &mapping);
 
@@ -111,6 +127,40 @@ public:
                const typename Triangulation<dim, spacedim>::cell_iterator &)>
                &compute_points_on_cell);
 
+  /**
+   * Initialize the data cache by computing the mapping support points for all
+   * cells (on all levels) of the given triangulation and a given @p mapping
+   * and transforming these points via the function @p transformation_function.
+   *
+   * The bool @p function_describes_relative_displacement indicates that
+   * the function @p transformation_function maps to absolute coordinates.
+   * If the parameter is set to true, the return value of the function is
+   * interpreted as relative deformation and the result is eventually added
+   * to the original point for the support points eventually used by this class.
+   *
+   * This function calls the previous function so the comments regarding
+   * threading listed above apply also here.
+   *
+   * @note The cache is invalidated upon the signal
+   * Triangulation::Signals::any_change of the underlying triangulation.
+   */
+  void
+  initialize(const Mapping<dim, spacedim> &      mapping,
+             const Triangulation<dim, spacedim> &tria,
+             const std::function<Point<spacedim>(
+               const typename Triangulation<dim, spacedim>::cell_iterator &,
+               const Point<spacedim> &)> &       transformation_function,
+             const bool function_describes_relative_displacement);
+
+  /**
+   * The same as above but taking a dealii::Function object.
+   */
+  void
+  initialize(const Mapping<dim, spacedim> &      mapping,
+             const Triangulation<dim, spacedim> &tria,
+             const Function<spacedim> &          transformation_function,
+             const bool function_describes_relative_displacement);
+
   /**
    * Return the memory consumption (in bytes) of the cache.
    */
index 96271efab4ab4181b88cd43cdf1c21ab01ca4506..8d62b9eef313bd1968831cf7512bd9cd75fa7b55 100644 (file)
 #include <deal.II/base/memory_consumption.h>
 #include <deal.II/base/work_stream.h>
 
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_tools.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_q1.h>
 #include <deal.II/fe/mapping_q_cache.h>
 
 #include <functional>
@@ -70,18 +74,63 @@ MappingQCache<dim, spacedim>::preserves_vertex_locations() const
 
 
 
+template <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+  const Mapping<dim, spacedim> &      mapping,
+  const Triangulation<dim, spacedim> &triangulation)
+{
+  // FE and FEValues in the case they are needed
+  FE_Nothing<dim, spacedim> fe;
+  Threads::ThreadLocalStorage<std::unique_ptr<FEValues<dim, spacedim>>>
+    fe_values_all;
+
+  this->initialize(
+    triangulation,
+    [&](const typename Triangulation<dim, spacedim>::cell_iterator &cell) {
+      const auto mapping_q_generic =
+        dynamic_cast<const MappingQGeneric<dim, spacedim> *>(&mapping);
+      if (mapping_q_generic != nullptr &&
+          this->get_degree() == mapping_q_generic->get_degree())
+        {
+          return mapping_q_generic->compute_mapping_support_points(cell);
+        }
+      else
+        {
+          // get FEValues (thread-safe); in the case that this thread has not
+          // created a an FEValues object yet, this helper-function also
+          // creates one with the right quadrature rule
+          auto &fe_values = fe_values_all.get();
+          if (fe_values.get() == nullptr)
+            {
+              QGaussLobatto<dim> quadrature_gl(this->polynomial_degree + 1);
+
+              std::vector<Point<dim>> quadrature_points;
+              for (const auto i :
+                   FETools::hierarchic_to_lexicographic_numbering<dim>(
+                     this->polynomial_degree))
+                quadrature_points.push_back(quadrature_gl.point(i));
+              Quadrature<dim> quadrature(quadrature_points);
+
+              fe_values = std::make_unique<FEValues<dim, spacedim>>(
+                mapping, fe, quadrature, update_quadrature_points);
+            }
+
+          fe_values->reinit(cell);
+          return fe_values->get_quadrature_points();
+        }
+    });
+}
+
+
+
 template <int dim, int spacedim>
 void
 MappingQCache<dim, spacedim>::initialize(
   const Triangulation<dim, spacedim> &  triangulation,
   const MappingQGeneric<dim, spacedim> &mapping)
 {
-  AssertDimension(this->get_degree(), mapping.get_degree());
-  initialize(triangulation,
-             [&mapping](const typename Triangulation<dim>::cell_iterator &cell)
-               -> std::vector<Point<spacedim>> {
-               return mapping.compute_mapping_support_points(cell);
-             });
+  this->initialize(mapping, triangulation);
 }
 
 
@@ -125,6 +174,96 @@ MappingQCache<dim, spacedim>::initialize(
 
 
 
+template <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+  const Mapping<dim, spacedim> &      mapping,
+  const Triangulation<dim, spacedim> &tria,
+  const std::function<Point<spacedim>(
+    const typename Triangulation<dim, spacedim>::cell_iterator &,
+    const Point<spacedim> &)> &       transformation_function,
+  const bool                          function_describes_relative_displacement)
+{
+  // FE and FEValues in the case they are needed
+  FE_Nothing<dim, spacedim> fe;
+  Threads::ThreadLocalStorage<std::unique_ptr<FEValues<dim, spacedim>>>
+    fe_values_all;
+
+  this->initialize(
+    tria,
+    [&](const typename Triangulation<dim, spacedim>::cell_iterator &cell) {
+      std::vector<Point<spacedim>> points;
+
+      const auto mapping_q_generic =
+        dynamic_cast<const MappingQGeneric<dim, spacedim> *>(&mapping);
+
+      if (mapping_q_generic != nullptr &&
+          this->get_degree() == mapping_q_generic->get_degree())
+        {
+          points = mapping_q_generic->compute_mapping_support_points(cell);
+        }
+      else
+        {
+          // get FEValues (thread-safe); in the case that this thread has not
+          // created a an FEValues object yet, this helper-function also
+          // creates one with the right quadrature rule
+          auto &fe_values = fe_values_all.get();
+          if (fe_values.get() == nullptr)
+            {
+              QGaussLobatto<dim> quadrature_gl(this->polynomial_degree + 1);
+
+              std::vector<Point<dim>> quadrature_points;
+              for (const auto i :
+                   FETools::hierarchic_to_lexicographic_numbering<dim>(
+                     this->polynomial_degree))
+                quadrature_points.push_back(quadrature_gl.point(i));
+              Quadrature<dim> quadrature(quadrature_points);
+
+              fe_values = std::make_unique<FEValues<dim, spacedim>>(
+                mapping, fe, quadrature, update_quadrature_points);
+            }
+
+          fe_values->reinit(cell);
+          points = fe_values->get_quadrature_points();
+        }
+
+      for (auto &p : points)
+        if (function_describes_relative_displacement)
+          p += transformation_function(cell, p);
+        else
+          p = transformation_function(cell, p);
+
+      return points;
+    });
+}
+
+
+
+template <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+  const Mapping<dim, spacedim> &      mapping,
+  const Triangulation<dim, spacedim> &tria,
+  const Function<spacedim> &          transformation_function,
+  const bool                          function_describes_relative_displacement)
+{
+  AssertDimension(transformation_function.n_components, spacedim);
+
+  this->initialize(
+    mapping,
+    tria,
+    [&](const typename Triangulation<dim, spacedim>::cell_iterator &,
+        const Point<spacedim> &point) -> Point<spacedim> {
+      Point<spacedim> new_point;
+      for (int c = 0; c < spacedim; ++c)
+        new_point[c] = transformation_function.value(point, c);
+      return new_point;
+    },
+    function_describes_relative_displacement);
+}
+
+
+
 template <int dim, int spacedim>
 std::size_t
 MappingQCache<dim, spacedim>::memory_consumption() const
diff --git a/tests/mappings/mapping_q_cache_05.cc b/tests/mappings/mapping_q_cache_05.cc
new file mode 100644 (file)
index 0000000..46c692f
--- /dev/null
@@ -0,0 +1,115 @@
+// ---------------------------------------------------------------------
+//
+// 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 MappingQCache initialization with point lambda/Function
+
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_q_cache.h>
+#include <deal.II/fe/mapping_q_generic.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria.h>
+
+#include <deal.II/numerics/data_out.h>
+
+#include "../tests.h"
+
+template <int dim>
+class Solution : public Function<dim>
+{
+public:
+  Solution(const bool is_displacement_function)
+    : Function<dim>(dim)
+    , is_displacement_function(is_displacement_function)
+  {}
+
+  double
+  value(const Point<dim> &point, const unsigned int compontent) const
+  {
+    return std::sin(point[compontent] * 0.5 * numbers::PI) -
+           (is_displacement_function ? point[compontent] : 0.0);
+  }
+
+private:
+  const bool is_displacement_function;
+};
+
+static int counter = 0;
+
+template <int dim, typename Fu>
+void
+do_test(const unsigned int degree,
+        const Fu &         fu,
+        const bool         is_displacement_function)
+{
+  Triangulation<dim> tria;
+  GridGenerator::subdivided_hyper_cube(tria, 4);
+
+  MappingQGeneric<dim> mapping(degree);
+  MappingQCache<dim>   mapping_cache(degree);
+  mapping_cache.initialize(mapping, tria, fu, is_displacement_function);
+
+  {
+    DataOut<dim> data_out;
+
+    data_out.attach_triangulation(tria);
+
+    data_out.build_patches(mapping_cache,
+                           2,
+                           DataOut<dim>::CurvedCellRegion::curved_inner_cells);
+
+#if false
+    std::ofstream output("test." + std::to_string(counter++) + ".vtk");
+    data_out.write_vtk(output);
+#else
+    data_out.write_vtk(deallog.get_file_stream());
+#endif
+  }
+}
+
+
+int
+main()
+{
+  initlog();
+  do_test<2>(3, Solution<2>(true), true);
+  do_test<2>(3, Solution<2>(false), false);
+  do_test<2>(3,
+             [](const typename Triangulation<2>::cell_iterator &,
+                const Point<2> &p) -> Point<2> {
+               Point<2> result;
+
+               for (unsigned int compontent = 0; compontent < 2; ++compontent)
+                 result[compontent] =
+                   std::sin(p[compontent] * 0.5 * numbers::PI) - p[compontent];
+
+               return result;
+             },
+             true);
+  do_test<2>(3,
+             [](const typename Triangulation<2>::cell_iterator &,
+                const Point<2> &p) -> Point<2> {
+               Point<2> result;
+
+               for (unsigned int compontent = 0; compontent < 2; ++compontent)
+                 result[compontent] =
+                   std::sin(p[compontent] * 0.5 * numbers::PI);
+
+               return result;
+             },
+             false);
+}
diff --git a/tests/mappings/mapping_q_cache_05.output b/tests/mappings/mapping_q_cache_05.output
new file mode 100644 (file)
index 0000000..9cac630
--- /dev/null
@@ -0,0 +1,881 @@
+
+# vtk DataFile Version 3.0
+#This file was generated 
+ASCII
+DATASET UNSTRUCTURED_GRID
+
+POINTS 144 double
+0.00000 0.00000 0
+0.195088 0.00000 0
+0.382683 0.00000 0
+0.00000 0.195088 0
+0.195088 0.195088 0
+0.382683 0.195088 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.382683 0.00000 0
+0.555563 0.00000 0
+0.707107 0.00000 0
+0.382683 0.195088 0
+0.555563 0.195088 0
+0.707107 0.195088 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.707107 0.00000 0
+0.831459 0.00000 0
+0.923880 0.00000 0
+0.707107 0.195088 0
+0.831459 0.195088 0
+0.923880 0.195088 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.923880 0.00000 0
+0.980773 0.00000 0
+1.00000 0.00000 0
+0.923880 0.195088 0
+0.980773 0.195088 0
+1.00000 0.195088 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.00000 0.555563 0
+0.195088 0.555563 0
+0.382683 0.555563 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.382683 0.555563 0
+0.555563 0.555563 0
+0.707107 0.555563 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.707107 0.555563 0
+0.831459 0.555563 0
+0.923880 0.555563 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.923880 0.555563 0
+0.980773 0.555563 0
+1.00000 0.555563 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.00000 0.831459 0
+0.195088 0.831459 0
+0.382683 0.831459 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.382683 0.831459 0
+0.555563 0.831459 0
+0.707107 0.831459 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.707107 0.831459 0
+0.831459 0.831459 0
+0.923880 0.831459 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.923880 0.831459 0
+0.980773 0.831459 0
+1.00000 0.831459 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.00000 0.980773 0
+0.195088 0.980773 0
+0.382683 0.980773 0
+0.00000 1.00000 0
+0.195088 1.00000 0
+0.382683 1.00000 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.382683 0.980773 0
+0.555563 0.980773 0
+0.707107 0.980773 0
+0.382683 1.00000 0
+0.555563 1.00000 0
+0.707107 1.00000 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.707107 0.980773 0
+0.831459 0.980773 0
+0.923880 0.980773 0
+0.707107 1.00000 0
+0.831459 1.00000 0
+0.923880 1.00000 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.923880 0.980773 0
+0.980773 0.980773 0
+1.00000 0.980773 0
+0.923880 1.00000 0
+0.980773 1.00000 0
+1.00000 1.00000 0
+
+CELLS 64 320
+4      0       1       4       3
+4      1       2       5       4
+4      3       4       7       6
+4      4       5       8       7
+4      9       10      13      12
+4      10      11      14      13
+4      12      13      16      15
+4      13      14      17      16
+4      18      19      22      21
+4      19      20      23      22
+4      21      22      25      24
+4      22      23      26      25
+4      27      28      31      30
+4      28      29      32      31
+4      30      31      34      33
+4      31      32      35      34
+4      36      37      40      39
+4      37      38      41      40
+4      39      40      43      42
+4      40      41      44      43
+4      45      46      49      48
+4      46      47      50      49
+4      48      49      52      51
+4      49      50      53      52
+4      54      55      58      57
+4      55      56      59      58
+4      57      58      61      60
+4      58      59      62      61
+4      63      64      67      66
+4      64      65      68      67
+4      66      67      70      69
+4      67      68      71      70
+4      72      73      76      75
+4      73      74      77      76
+4      75      76      79      78
+4      76      77      80      79
+4      81      82      85      84
+4      82      83      86      85
+4      84      85      88      87
+4      85      86      89      88
+4      90      91      94      93
+4      91      92      95      94
+4      93      94      97      96
+4      94      95      98      97
+4      99      100     103     102
+4      100     101     104     103
+4      102     103     106     105
+4      103     104     107     106
+4      108     109     112     111
+4      109     110     113     112
+4      111     112     115     114
+4      112     113     116     115
+4      117     118     121     120
+4      118     119     122     121
+4      120     121     124     123
+4      121     122     125     124
+4      126     127     130     129
+4      127     128     131     130
+4      129     130     133     132
+4      130     131     134     133
+4      135     136     139     138
+4      136     137     140     139
+4      138     139     142     141
+4      139     140     143     142
+
+CELL_TYPES 64
+ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
+POINT_DATA 144
+# vtk DataFile Version 3.0
+#This file was generated 
+ASCII
+DATASET UNSTRUCTURED_GRID
+
+POINTS 144 double
+0.00000 0.00000 0
+0.195088 0.00000 0
+0.382683 0.00000 0
+0.00000 0.195088 0
+0.195088 0.195088 0
+0.382683 0.195088 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.382683 0.00000 0
+0.555563 0.00000 0
+0.707107 0.00000 0
+0.382683 0.195088 0
+0.555563 0.195088 0
+0.707107 0.195088 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.707107 0.00000 0
+0.831459 0.00000 0
+0.923880 0.00000 0
+0.707107 0.195088 0
+0.831459 0.195088 0
+0.923880 0.195088 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.923880 0.00000 0
+0.980773 0.00000 0
+1.00000 0.00000 0
+0.923880 0.195088 0
+0.980773 0.195088 0
+1.00000 0.195088 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.00000 0.555563 0
+0.195088 0.555563 0
+0.382683 0.555563 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.382683 0.555563 0
+0.555563 0.555563 0
+0.707107 0.555563 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.707107 0.555563 0
+0.831459 0.555563 0
+0.923880 0.555563 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.923880 0.555563 0
+0.980773 0.555563 0
+1.00000 0.555563 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.00000 0.831459 0
+0.195088 0.831459 0
+0.382683 0.831459 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.382683 0.831459 0
+0.555563 0.831459 0
+0.707107 0.831459 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.707107 0.831459 0
+0.831459 0.831459 0
+0.923880 0.831459 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.923880 0.831459 0
+0.980773 0.831459 0
+1.00000 0.831459 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.00000 0.980773 0
+0.195088 0.980773 0
+0.382683 0.980773 0
+0.00000 1.00000 0
+0.195088 1.00000 0
+0.382683 1.00000 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.382683 0.980773 0
+0.555563 0.980773 0
+0.707107 0.980773 0
+0.382683 1.00000 0
+0.555563 1.00000 0
+0.707107 1.00000 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.707107 0.980773 0
+0.831459 0.980773 0
+0.923880 0.980773 0
+0.707107 1.00000 0
+0.831459 1.00000 0
+0.923880 1.00000 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.923880 0.980773 0
+0.980773 0.980773 0
+1.00000 0.980773 0
+0.923880 1.00000 0
+0.980773 1.00000 0
+1.00000 1.00000 0
+
+CELLS 64 320
+4      0       1       4       3
+4      1       2       5       4
+4      3       4       7       6
+4      4       5       8       7
+4      9       10      13      12
+4      10      11      14      13
+4      12      13      16      15
+4      13      14      17      16
+4      18      19      22      21
+4      19      20      23      22
+4      21      22      25      24
+4      22      23      26      25
+4      27      28      31      30
+4      28      29      32      31
+4      30      31      34      33
+4      31      32      35      34
+4      36      37      40      39
+4      37      38      41      40
+4      39      40      43      42
+4      40      41      44      43
+4      45      46      49      48
+4      46      47      50      49
+4      48      49      52      51
+4      49      50      53      52
+4      54      55      58      57
+4      55      56      59      58
+4      57      58      61      60
+4      58      59      62      61
+4      63      64      67      66
+4      64      65      68      67
+4      66      67      70      69
+4      67      68      71      70
+4      72      73      76      75
+4      73      74      77      76
+4      75      76      79      78
+4      76      77      80      79
+4      81      82      85      84
+4      82      83      86      85
+4      84      85      88      87
+4      85      86      89      88
+4      90      91      94      93
+4      91      92      95      94
+4      93      94      97      96
+4      94      95      98      97
+4      99      100     103     102
+4      100     101     104     103
+4      102     103     106     105
+4      103     104     107     106
+4      108     109     112     111
+4      109     110     113     112
+4      111     112     115     114
+4      112     113     116     115
+4      117     118     121     120
+4      118     119     122     121
+4      120     121     124     123
+4      121     122     125     124
+4      126     127     130     129
+4      127     128     131     130
+4      129     130     133     132
+4      130     131     134     133
+4      135     136     139     138
+4      136     137     140     139
+4      138     139     142     141
+4      139     140     143     142
+
+CELL_TYPES 64
+ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
+POINT_DATA 144
+# vtk DataFile Version 3.0
+#This file was generated 
+ASCII
+DATASET UNSTRUCTURED_GRID
+
+POINTS 144 double
+0.00000 0.00000 0
+0.195088 0.00000 0
+0.382683 0.00000 0
+0.00000 0.195088 0
+0.195088 0.195088 0
+0.382683 0.195088 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.382683 0.00000 0
+0.555563 0.00000 0
+0.707107 0.00000 0
+0.382683 0.195088 0
+0.555563 0.195088 0
+0.707107 0.195088 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.707107 0.00000 0
+0.831459 0.00000 0
+0.923880 0.00000 0
+0.707107 0.195088 0
+0.831459 0.195088 0
+0.923880 0.195088 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.923880 0.00000 0
+0.980773 0.00000 0
+1.00000 0.00000 0
+0.923880 0.195088 0
+0.980773 0.195088 0
+1.00000 0.195088 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.00000 0.555563 0
+0.195088 0.555563 0
+0.382683 0.555563 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.382683 0.555563 0
+0.555563 0.555563 0
+0.707107 0.555563 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.707107 0.555563 0
+0.831459 0.555563 0
+0.923880 0.555563 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.923880 0.555563 0
+0.980773 0.555563 0
+1.00000 0.555563 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.00000 0.831459 0
+0.195088 0.831459 0
+0.382683 0.831459 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.382683 0.831459 0
+0.555563 0.831459 0
+0.707107 0.831459 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.707107 0.831459 0
+0.831459 0.831459 0
+0.923880 0.831459 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.923880 0.831459 0
+0.980773 0.831459 0
+1.00000 0.831459 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.00000 0.980773 0
+0.195088 0.980773 0
+0.382683 0.980773 0
+0.00000 1.00000 0
+0.195088 1.00000 0
+0.382683 1.00000 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.382683 0.980773 0
+0.555563 0.980773 0
+0.707107 0.980773 0
+0.382683 1.00000 0
+0.555563 1.00000 0
+0.707107 1.00000 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.707107 0.980773 0
+0.831459 0.980773 0
+0.923880 0.980773 0
+0.707107 1.00000 0
+0.831459 1.00000 0
+0.923880 1.00000 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.923880 0.980773 0
+0.980773 0.980773 0
+1.00000 0.980773 0
+0.923880 1.00000 0
+0.980773 1.00000 0
+1.00000 1.00000 0
+
+CELLS 64 320
+4      0       1       4       3
+4      1       2       5       4
+4      3       4       7       6
+4      4       5       8       7
+4      9       10      13      12
+4      10      11      14      13
+4      12      13      16      15
+4      13      14      17      16
+4      18      19      22      21
+4      19      20      23      22
+4      21      22      25      24
+4      22      23      26      25
+4      27      28      31      30
+4      28      29      32      31
+4      30      31      34      33
+4      31      32      35      34
+4      36      37      40      39
+4      37      38      41      40
+4      39      40      43      42
+4      40      41      44      43
+4      45      46      49      48
+4      46      47      50      49
+4      48      49      52      51
+4      49      50      53      52
+4      54      55      58      57
+4      55      56      59      58
+4      57      58      61      60
+4      58      59      62      61
+4      63      64      67      66
+4      64      65      68      67
+4      66      67      70      69
+4      67      68      71      70
+4      72      73      76      75
+4      73      74      77      76
+4      75      76      79      78
+4      76      77      80      79
+4      81      82      85      84
+4      82      83      86      85
+4      84      85      88      87
+4      85      86      89      88
+4      90      91      94      93
+4      91      92      95      94
+4      93      94      97      96
+4      94      95      98      97
+4      99      100     103     102
+4      100     101     104     103
+4      102     103     106     105
+4      103     104     107     106
+4      108     109     112     111
+4      109     110     113     112
+4      111     112     115     114
+4      112     113     116     115
+4      117     118     121     120
+4      118     119     122     121
+4      120     121     124     123
+4      121     122     125     124
+4      126     127     130     129
+4      127     128     131     130
+4      129     130     133     132
+4      130     131     134     133
+4      135     136     139     138
+4      136     137     140     139
+4      138     139     142     141
+4      139     140     143     142
+
+CELL_TYPES 64
+ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
+POINT_DATA 144
+# vtk DataFile Version 3.0
+#This file was generated 
+ASCII
+DATASET UNSTRUCTURED_GRID
+
+POINTS 144 double
+0.00000 0.00000 0
+0.195088 0.00000 0
+0.382683 0.00000 0
+0.00000 0.195088 0
+0.195088 0.195088 0
+0.382683 0.195088 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.382683 0.00000 0
+0.555563 0.00000 0
+0.707107 0.00000 0
+0.382683 0.195088 0
+0.555563 0.195088 0
+0.707107 0.195088 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.707107 0.00000 0
+0.831459 0.00000 0
+0.923880 0.00000 0
+0.707107 0.195088 0
+0.831459 0.195088 0
+0.923880 0.195088 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.923880 0.00000 0
+0.980773 0.00000 0
+1.00000 0.00000 0
+0.923880 0.195088 0
+0.980773 0.195088 0
+1.00000 0.195088 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.00000 0.382683 0
+0.195088 0.382683 0
+0.382683 0.382683 0
+0.00000 0.555563 0
+0.195088 0.555563 0
+0.382683 0.555563 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.382683 0.382683 0
+0.555563 0.382683 0
+0.707107 0.382683 0
+0.382683 0.555563 0
+0.555563 0.555563 0
+0.707107 0.555563 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.707107 0.382683 0
+0.831459 0.382683 0
+0.923880 0.382683 0
+0.707107 0.555563 0
+0.831459 0.555563 0
+0.923880 0.555563 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.923880 0.382683 0
+0.980773 0.382683 0
+1.00000 0.382683 0
+0.923880 0.555563 0
+0.980773 0.555563 0
+1.00000 0.555563 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.00000 0.707107 0
+0.195088 0.707107 0
+0.382683 0.707107 0
+0.00000 0.831459 0
+0.195088 0.831459 0
+0.382683 0.831459 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.382683 0.707107 0
+0.555563 0.707107 0
+0.707107 0.707107 0
+0.382683 0.831459 0
+0.555563 0.831459 0
+0.707107 0.831459 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.707107 0.707107 0
+0.831459 0.707107 0
+0.923880 0.707107 0
+0.707107 0.831459 0
+0.831459 0.831459 0
+0.923880 0.831459 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.923880 0.707107 0
+0.980773 0.707107 0
+1.00000 0.707107 0
+0.923880 0.831459 0
+0.980773 0.831459 0
+1.00000 0.831459 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.00000 0.923880 0
+0.195088 0.923880 0
+0.382683 0.923880 0
+0.00000 0.980773 0
+0.195088 0.980773 0
+0.382683 0.980773 0
+0.00000 1.00000 0
+0.195088 1.00000 0
+0.382683 1.00000 0
+0.382683 0.923880 0
+0.555563 0.923880 0
+0.707107 0.923880 0
+0.382683 0.980773 0
+0.555563 0.980773 0
+0.707107 0.980773 0
+0.382683 1.00000 0
+0.555563 1.00000 0
+0.707107 1.00000 0
+0.707107 0.923880 0
+0.831459 0.923880 0
+0.923880 0.923880 0
+0.707107 0.980773 0
+0.831459 0.980773 0
+0.923880 0.980773 0
+0.707107 1.00000 0
+0.831459 1.00000 0
+0.923880 1.00000 0
+0.923880 0.923880 0
+0.980773 0.923880 0
+1.00000 0.923880 0
+0.923880 0.980773 0
+0.980773 0.980773 0
+1.00000 0.980773 0
+0.923880 1.00000 0
+0.980773 1.00000 0
+1.00000 1.00000 0
+
+CELLS 64 320
+4      0       1       4       3
+4      1       2       5       4
+4      3       4       7       6
+4      4       5       8       7
+4      9       10      13      12
+4      10      11      14      13
+4      12      13      16      15
+4      13      14      17      16
+4      18      19      22      21
+4      19      20      23      22
+4      21      22      25      24
+4      22      23      26      25
+4      27      28      31      30
+4      28      29      32      31
+4      30      31      34      33
+4      31      32      35      34
+4      36      37      40      39
+4      37      38      41      40
+4      39      40      43      42
+4      40      41      44      43
+4      45      46      49      48
+4      46      47      50      49
+4      48      49      52      51
+4      49      50      53      52
+4      54      55      58      57
+4      55      56      59      58
+4      57      58      61      60
+4      58      59      62      61
+4      63      64      67      66
+4      64      65      68      67
+4      66      67      70      69
+4      67      68      71      70
+4      72      73      76      75
+4      73      74      77      76
+4      75      76      79      78
+4      76      77      80      79
+4      81      82      85      84
+4      82      83      86      85
+4      84      85      88      87
+4      85      86      89      88
+4      90      91      94      93
+4      91      92      95      94
+4      93      94      97      96
+4      94      95      98      97
+4      99      100     103     102
+4      100     101     104     103
+4      102     103     106     105
+4      103     104     107     106
+4      108     109     112     111
+4      109     110     113     112
+4      111     112     115     114
+4      112     113     116     115
+4      117     118     121     120
+4      118     119     122     121
+4      120     121     124     123
+4      121     122     125     124
+4      126     127     130     129
+4      127     128     131     130
+4      129     130     133     132
+4      130     131     134     133
+4      135     136     139     138
+4      136     137     140     139
+4      138     139     142     141
+4      139     140     143     142
+
+CELL_TYPES 64
+ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
+POINT_DATA 144

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

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.