]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix orientation of triangular faces 11510/head
authorPeter Munch <peterrmuench@gmail.com>
Wed, 13 Jan 2021 13:06:21 +0000 (14:06 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Thu, 14 Jan 2021 07:23:13 +0000 (08:23 +0100)
include/deal.II/grid/connectivity.h
include/deal.II/grid/reference_cell.h
tests/simplex/orientation_01.cc [new file with mode: 0644]
tests/simplex/orientation_01.with_simplex_support=on.output [new file with mode: 0644]
tests/simplex/orientation_02.cc [new file with mode: 0644]
tests/simplex/orientation_02.with_simplex_support=on.output [new file with mode: 0644]
tests/simplex/q_projection_01.output

index 3e422c9a94485779b1cc6850fc21759ebe808613..07b1fc376affb855d5d7acf818771969f91953c0 100644 (file)
@@ -1162,11 +1162,11 @@ namespace internal
             }
           else
             {
-              col_d[offset_i]        = counter;
-              orientations[offset_i] = ReferenceCell::compute_orientation(
-                ad_entity_types[offset_i],
-                ref_indices,
-                ad_entity_vertices[offset_i]);
+              col_d[offset_i] = counter;
+              orientations[offset_i] =
+                ReferenceCell::compute_orientation(ad_entity_types[offset_i],
+                                                   ad_entity_vertices[offset_i],
+                                                   ref_indices);
             }
         }
       ptr_0.push_back(col_0.size());
index 582f3499b9836c4a6016962804c936b571db969a..8b799f608088a4920b2235134c5aa245418b5dd0 100644 (file)
@@ -925,9 +925,9 @@ namespace ReferenceCell
           static const std::array<std::array<unsigned int, 3>, 6> table = {
             {{{2, 1, 0}},
              {{0, 1, 2}},
+             {{1, 0, 2}},
              {{1, 2, 0}},
              {{0, 2, 1}},
-             {{1, 0, 2}},
              {{2, 0, 1}}}};
 
           return table[face_orientation][line];
@@ -971,9 +971,9 @@ namespace ReferenceCell
           static const std::array<std::array<unsigned int, 3>, 6> table = {
             {{{0, 2, 1}},
              {{0, 1, 2}},
+             {{2, 1, 0}},
              {{1, 2, 0}},
              {{1, 0, 2}},
-             {{2, 1, 0}},
              {{2, 0, 1}}}};
 
           return table[face_orientation][vertex];
@@ -1093,9 +1093,9 @@ namespace ReferenceCell
               static const std::array<std::array<unsigned int, 3>, 6> table = {
                 {{{2, 1, 0}},
                  {{0, 1, 2}},
+                 {{1, 0, 2}},
                  {{1, 2, 0}},
                  {{0, 2, 1}},
-                 {{1, 0, 2}},
                  {{2, 0, 1}}}};
 
               return table[face_orientation][line];
@@ -1143,9 +1143,9 @@ namespace ReferenceCell
               static const std::array<std::array<unsigned int, 3>, 6> table = {
                 {{{0, 2, 1}},
                  {{0, 1, 2}},
+                 {{2, 1, 0}},
                  {{1, 2, 0}},
                  {{1, 0, 2}},
-                 {{2, 1, 0}},
                  {{2, 0, 1}}}};
 
               return table[face_orientation][vertex];
@@ -1269,9 +1269,9 @@ namespace ReferenceCell
               static const std::array<std::array<unsigned int, 3>, 6> table = {
                 {{{2, 1, 0}},
                  {{0, 1, 2}},
+                 {{1, 0, 2}},
                  {{1, 2, 0}},
                  {{0, 2, 1}},
-                 {{1, 0, 2}},
                  {{2, 0, 1}}}};
 
               return table[face_orientation][line];
@@ -1319,9 +1319,9 @@ namespace ReferenceCell
               static const std::array<std::array<unsigned int, 3>, 6> table = {
                 {{{0, 2, 1}},
                  {{0, 1, 2}},
+                 {{2, 1, 0}},
                  {{1, 2, 0}},
                  {{1, 0, 2}},
-                 {{2, 1, 0}},
                  {{2, 0, 1}}}};
 
               return table[face_orientation][vertex];
@@ -1634,7 +1634,7 @@ namespace ReferenceCell
           return 1;
 
         // face_orientation=true, face_rotation=true, face_flip=false
