]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Implement ReferenceCell::unit_normal_vectors() 11555/head
authorPeter Munch <peterrmuench@gmail.com>
Fri, 15 Jan 2021 11:46:25 +0000 (12:46 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Fri, 15 Jan 2021 11:49:36 +0000 (12:49 +0100)
include/deal.II/grid/reference_cell.h
tests/simplex/unit_tangential_vectors_01.cc
tests/simplex/unit_tangential_vectors_01.output

index 971fa17cbd38c9c68d82a199b2c2b62a8dc38806..cf680f453761b5c4fbe78bd7efd2196ca50354af 100644 (file)
@@ -250,7 +250,7 @@ namespace ReferenceCell
     return Point<dim>(+0.0, +0.0, +0.0);
   }
 
-  /*
+  /**
    * Return i-th unit tangential vector of a face of the reference cell.
    * The vectors are arranged such that the
    * cross product between the two vectors returns the unit normal vector.
@@ -330,6 +330,44 @@ namespace ReferenceCell
     return {};
   }
 
+  /**
+   * Return the unit normal vector of a face of the reference cell.
+   */
+  template <int dim>
+  inline Tensor<1, dim>
+  unit_normal_vectors(const Type &reference_cell, const unsigned int face_no)
+  {
+    AssertDimension(dim, get_dimension(reference_cell));
+
+    if (reference_cell == get_hypercube(dim))
+      {
+        AssertIndexRange(face_no, GeometryInfo<dim>::faces_per_cell);
+        return GeometryInfo<dim>::unit_normal_vector[face_no];
+      }
+    else if (dim == 2)
+      {
+        const auto tangential =
+          unit_tangential_vectors<dim>(reference_cell, face_no, 0);
+
+        Tensor<1, dim> result;
+
+        result[0] = tangential[1];
+        result[1] = -tangential[0];
+
+        return result;
+      }
+    else if (dim == 3)
+      {
+        return cross_product_3d(
+          unit_tangential_vectors<dim>(reference_cell, face_no, 0),
+          unit_tangential_vectors<dim>(reference_cell, face_no, 1));
+      }
+
+    Assert(false, ExcNotImplemented());
+
+    return {};
+  }
+
   /*
    * Create a (coarse) grid with a single cell of the shape of the provided
    * reference cell.
index 660cb585f966be94dd0f0fd14df10741d4b15add..fae80a25baf4121059fa5d86cca9ead67d5cd0e7 100644 (file)
@@ -14,7 +14,8 @@
 // ---------------------------------------------------------------------
 
 
-// Test ReferenceCell::unit_tangential_vectors() for all reference-cell types.
+// Test ReferenceCell::unit_tangential_vectors() and ::unit_normal_vectors()
+// for all reference-cell types.
 
 
 #include <deal.II/grid/reference_cell.h>
@@ -31,11 +32,17 @@ test(const ReferenceCell::Type &reference_cell)
 {
   for (const auto face_no :
        ReferenceCell::internal::Info::get_cell(reference_cell).face_indices())
-    for (unsigned int i = 0; i < dim - 1; ++i)
-      deallog << ReferenceCell::unit_tangential_vectors<dim>(reference_cell,
-                                                             face_no,
-                                                             i)
+    {
+      deallog << ReferenceCell::unit_normal_vectors<dim>(reference_cell,
+                                                         face_no)
               << std::endl;
+
+      for (unsigned int i = 0; i < dim - 1; ++i)
+        deallog << ReferenceCell::unit_tangential_vectors<dim>(reference_cell,
+                                                               face_no,
+                                                               i)
+                << std::endl;
+    }
   deallog << std::endl;
 }
 
index 46a477ea046c854c9abecf159ddade0fd8460f59..9684a9bcd0ea71cd16e10285690982d21a94781d 100644 (file)
@@ -1,54 +1,81 @@
 
+DEAL::0.00000 -1.00000
 DEAL::1.00000 0.00000
+DEAL::0.707107 0.707107
 DEAL::-0.707107 0.707107
+DEAL::-1.00000 0.00000
 DEAL::0.00000 -1.00000
 DEAL::
+DEAL::-1.00000 0.00000
 DEAL::0.00000 -1.00000
+DEAL::1.00000 0.00000
 DEAL::0.00000 1.00000
+DEAL::0.00000 -1.00000
 DEAL::1.00000 0.00000
+DEAL::0.00000 1.00000
 DEAL::-1.00000 0.00000
 DEAL::
+DEAL::0.00000 0.00000 -1.00000
 DEAL::0.00000 1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
+DEAL::-1.00000 0.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
 DEAL::0.00000 1.00000 0.00000
+DEAL::0.577350 0.577350 0.577350
 DEAL::-0.759836 0.759836 0.00000
 DEAL::-0.759836 0.00000 0.759836
 DEAL::
+DEAL::0.00000 0.00000 -1.00000
 DEAL::0.00000 1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
+DEAL::-0.707107 0.00000 0.707107
 DEAL::0.707107 0.00000 0.707107
 DEAL::0.00000 1.00000 0.00000
+DEAL::0.707107 0.00000 0.707107
 DEAL::0.707107 0.00000 -0.707107
 DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 -0.707107 0.707107
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 0.707107 0.707107
+DEAL::0.00000 0.707107 0.707107
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 0.707107 -0.707107
 DEAL::
+DEAL::0.00000 0.00000 -1.00000
 DEAL::0.00000 1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
+DEAL::0.707107 0.707107 0.00000
 DEAL::-0.707107 0.707107 0.00000
 DEAL::0.00000 0.00000 1.00000
+DEAL::-1.00000 0.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
 DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 -1.00000 0.00000
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
 DEAL::
+DEAL::-1.00000 0.00000 0.00000
 DEAL::0.00000 -1.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
+DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 1.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
+DEAL::0.00000 -1.00000 0.00000
 DEAL::0.00000 0.00000 -1.00000
 DEAL::1.00000 0.00000 0.00000
+DEAL::0.00000 1.00000 0.00000
 DEAL::0.00000 0.00000 1.00000
 DEAL::1.00000 0.00000 0.00000
+DEAL::0.00000 0.00000 -1.00000
 DEAL::-1.00000 0.00000 0.00000
 DEAL::0.00000 1.00000 0.00000
+DEAL::0.00000 0.00000 1.00000
 DEAL::1.00000 0.00000 0.00000
 DEAL::0.00000 1.00000 0.00000
 DEAL::

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.