]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add two manifold tests for normal vectors.
authorMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Sat, 2 Dec 2017 10:04:25 +0000 (11:04 +0100)
committerMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Tue, 5 Dec 2017 10:00:02 +0000 (11:00 +0100)
tests/manifold/spherical_manifold_09.cc [new file with mode: 0644]
tests/manifold/spherical_manifold_09.output [new file with mode: 0644]
tests/manifold/spherical_manifold_10.cc [new file with mode: 0644]
tests/manifold/spherical_manifold_10.output [new file with mode: 0644]

diff --git a/tests/manifold/spherical_manifold_09.cc b/tests/manifold/spherical_manifold_09.cc
new file mode 100644 (file)
index 0000000..0f75293
--- /dev/null
@@ -0,0 +1,93 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Check SphericalManifold::normal_vector on a set of points of a
+// hypersphere mesh
+
+#include "../tests.h"
+#include <deal.II/base/point.h>
+#include <deal.II/grid/manifold_lib.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_generator.h>
+
+using namespace dealii;
+
+int
+main()
+{
+  initlog();
+  deallog << std::setprecision(3);
+
+  constexpr unsigned int dim = 3;
+  SphericalManifold<3> spherical;
+
+  Triangulation<dim> tria;
+  GridGenerator::hyper_shell(tria, Point<dim>(), 0.5, 1., 96, true);
+  tria.set_all_manifold_ids(0);
+  tria.set_manifold(0, spherical);
+
+  for (auto cell : tria.active_cell_iterators())
+    for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+      if (cell->at_boundary(f))
+        {
+          if (std::abs(cell->face(f)->vertex(1).norm()-1.) < 1e-12)
+            {
+              // at outer boundary, the normal should point outwards and be
+              // aligned with the point down to roundoff. Check this for the
+              // second face vertex as well as the center.
+              deallog << "Outer normal correctness (should be 0): "
+                      << (1.0 - cell->face(f)->vertex(1) *
+                          spherical.normal_vector(cell->face(f),  cell->face(f)->vertex(1)))
+                      << " "
+                      << (1.0 - cell->face(f)->center(/*respect_manifold=*/true) *
+                          spherical.normal_vector(cell->face(f),  cell->face(f)->center(true)))
+                      << std::endl;
+            }
+          else if (std::abs(cell->face(f)->vertex(1).norm()-0.5) < 1e-12)
+            {
+              // at inner boundary, the normal should point inwards and be
+              // aligned with the point down to roundoff. Check this for the
+              // second face vertex as well as the center.
+              deallog << "Inner normal correctness (should be 0): "
+                      << (0.5 - cell->face(f)->vertex(1) *
+                          spherical.normal_vector(cell->face(f),  cell->face(f)->vertex(1)))
+                      << " "
+                      << (0.5 - cell->face(f)->center(/*respect_manifold=*/true) *
+                          spherical.normal_vector(cell->face(f),  cell->face(f)->center(true)))
+                      << std::endl;
+            }
+        }
+  for (auto cell : tria.active_cell_iterators())
+    for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+      if (cell->at_boundary(f))
+        {
+          // the first choice will contain perturbations in the normal because
+          // the center without respecting the manifold is not on the face to
+          // which the algorithm computes its points. As an alternative, we
+          // adjust the point to lie on the same radius as the vertex points
+          // by a weighting where the normal should again be perfectly aligned
+          // with the point itself.
+          deallog << "Approximate normal in "
+                  << cell->face(f)->center(false) << ":  "
+                  << spherical.normal_vector(cell->face(f),  cell->face(f)->center(false))
+                  << ", adjusted: "
+                  << spherical.normal_vector(cell->face(f),
+                                             cell->face(f)->center(false)/cell->face(f)->center(false).norm()
+                                             *cell->face(f)->vertex(1).norm())
+                  << std::endl;
+        }
+
+  return 0;
+}
diff --git a/tests/manifold/spherical_manifold_09.output b/tests/manifold/spherical_manifold_09.output
new file mode 100644 (file)
index 0000000..454a47f
--- /dev/null
@@ -0,0 +1,193 @@
+
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 0.00 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 0.00 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 2.22e-16 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 5.55e-17
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 1.11e-16
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 0.00 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 0.00 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 2.22e-16 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): -1.11e-16 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 -1.11e-16
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): -2.22e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 -2.22e-16
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Inner normal correctness (should be 0): 5.55e-17 0.00
+DEAL::Inner normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Outer normal correctness (should be 0): 1.11e-16 0.00
+DEAL::Outer normal correctness (should be 0): 0.00 0.00
+DEAL::Approximate normal in -0.170 -0.435 0.00:  -0.519 -0.833 -0.193, adjusted: -0.363 -0.932 -2.53e-17
+DEAL::Approximate normal in -0.312 -0.312 0.153:  -0.801 -0.592 0.0902, adjusted: -0.668 -0.668 0.328
+DEAL::Approximate normal in -0.312 -0.312 -0.153:  -0.801 -0.592 -0.0902, adjusted: -0.668 -0.668 -0.328
+DEAL::Approximate normal in -0.435 -0.170 0.00:  -0.833 -0.519 -0.193, adjusted: -0.932 -0.363 -1.58e-16
+DEAL::Approximate normal in -0.339 -0.871 0.00:  -0.519 -0.833 -0.193, adjusted: -0.363 -0.932 -2.53e-17
+DEAL::Approximate normal in -0.624 -0.624 0.307:  -0.801 -0.592 0.0902, adjusted: -0.668 -0.668 0.328
+DEAL::Approximate normal in -0.624 -0.624 -0.307:  -0.801 -0.592 -0.0902, adjusted: -0.668 -0.668 -0.328
+DEAL::Approximate normal in -0.871 -0.339 0.00:  -0.833 -0.519 -0.193, adjusted: -0.932 -0.363 -1.58e-16
+DEAL::Approximate normal in -0.312 -0.153 0.312:  -0.801 -0.0902 0.592, adjusted: -0.668 -0.328 0.668
+DEAL::Approximate normal in -0.170 -6.94e-18 0.435:  -0.519 0.193 0.833, adjusted: -0.363 -1.87e-16 0.932
+DEAL::Approximate normal in -0.435 -6.94e-18 0.170:  -0.833 0.193 0.519, adjusted: -0.932 1.58e-16 0.363
+DEAL::Approximate normal in -0.312 0.153 0.312:  -0.801 0.0902 0.592, adjusted: -0.668 0.328 0.668
+DEAL::Approximate normal in -0.624 -0.307 0.624:  -0.801 -0.0902 0.592, adjusted: -0.668 -0.328 0.668
+DEAL::Approximate normal in -0.339 -1.39e-17 0.871:  -0.519 0.193 0.833, adjusted: -0.363 -1.87e-16 0.932
+DEAL::Approximate normal in -0.871 -1.39e-17 0.339:  -0.833 0.193 0.519, adjusted: -0.932 1.58e-16 0.363
+DEAL::Approximate normal in -0.624 0.307 0.624:  -0.801 0.0902 0.592, adjusted: -0.668 0.328 0.668
+DEAL::Approximate normal in 0.00 -0.435 0.170:  -0.193 -0.833 0.519, adjusted: -2.53e-17 -0.932 0.363
+DEAL::Approximate normal in 0.153 -0.312 0.312:  0.0902 -0.592 0.801, adjusted: 0.328 -0.668 0.668
+DEAL::Approximate normal in -0.153 -0.312 0.312:  -0.0902 -0.592 0.801, adjusted: -0.328 -0.668 0.668
+DEAL::Approximate normal in 0.00 -0.170 0.435:  -0.193 -0.519 0.833, adjusted: -1.58e-16 -0.363 0.932
+DEAL::Approximate normal in 0.00 -0.871 0.339:  -0.193 -0.833 0.519, adjusted: -2.53e-17 -0.932 0.363
+DEAL::Approximate normal in 0.307 -0.624 0.624:  0.0902 -0.592 0.801, adjusted: 0.328 -0.668 0.668
+DEAL::Approximate normal in -0.307 -0.624 0.624:  -0.0902 -0.592 0.801, adjusted: -0.328 -0.668 0.668
+DEAL::Approximate normal in 0.00 -0.339 0.871:  -0.193 -0.519 0.833, adjusted: -1.58e-16 -0.363 0.932
+DEAL::Approximate normal in 0.312 -0.312 -0.153:  0.592 -0.801 -0.0902, adjusted: 0.668 -0.668 -0.328
+DEAL::Approximate normal in 0.435 -0.170 -6.94e-18:  0.833 -0.519 0.193, adjusted: 0.932 -0.363 -1.87e-16
+DEAL::Approximate normal in 0.170 -0.435 -6.94e-18:  0.519 -0.833 0.193, adjusted: 0.363 -0.932 1.58e-16
+DEAL::Approximate normal in 0.312 -0.312 0.153:  0.592 -0.801 0.0902, adjusted: 0.668 -0.668 0.328
+DEAL::Approximate normal in 0.624 -0.624 -0.307:  0.592 -0.801 -0.0902, adjusted: 0.668 -0.668 -0.328
+DEAL::Approximate normal in 0.871 -0.339 -1.39e-17:  0.833 -0.519 0.193, adjusted: 0.932 -0.363 -1.87e-16
+DEAL::Approximate normal in 0.339 -0.871 -1.39e-17:  0.519 -0.833 0.193, adjusted: 0.363 -0.932 1.58e-16
+DEAL::Approximate normal in 0.624 -0.624 0.307:  0.592 -0.801 0.0902, adjusted: 0.668 -0.668 0.328
+DEAL::Approximate normal in 0.435 0.00 0.170:  0.833 -0.193 0.519, adjusted: 0.932 -2.53e-17 0.363
+DEAL::Approximate normal in 0.312 0.153 0.312:  0.592 0.0902 0.801, adjusted: 0.668 0.328 0.668
+DEAL::Approximate normal in 0.312 -0.153 0.312:  0.592 -0.0902 0.801, adjusted: 0.668 -0.328 0.668
+DEAL::Approximate normal in 0.170 0.00 0.435:  0.519 -0.193 0.833, adjusted: 0.363 -1.58e-16 0.932
+DEAL::Approximate normal in 0.871 0.00 0.339:  0.833 -0.193 0.519, adjusted: 0.932 -2.53e-17 0.363
+DEAL::Approximate normal in 0.624 0.307 0.624:  0.592 0.0902 0.801, adjusted: 0.668 0.328 0.668
+DEAL::Approximate normal in 0.624 -0.307 0.624:  0.592 -0.0902 0.801, adjusted: 0.668 -0.328 0.668
+DEAL::Approximate normal in 0.339 0.00 0.871:  0.519 -0.193 0.833, adjusted: 0.363 -1.58e-16 0.932
+DEAL::Approximate normal in 0.153 0.312 0.312:  0.0902 0.592 0.801, adjusted: 0.328 0.668 0.668
+DEAL::Approximate normal in 6.94e-18 0.435 0.170:  -0.193 0.833 0.519, adjusted: 1.87e-16 0.932 0.363
+DEAL::Approximate normal in 6.94e-18 0.170 0.435:  -0.193 0.519 0.833, adjusted: -1.58e-16 0.363 0.932
+DEAL::Approximate normal in -0.153 0.312 0.312:  -0.0902 0.592 0.801, adjusted: -0.328 0.668 0.668
+DEAL::Approximate normal in 0.307 0.624 0.624:  0.0902 0.592 0.801, adjusted: 0.328 0.668 0.668
+DEAL::Approximate normal in 1.39e-17 0.871 0.339:  -0.193 0.833 0.519, adjusted: 1.87e-16 0.932 0.363
+DEAL::Approximate normal in 1.39e-17 0.339 0.871:  -0.193 0.519 0.833, adjusted: -1.58e-16 0.363 0.932
+DEAL::Approximate normal in -0.307 0.624 0.624:  -0.0902 0.592 0.801, adjusted: -0.328 0.668 0.668
+DEAL::Approximate normal in 0.435 0.170 0.00:  0.833 0.519 0.193, adjusted: 0.932 0.363 2.53e-17
+DEAL::Approximate normal in 0.312 0.312 -0.153:  0.592 0.801 -0.0902, adjusted: 0.668 0.668 -0.328
+DEAL::Approximate normal in 0.312 0.312 0.153:  0.592 0.801 0.0902, adjusted: 0.668 0.668 0.328
+DEAL::Approximate normal in 0.170 0.435 0.00:  0.519 0.833 0.193, adjusted: 0.363 0.932 1.58e-16
+DEAL::Approximate normal in 0.871 0.339 0.00:  0.833 0.519 0.193, adjusted: 0.932 0.363 2.53e-17
+DEAL::Approximate normal in 0.624 0.624 -0.307:  0.592 0.801 -0.0902, adjusted: 0.668 0.668 -0.328
+DEAL::Approximate normal in 0.624 0.624 0.307:  0.592 0.801 0.0902, adjusted: 0.668 0.668 0.328
+DEAL::Approximate normal in 0.339 0.871 0.00:  0.519 0.833 0.193, adjusted: 0.363 0.932 1.58e-16
+DEAL::Approximate normal in 0.312 -0.153 -0.312:  0.801 -0.0902 -0.592, adjusted: 0.668 -0.328 -0.668
+DEAL::Approximate normal in 0.170 -6.94e-18 -0.435:  0.519 0.193 -0.833, adjusted: 0.363 -1.87e-16 -0.932
+DEAL::Approximate normal in 0.435 -6.94e-18 -0.170:  0.833 0.193 -0.519, adjusted: 0.932 1.58e-16 -0.363
+DEAL::Approximate normal in 0.312 0.153 -0.312:  0.801 0.0902 -0.592, adjusted: 0.668 0.328 -0.668
+DEAL::Approximate normal in 0.624 -0.307 -0.624:  0.801 -0.0902 -0.592, adjusted: 0.668 -0.328 -0.668
+DEAL::Approximate normal in 0.339 -1.39e-17 -0.871:  0.519 0.193 -0.833, adjusted: 0.363 -1.87e-16 -0.932
+DEAL::Approximate normal in 0.871 -1.39e-17 -0.339:  0.833 0.193 -0.519, adjusted: 0.932 1.58e-16 -0.363
+DEAL::Approximate normal in 0.624 0.307 -0.624:  0.801 0.0902 -0.592, adjusted: 0.668 0.328 -0.668
+DEAL::Approximate normal in 0.00 0.170 -0.435:  0.193 0.519 -0.833, adjusted: 4.18e-16 0.363 -0.932
+DEAL::Approximate normal in -0.153 0.312 -0.312:  -0.0902 0.801 -0.592, adjusted: -0.328 0.668 -0.668
+DEAL::Approximate normal in 0.153 0.312 -0.312:  0.0902 0.801 -0.592, adjusted: 0.328 0.668 -0.668
+DEAL::Approximate normal in 0.00 0.435 -0.170:  0.193 0.833 -0.519, adjusted: 1.58e-16 0.932 -0.363
+DEAL::Approximate normal in 0.00 0.339 -0.871:  0.193 0.519 -0.833, adjusted: 4.18e-16 0.363 -0.932
+DEAL::Approximate normal in -0.307 0.624 -0.624:  -0.0902 0.801 -0.592, adjusted: -0.328 0.668 -0.668
+DEAL::Approximate normal in 0.307 0.624 -0.624:  0.0902 0.801 -0.592, adjusted: 0.328 0.668 -0.668
+DEAL::Approximate normal in 0.00 0.871 -0.339:  0.193 0.833 -0.519, adjusted: 1.58e-16 0.932 -0.363
+DEAL::Approximate normal in -0.312 0.312 -0.153:  -0.592 0.801 -0.0902, adjusted: -0.668 0.668 -0.328
+DEAL::Approximate normal in -0.435 0.170 -6.94e-18:  -0.833 0.519 0.193, adjusted: -0.932 0.363 -1.87e-16
+DEAL::Approximate normal in -0.170 0.435 -6.94e-18:  -0.519 0.833 0.193, adjusted: -0.363 0.932 1.58e-16
+DEAL::Approximate normal in -0.312 0.312 0.153:  -0.592 0.801 0.0902, adjusted: -0.668 0.668 0.328
+DEAL::Approximate normal in -0.624 0.624 -0.307:  -0.592 0.801 -0.0902, adjusted: -0.668 0.668 -0.328
+DEAL::Approximate normal in -0.871 0.339 -1.39e-17:  -0.833 0.519 0.193, adjusted: -0.932 0.363 -1.87e-16
+DEAL::Approximate normal in -0.339 0.871 -1.39e-17:  -0.519 0.833 0.193, adjusted: -0.363 0.932 1.58e-16
+DEAL::Approximate normal in -0.624 0.624 0.307:  -0.592 0.801 0.0902, adjusted: -0.668 0.668 0.328
+DEAL::Approximate normal in -0.170 0.00 -0.435:  -0.519 0.193 -0.833, adjusted: -0.363 4.18e-16 -0.932
+DEAL::Approximate normal in -0.312 -0.153 -0.312:  -0.801 -0.0902 -0.592, adjusted: -0.668 -0.328 -0.668
+DEAL::Approximate normal in -0.312 0.153 -0.312:  -0.801 0.0902 -0.592, adjusted: -0.668 0.328 -0.668
+DEAL::Approximate normal in -0.435 0.00 -0.170:  -0.833 0.193 -0.519, adjusted: -0.932 1.58e-16 -0.363
+DEAL::Approximate normal in -0.339 0.00 -0.871:  -0.519 0.193 -0.833, adjusted: -0.363 4.18e-16 -0.932
+DEAL::Approximate normal in -0.624 -0.307 -0.624:  -0.801 -0.0902 -0.592, adjusted: -0.668 -0.328 -0.668
+DEAL::Approximate normal in -0.624 0.307 -0.624:  -0.801 0.0902 -0.592, adjusted: -0.668 0.328 -0.668
+DEAL::Approximate normal in -0.871 0.00 -0.339:  -0.833 0.193 -0.519, adjusted: -0.932 1.58e-16 -0.363
+DEAL::Approximate normal in 0.153 -0.312 -0.312:  0.0902 -0.592 -0.801, adjusted: 0.328 -0.668 -0.668
+DEAL::Approximate normal in 6.94e-18 -0.435 -0.170:  -0.193 -0.833 -0.519, adjusted: 1.87e-16 -0.932 -0.363
+DEAL::Approximate normal in 6.94e-18 -0.170 -0.435:  -0.193 -0.519 -0.833, adjusted: -1.58e-16 -0.363 -0.932
+DEAL::Approximate normal in -0.153 -0.312 -0.312:  -0.0902 -0.592 -0.801, adjusted: -0.328 -0.668 -0.668
+DEAL::Approximate normal in 0.307 -0.624 -0.624:  0.0902 -0.592 -0.801, adjusted: 0.328 -0.668 -0.668
+DEAL::Approximate normal in 1.39e-17 -0.871 -0.339:  -0.193 -0.833 -0.519, adjusted: 1.87e-16 -0.932 -0.363
+DEAL::Approximate normal in 1.39e-17 -0.339 -0.871:  -0.193 -0.519 -0.833, adjusted: -1.58e-16 -0.363 -0.932
+DEAL::Approximate normal in -0.307 -0.624 -0.624:  -0.0902 -0.592 -0.801, adjusted: -0.328 -0.668 -0.668
diff --git a/tests/manifold/spherical_manifold_10.cc b/tests/manifold/spherical_manifold_10.cc
new file mode 100644 (file)
index 0000000..911b73c
--- /dev/null
@@ -0,0 +1,74 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+// Compare SphericalManifold::normal_vector with the result of
+// FEFaceValues::normal_vector. Those should give very similar results, but an
+// old implementation in the manifold gave wrong points
+
+#include "../tests.h"
+#include <deal.II/base/point.h>
+#include <deal.II/grid/manifold_lib.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/mapping_q_generic.h>
+
+using namespace dealii;
+
+int
+main()
+{
+  initlog();
+  deallog << std::setprecision(8);
+
+  constexpr unsigned int dim = 3;
+  SphericalManifold<3> spherical;
+
+  Triangulation<dim> tria;
+  GridGenerator::hyper_shell(tria, Point<dim>(), 0.5, 1., 96, true);
+  tria.set_all_manifold_ids(0);
+  tria.set_manifold(0, spherical);
+
+  MappingQGeneric<dim> mapping(4);
+  QGaussLobatto<dim-1> quadrature(4);
+  FE_Nothing<dim> dummy;
+  FEFaceValues<dim> fe_values(mapping, dummy, quadrature,
+                              update_normal_vectors | update_quadrature_points);
+
+  for (auto cell : tria.active_cell_iterators())
+    for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+      {
+        fe_values.reinit(cell, f);
+
+        // all points should coincide to an accuracy of at least 1e-8 (note
+        // that we use a 4-th degree mapping, so its accuracy on the 96 cell
+        // version of the sphere should but be enough)
+        const double tolerance = 1e-8;
+        for (unsigned int q=0; q<quadrature.size(); ++q)
+          {
+            const Tensor<1,dim> normal_manifold =
+              spherical.normal_vector(cell->face(f), fe_values.quadrature_point(q));
+            const Tensor<1,dim> normal_feval = fe_values.normal_vector(q);
+            if (std::abs(1.0 - std::abs(normal_manifold * normal_feval)) > tolerance)
+              deallog << "Error in point " << fe_values.quadrature_point(q) << ": "
+                      << "FEFaceValues says " << normal_feval << " but manifold says "
+                      << normal_manifold << std::endl;
+          }
+      }
+  deallog << "OK" << std::endl;
+
+  return 0;
+}
diff --git a/tests/manifold/spherical_manifold_10.output b/tests/manifold/spherical_manifold_10.output
new file mode 100644 (file)
index 0000000..0fd8fc1
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL::OK

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.