-        if (i == std::array<T, 3>{{j[1], j[0], j[2]}})
+        if (i == std::array<T, 3>{{j[1], j[2], j[0]}})
           return 3;
 
         // face_orientation=true, face_rotation=false, face_flip=true
@@ -1646,11 +1646,11 @@ namespace ReferenceCell
           return 0;
 
         // face_orientation=false, face_rotation=true, face_flip=false
-        if (i == std::array<T, 3>{{j[1], j[2], j[0]}})
+        if (i == std::array<T, 3>{{j[2], j[1], j[0]}})
           return 2;
 
         // face_orientation=false, face_rotation=false, face_flip=true
-        if (i == std::array<T, 3>{{j[2], j[1], j[0]}})
+        if (i == std::array<T, 3>{{j[1], j[0], j[2]}})
           return 4;
       }
     else if (entity_type == ReferenceCell::Type::Quad)
@@ -1665,7 +1665,7 @@ namespace ReferenceCell
           return 1;
 
         // face_orientation=true, face_rotation=true, face_flip=false
-        if (i == std::array<T, 4>{{j[1], j[3], j[0], j[2]}})
+        if (i == std::array<T, 4>{{j[2], j[0], j[3], j[1]}})
           return 3;
 
         // face_orientation=true, face_rotation=false, face_flip=true
@@ -1673,7 +1673,7 @@ namespace ReferenceCell
           return 5;
 
         // face_orientation=true, face_rotation=true, face_flip=true
-        if (i == std::array<T, 4>{{j[2], j[0], j[3], j[1]}})
+        if (i == std::array<T, 4>{{j[1], j[3], j[0], j[2]}})
           return 7;
 
         // face_orientation=false, face_rotation=false, face_flip=false
@@ -1733,7 +1733,7 @@ namespace ReferenceCell
               temp = {{vertices[0], vertices[1], vertices[2]}};
               break;
             case 3:
-              temp = {{vertices[1], vertices[0], vertices[2]}};
+              temp = {{vertices[1], vertices[2], vertices[0]}};
               break;
             case 5:
               temp = {{vertices[2], vertices[0], vertices[1]}};
@@ -1742,10 +1742,10 @@ namespace ReferenceCell
               temp = {{vertices[0], vertices[2], vertices[1]}};
               break;
             case 2:
-              temp = {{vertices[1], vertices[2], vertices[0]}};
+              temp = {{vertices[2], vertices[1], vertices[0]}};
               break;
             case 4:
-              temp = {{vertices[2], vertices[1], vertices[0]}};
+              temp = {{vertices[1], vertices[0], vertices[2]}};
               break;
             default:
               Assert(false, ExcNotImplemented());
@@ -1759,13 +1759,13 @@ namespace ReferenceCell
               temp = {{vertices[0], vertices[1], vertices[2], vertices[3]}};
               break;
             case 3:
-              temp = {{vertices[1], vertices[3], vertices[0], vertices[2]}};
+              temp = {{vertices[2], vertices[0], vertices[3], vertices[1]}};
               break;
             case 5:
               temp = {{vertices[3], vertices[2], vertices[1], vertices[0]}};
               break;
             case 7:
-              temp = {{vertices[2], vertices[0], vertices[3], vertices[1]}};
+              temp = {{vertices[1], vertices[3], vertices[0], vertices[2]}};
               break;
             case 0:
               temp = {{vertices[0], vertices[2], vertices[1], vertices[3]}};
diff --git a/tests/simplex/orientation_01.cc b/tests/simplex/orientation_01.cc
new file mode 100644 (file)
index 0000000..e27a659
--- /dev/null
@@ -0,0 +1,55 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2021 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 ReferenceCell::permute_according_orientation and compute_orientation
+// by reverting the permutation due to a given orientation.
+
+#include <deal.II/grid/reference_cell.h>
+
+#include "../tests.h"
+
+template <unsigned int n_points>
+void
+test(const ReferenceCell::Type type, const unsigned int n_orientations)
+{
+  for (unsigned int o = 0; o < n_orientations; ++o)
+    {
+      std::array<unsigned int, n_points> origin;
+
+      for (unsigned int i = 0; i < n_points; ++i)
+        origin[i] = i;
+
+      const auto permuted =
+        ReferenceCell::permute_according_orientation(type, origin, o);
+      const unsigned int origin_back =
+        ReferenceCell::compute_orientation(type, permuted, origin);
+
+      AssertDimension(o, origin_back);
+    }
+}
+
+int
+main()
+{
+  initlog();
+
+  test<2>(ReferenceCell::Type::Line, 2);
+  test<3>(ReferenceCell::Type::Tri, 3);
+  test<4>(ReferenceCell::Type::Quad, 4);
+
+  deallog << "OK!" << std::endl;
+}
diff --git a/tests/simplex/orientation_01.with_simplex_support=on.output b/tests/simplex/orientation_01.with_simplex_support=on.output
new file mode 100644 (file)
index 0000000..5cfb783
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL::OK!
diff --git a/tests/simplex/orientation_02.cc b/tests/simplex/orientation_02.cc
new file mode 100644 (file)
index 0000000..b2f6378
--- /dev/null
@@ -0,0 +1,126 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2021 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 a mesh with two tetrahedra for all possible orientations.
+
+#include <deal.II/grid/reference_cell.h>
+#include <deal.II/grid/tria.h>
+
+#include "../tests.h"
+
+void
+test(const unsigned int orientation)
+{
+  const unsigned int face_no = 0;
+
+
+  Triangulation<3> dummy, tria;
+  ReferenceCell::make_triangulation(ReferenceCell::Type::Tet, dummy);
+
+  auto vertices = dummy.get_vertices();
+
+  std::vector<CellData<3>> cells;
+
+  {
+    CellData<3> cell;
+    cell.vertices    = {0, 1, 2, 3};
+    cell.material_id = 0;
+    cells.push_back(cell);
+  }
+
+  {
+    const auto &face     = dummy.begin()->face(face_no);
+    const auto  permuted = ReferenceCell::permute_according_orientation(
+      ReferenceCell::Type::Tri,
+      std::array<unsigned int, 3>{
+        {face->vertex_index(0), face->vertex_index(1), face->vertex_index(2)}},
+      orientation);
+
+    auto direction =
+      cross_product_3d(vertices[permuted[1]] - vertices[permuted[0]],
+                       vertices[permuted[2]] - vertices[permuted[0]]);
+    direction = direction / direction.norm();
+
+    vertices.push_back(face->center() + direction);
+
+    CellData<3> cell;
+    cell.vertices = {permuted[0], permuted[1], permuted[2], 4u};
+
+    cell.material_id = 1;
+    cells.push_back(cell);
+  }
+
+  tria.create_triangulation(vertices, cells, {});
+
+  auto cell = tria.begin();
+  cell++;
+
+  // check orientation
+  deallog << "face orientation: " << orientation << " " << std::endl;
+  AssertDimension(orientation,
+                  (cell->face_orientation(0) * 1 + cell->face_rotation(0) * 2 +
+                   cell->face_flip(0) * 4));
+
+  // check vertices
+  {
+    for (unsigned int v = 0; v < cell->n_vertices(); ++v)
+      deallog << cell->vertex_index(v) << " ";
+    deallog << " vs. ";
+    for (unsigned int v = 0; v < cell->n_vertices(); ++v)
+      deallog << cells[1].vertices[v] << " ";
+    deallog << std::endl;
+
+    for (const auto v : cell->vertex_indices())
+      AssertDimension(cell->vertex_index(v), cells[1].vertices[v]);
+  }
+
+  const auto face = cell->face(0);
+
+  // check lines
+  for (const auto l : face->line_indices())
+    {
+      const unsigned int l_ =
+        ReferenceCell::internal::Info::Tet().standard_to_real_face_line(
+          l, face_no, orientation);
+
+      std::array<unsigned int, 2> a = {
+        {face->line(l_)->vertex_index(0), face->line(l_)->vertex_index(1)}};
+      std::sort(a.begin(), a.end());
+
+      std::array<unsigned int, 2> b = {
+        {cells[1].vertices[l],
+         cells[1].vertices[(l + 1) % face->n_vertices()]}};
+      std::sort(b.begin(), b.end());
+
+      deallog << a[0] << "-" << a[1] << " vs. " << b[0] << "-" << b[1]
+              << std::endl;
+
+      AssertDimension(a[0], b[0]);
+      AssertDimension(a[1], b[1]);
+    }
+
+  deallog << std::endl;
+}
+
+int
+main()
+{
+  initlog();
+
+  for (unsigned int o = 0; o < 6; ++o)
+    test(o);
+}
diff --git a/tests/simplex/orientation_02.with_simplex_support=on.output b/tests/simplex/orientation_02.with_simplex_support=on.output
new file mode 100644 (file)
index 0000000..4291a7c
--- /dev/null
@@ -0,0 +1,37 @@
+
+DEAL::face orientation: 0 
+DEAL::0 2 1 4  vs. 0 2 1 4 
+DEAL::0-2 vs. 0-2
+DEAL::1-2 vs. 1-2
+DEAL::0-1 vs. 0-1
+DEAL::
+DEAL::face orientation: 1 
+DEAL::0 1 2 4  vs. 0 1 2 4 
+DEAL::0-1 vs. 0-1
+DEAL::1-2 vs. 1-2
+DEAL::0-2 vs. 0-2
+DEAL::
+DEAL::face orientation: 2 
+DEAL::2 1 0 4  vs. 2 1 0 4 
+DEAL::1-2 vs. 1-2
+DEAL::0-1 vs. 0-1
+DEAL::0-2 vs. 0-2
+DEAL::
+DEAL::face orientation: 3 
+DEAL::1 2 0 4  vs. 1 2 0 4 
+DEAL::1-2 vs. 1-2
+DEAL::0-2 vs. 0-2
+DEAL::0-1 vs. 0-1
+DEAL::
+DEAL::face orientation: 4 
+DEAL::1 0 2 4  vs. 1 0 2 4 
+DEAL::0-1 vs. 0-1
+DEAL::0-2 vs. 0-2
+DEAL::1-2 vs. 1-2
+DEAL::
+DEAL::face orientation: 5 
+DEAL::2 0 1 4  vs. 2 0 1 4 
+DEAL::0-2 vs. 0-2
+DEAL::0-1 vs. 0-1
+DEAL::1-2 vs. 1-2
+DEAL::
index 862e4216434504c8859c7d2b9ffa504e6f35451e..c2e3fc67658b121b89ec935c78dc9a945f5c7731 100644 (file)
@@ -154,8 +154,8 @@ DEAL:3d-4::0.666667 0.166667 0.00000 0.166667
 DEAL:3d-4::0.166667 0.666667 0.00000 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=0 face_orientation=true face_flip=false face_rotation=true:
-DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
 DEAL:3d-4::0.166667 0.666667 0.00000 0.166667 
+DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
 DEAL:3d-4::0.666667 0.166667 0.00000 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=0 face_orientation=false face_flip=false face_rotation=false:
@@ -164,14 +164,14 @@ DEAL:3d-4::0.666667 0.166667 0.00000 0.166667
 DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=0 face_orientation=false face_flip=true face_rotation=false:
-DEAL:3d-4::0.666667 0.166667 0.00000 0.166667 
 DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
 DEAL:3d-4::0.166667 0.666667 0.00000 0.166667 
+DEAL:3d-4::0.666667 0.166667 0.00000 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=0 face_orientation=false face_flip=false face_rotation=true:
-DEAL:3d-4::0.166667 0.666667 0.00000 0.166667 
-DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
 DEAL:3d-4::0.666667 0.166667 0.00000 0.166667 
+DEAL:3d-4::0.166667 0.166667 0.00000 0.166667 
+DEAL:3d-4::0.166667 0.666667 0.00000 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=1 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-4::0.166667 0.00000 0.166667 0.166667 
@@ -184,8 +184,8 @@ DEAL:3d-4::0.166667 0.00000 0.166667 0.166667
 DEAL:3d-4::0.166667 0.00000 0.666667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=1 face_orientation=true face_flip=false face_rotation=true:
-DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
 DEAL:3d-4::0.166667 0.00000 0.666667 0.166667 
+DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
 DEAL:3d-4::0.166667 0.00000 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=1 face_orientation=false face_flip=false face_rotation=false:
@@ -194,14 +194,14 @@ DEAL:3d-4::0.166667 0.00000 0.166667 0.166667
 DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=1 face_orientation=false face_flip=true face_rotation=false:
-DEAL:3d-4::0.166667 0.00000 0.166667 0.166667 
 DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
 DEAL:3d-4::0.166667 0.00000 0.666667 0.166667 
+DEAL:3d-4::0.166667 0.00000 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=1 face_orientation=false face_flip=false face_rotation=true:
-DEAL:3d-4::0.166667 0.00000 0.666667 0.166667 
-DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
 DEAL:3d-4::0.166667 0.00000 0.166667 0.166667 
+DEAL:3d-4::0.666667 0.00000 0.166667 0.166667 
+DEAL:3d-4::0.166667 0.00000 0.666667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=2 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-4::0.00000 0.666667 0.166667 0.166667 
@@ -214,8 +214,8 @@ DEAL:3d-4::0.00000 0.666667 0.166667 0.166667
 DEAL:3d-4::0.00000 0.166667 0.666667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=2 face_orientation=true face_flip=false face_rotation=true:
-DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
 DEAL:3d-4::0.00000 0.166667 0.666667 0.166667 
+DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
 DEAL:3d-4::0.00000 0.666667 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=2 face_orientation=false face_flip=false face_rotation=false:
@@ -224,14 +224,14 @@ DEAL:3d-4::0.00000 0.666667 0.166667 0.166667
 DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=2 face_orientation=false face_flip=true face_rotation=false:
-DEAL:3d-4::0.00000 0.666667 0.166667 0.166667 
 DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
 DEAL:3d-4::0.00000 0.166667 0.666667 0.166667 
+DEAL:3d-4::0.00000 0.666667 0.166667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=2 face_orientation=false face_flip=false face_rotation=true:
-DEAL:3d-4::0.00000 0.166667 0.666667 0.166667 
-DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
 DEAL:3d-4::0.00000 0.666667 0.166667 0.166667 
+DEAL:3d-4::0.00000 0.166667 0.166667 0.166667 
+DEAL:3d-4::0.00000 0.166667 0.666667 0.166667 
 DEAL:3d-4::
 DEAL:3d-4::face_no=3 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-4::0.666667 0.166667 0.166667 0.288675 
@@ -244,8 +244,8 @@ DEAL:3d-4::0.666667 0.166667 0.166667 0.288675
 DEAL:3d-4::0.166667 0.166667 0.666667 0.288675 
 DEAL:3d-4::
 DEAL:3d-4::face_no=3 face_orientation=true face_flip=false face_rotation=true:
-DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
 DEAL:3d-4::0.166667 0.166667 0.666667 0.288675 
+DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
 DEAL:3d-4::0.666667 0.166667 0.166667 0.288675 
 DEAL:3d-4::
 DEAL:3d-4::face_no=3 face_orientation=false face_flip=false face_rotation=false:
@@ -254,14 +254,14 @@ DEAL:3d-4::0.666667 0.166667 0.166667 0.288675
 DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
 DEAL:3d-4::
 DEAL:3d-4::face_no=3 face_orientation=false face_flip=true face_rotation=false:
-DEAL:3d-4::0.666667 0.166667 0.166667 0.288675 
 DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
 DEAL:3d-4::0.166667 0.166667 0.666667 0.288675 
+DEAL:3d-4::0.666667 0.166667 0.166667 0.288675 
 DEAL:3d-4::
 DEAL:3d-4::face_no=3 face_orientation=false face_flip=false face_rotation=true:
-DEAL:3d-4::0.166667 0.166667 0.666667 0.288675 
-DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
 DEAL:3d-4::0.666667 0.166667 0.166667 0.288675 
+DEAL:3d-4::0.166667 0.666667 0.166667 0.288675 
+DEAL:3d-4::0.166667 0.166667 0.666667 0.288675 
 DEAL:3d-4::
 DEAL:3d-10::face_no=0 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-10::0.333333 0.333333 0.00000 0.112500 
@@ -283,11 +283,11 @@ DEAL:3d-10::0.470142 0.0597159 0.00000 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=0 face_orientation=true face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.333333 0.00000 0.112500 
-DEAL:3d-10::0.101287 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.101287 0.797427 0.00000 0.0629696 
+DEAL:3d-10::0.101287 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.797427 0.101287 0.00000 0.0629696 
-DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971 
 DEAL:3d-10::0.470142 0.0597159 0.00000 0.0661971 
+DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971 
 DEAL:3d-10::0.0597159 0.470142 0.00000 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=0 face_orientation=false face_flip=false face_rotation=false:
@@ -301,21 +301,21 @@ DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=0 face_orientation=false face_flip=true face_rotation=false:
 DEAL:3d-10::0.333333 0.333333 0.00000 0.112500 
-DEAL:3d-10::0.797427 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.101287 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.101287 0.797427 0.00000 0.0629696 
-DEAL:3d-10::0.0597159 0.470142 0.00000 0.0661971 
+DEAL:3d-10::0.797427 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971 
 DEAL:3d-10::0.470142 0.0597159 0.00000 0.0661971 
+DEAL:3d-10::0.0597159 0.470142 0.00000 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=0 face_orientation=false face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.333333 0.00000 0.112500 
-DEAL:3d-10::0.101287 0.797427 0.00000 0.0629696 
-DEAL:3d-10::0.101287 0.101287 0.00000 0.0629696 
 DEAL:3d-10::0.797427 0.101287 0.00000 0.0629696 
-DEAL:3d-10::0.470142 0.0597159 0.00000 0.0661971 
-DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971 
+DEAL:3d-10::0.101287 0.101287 0.00000 0.0629696 
+DEAL:3d-10::0.101287 0.797427 0.00000 0.0629696 
 DEAL:3d-10::0.0597159 0.470142 0.00000 0.0661971 
+DEAL:3d-10::0.470142 0.470142 0.00000 0.0661971 
+DEAL:3d-10::0.470142 0.0597159 0.00000 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=1 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-10::0.333333 0.00000 0.333333 0.112500 
@@ -337,11 +337,11 @@ DEAL:3d-10::0.470142 0.00000 0.0597159 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=1 face_orientation=true face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.00000 0.333333 0.112500 
-DEAL:3d-10::0.797427 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.101287 0.00000 0.797427 0.0629696 
+DEAL:3d-10::0.797427 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.101287 0.00000 0.101287 0.0629696 
-DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971 
 DEAL:3d-10::0.470142 0.00000 0.0597159 0.0661971 
+DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971 
 DEAL:3d-10::0.470142 0.00000 0.470142 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=1 face_orientation=false face_flip=false face_rotation=false:
@@ -355,21 +355,21 @@ DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=1 face_orientation=false face_flip=true face_rotation=false:
 DEAL:3d-10::0.333333 0.00000 0.333333 0.112500 
-DEAL:3d-10::0.101287 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.797427 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.101287 0.00000 0.797427 0.0629696 
-DEAL:3d-10::0.470142 0.00000 0.470142 0.0661971 
+DEAL:3d-10::0.101287 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971 
 DEAL:3d-10::0.470142 0.00000 0.0597159 0.0661971 
+DEAL:3d-10::0.470142 0.00000 0.470142 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=1 face_orientation=false face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.00000 0.333333 0.112500 
-DEAL:3d-10::0.101287 0.00000 0.797427 0.0629696 
-DEAL:3d-10::0.797427 0.00000 0.101287 0.0629696 
 DEAL:3d-10::0.101287 0.00000 0.101287 0.0629696 
-DEAL:3d-10::0.470142 0.00000 0.0597159 0.0661971 
-DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971 
+DEAL:3d-10::0.797427 0.00000 0.101287 0.0629696 
+DEAL:3d-10::0.101287 0.00000 0.797427 0.0629696 
 DEAL:3d-10::0.470142 0.00000 0.470142 0.0661971 
+DEAL:3d-10::0.0597159 0.00000 0.470142 0.0661971 
+DEAL:3d-10::0.470142 0.00000 0.0597159 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=2 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-10::0.00000 0.333333 0.333333 0.112500 
@@ -391,11 +391,11 @@ DEAL:3d-10::0.00000 0.470142 0.0597159 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=2 face_orientation=true face_flip=false face_rotation=true:
 DEAL:3d-10::0.00000 0.333333 0.333333 0.112500 
-DEAL:3d-10::0.00000 0.101287 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.101287 0.797427 0.0629696 
+DEAL:3d-10::0.00000 0.101287 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.797427 0.101287 0.0629696 
-DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971 
 DEAL:3d-10::0.00000 0.470142 0.0597159 0.0661971 
+DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971 
 DEAL:3d-10::0.00000 0.0597159 0.470142 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=2 face_orientation=false face_flip=false face_rotation=false:
@@ -409,21 +409,21 @@ DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971
 DEAL:3d-10::
 DEAL:3d-10::face_no=2 face_orientation=false face_flip=true face_rotation=false:
 DEAL:3d-10::0.00000 0.333333 0.333333 0.112500 
-DEAL:3d-10::0.00000 0.797427 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.101287 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.101287 0.797427 0.0629696 
-DEAL:3d-10::0.00000 0.0597159 0.470142 0.0661971 
+DEAL:3d-10::0.00000 0.797427 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971 
 DEAL:3d-10::0.00000 0.470142 0.0597159 0.0661971 
+DEAL:3d-10::0.00000 0.0597159 0.470142 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=2 face_orientation=false face_flip=false face_rotation=true:
 DEAL:3d-10::0.00000 0.333333 0.333333 0.112500 
-DEAL:3d-10::0.00000 0.101287 0.797427 0.0629696 
-DEAL:3d-10::0.00000 0.101287 0.101287 0.0629696 
 DEAL:3d-10::0.00000 0.797427 0.101287 0.0629696 
-DEAL:3d-10::0.00000 0.470142 0.0597159 0.0661971 
-DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971 
+DEAL:3d-10::0.00000 0.101287 0.101287 0.0629696 
+DEAL:3d-10::0.00000 0.101287 0.797427 0.0629696 
 DEAL:3d-10::0.00000 0.0597159 0.470142 0.0661971 
+DEAL:3d-10::0.00000 0.470142 0.470142 0.0661971 
+DEAL:3d-10::0.00000 0.470142 0.0597159 0.0661971 
 DEAL:3d-10::
 DEAL:3d-10::face_no=3 face_orientation=true face_flip=false face_rotation=false:
 DEAL:3d-10::0.333333 0.333333 0.333333 0.194856 
@@ -445,11 +445,11 @@ DEAL:3d-10::0.470142 0.470142 0.0597159 0.114657
 DEAL:3d-10::
 DEAL:3d-10::face_no=3 face_orientation=true face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.333333 0.333333 0.194856 
-DEAL:3d-10::0.101287 0.797427 0.101287 0.109067 
 DEAL:3d-10::0.101287 0.101287 0.797427 0.109067 
+DEAL:3d-10::0.101287 0.797427 0.101287 0.109067 
 DEAL:3d-10::0.797427 0.101287 0.101287 0.109067 
-DEAL:3d-10::0.470142 0.0597159 0.470142 0.114657 
 DEAL:3d-10::0.470142 0.470142 0.0597159 0.114657 
+DEAL:3d-10::0.470142 0.0597159 0.470142 0.114657 
 DEAL:3d-10::0.0597159 0.470142 0.470142 0.114657 
 DEAL:3d-10::
 DEAL:3d-10::face_no=3 face_orientation=false face_flip=false face_rotation=false:
@@ -463,19 +463,19 @@ DEAL:3d-10::0.470142 0.0597159 0.470142 0.114657
 DEAL:3d-10::
 DEAL:3d-10::face_no=3 face_orientation=false face_flip=true face_rotation=false:
 DEAL:3d-10::0.333333 0.333333 0.333333 0.194856 
-DEAL:3d-10::0.797427 0.101287 0.101287 0.109067 
 DEAL:3d-10::0.101287 0.797427 0.101287 0.109067 
 DEAL:3d-10::0.101287 0.101287 0.797427 0.109067 
-DEAL:3d-10::0.0597159 0.470142 0.470142 0.11465
+DEAL:3d-10::0.797427 0.101287 0.101287 0.10906
 DEAL:3d-10::0.470142 0.0597159 0.470142 0.114657 
 DEAL:3d-10::0.470142 0.470142 0.0597159 0.114657 
+DEAL:3d-10::0.0597159 0.470142 0.470142 0.114657 
 DEAL:3d-10::
 DEAL:3d-10::face_no=3 face_orientation=false face_flip=false face_rotation=true:
 DEAL:3d-10::0.333333 0.333333 0.333333 0.194856 
-DEAL:3d-10::0.101287 0.101287 0.797427 0.109067 
-DEAL:3d-10::0.101287 0.797427 0.101287 0.109067 
 DEAL:3d-10::0.797427 0.101287 0.101287 0.109067 
-DEAL:3d-10::0.470142 0.470142 0.0597159 0.11465
-DEAL:3d-10::0.470142 0.0597159 0.470142 0.11465
+DEAL:3d-10::0.101287 0.797427 0.101287 0.10906
+DEAL:3d-10::0.101287 0.101287 0.797427 0.10906
 DEAL:3d-10::0.0597159 0.470142 0.470142 0.114657 
+DEAL:3d-10::0.470142 0.0597159 0.470142 0.114657 
+DEAL:3d-10::0.470142 0.470142 0.0597159 0.114657 
 DEAL:3d-10::

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.