]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add additional lexicographic_to_hierarchic_numbering functions
authorMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Sun, 5 Apr 2020 14:08:47 +0000 (16:08 +0200)
committerMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Wed, 8 Apr 2020 10:22:16 +0000 (12:22 +0200)
include/deal.II/fe/fe_tools.h
include/deal.II/fe/fe_tools.templates.h
source/fe/fe_tools.cc
source/fe/fe_tools.inst.in

index 1d88e3e8172f8a9e1eaec361454364fc8e219a30..860f58817cb22a6a8b772bef932b25698a41dcfb 100644 (file)
@@ -909,12 +909,23 @@ namespace FETools
    * correct size, which is equal to the number of degrees of freedom in the
    * finite element.
    */
-
   template <int dim>
   void
   hierarchic_to_lexicographic_numbering(unsigned int               degree,
                                         std::vector<unsigned int> &h2l);
 
+  /**
+   * Like the previous function but instead of returning its result through
+   * the last argument return it as a value.
+   */
+  template <int dim>
+  std::vector<unsigned int>
+  hierarchic_to_lexicographic_numbering(unsigned int degree);
+
+  /**
+   * Like the previous functions but using a FiniteElementData instead of the
+   * polynomial degree.
+   */
   template <int dim>
   void
   hierarchic_to_lexicographic_numbering(const FiniteElementData<dim> &fe_data,
@@ -934,6 +945,14 @@ namespace FETools
    * about the above function are also valid here.
    */
   template <int dim>
+  std::vector<unsigned int>
+  lexicographic_to_hierarchic_numbering(unsigned int degree);
+
+  /**
+   * Like the previous functions but using a FiniteElementData instead of the
+   * polynomial degree.
+   */
+  template <int dim>
   void
   lexicographic_to_hierarchic_numbering(const FiniteElementData<dim> &fe_data,
                                         std::vector<unsigned int> &   l2h);
index d8f4c374b4512c8b41651f95f12bfaaae1c01e30..b4a594fa3aefb0839d9e682a609eca82b191a342 100644 (file)
@@ -3146,6 +3146,11 @@ namespace FETools
     // order
     switch (dim)
       {
+        case 0:
+          {
+            h2l[0] = 0;
+            break;
+          }
         case 1:
           {
             h2l[0] = 0;
@@ -3288,6 +3293,17 @@ namespace FETools
 
 
 
+  template <int dim>
+  std::vector<unsigned int>
+  hierarchic_to_lexicographic_numbering(const unsigned int degree)
+  {
+    std::vector<unsigned int> h2l(Utilities::pow(degree + 1, dim));
+    hierarchic_to_lexicographic_numbering<dim>(degree, h2l);
+    return h2l;
+  }
+
+
+
   template <int dim>
   void
   hierarchic_to_lexicographic_numbering(const FiniteElementData<dim> &fe,
@@ -3312,6 +3328,16 @@ namespace FETools
 
 
 
+  template <int dim>
+  std::vector<unsigned int>
+  lexicographic_to_hierarchic_numbering(const unsigned int degree)
+  {
+    return Utilities::invert_permutation(
+      hierarchic_to_lexicographic_numbering<dim>(degree));
+  }
+
+
+
   template <int dim>
   void
   lexicographic_to_hierarchic_numbering(const FiniteElementData<dim> &fe,
index 4b7989991eea61df9a47b61efad8b8279f6260e9..c56e6c8725b9ba0a68adbd672099011942cc44a1 100644 (file)
@@ -21,4 +21,18 @@ DEAL_II_NAMESPACE_OPEN
 /*-------------- Explicit Instantiations -------------------------------*/
 #include "fe_tools.inst"
 
+// these do not fit into the templates of the dimension in the inst file
+namespace FETools
+{
+  template void
+  hierarchic_to_lexicographic_numbering<0>(unsigned int,
+                                           std::vector<unsigned int> &);
+
+  template std::vector<unsigned int>
+  hierarchic_to_lexicographic_numbering<0>(unsigned int);
+
+  template std::vector<unsigned int>
+  lexicographic_to_hierarchic_numbering<0>(unsigned int);
+} // namespace FETools
+
 DEAL_II_NAMESPACE_CLOSE
index dd3a0fbeb79c7f092b486f85f526cd04fda34cd9..80e250772034c7aac000e4c8d41ebf82f81a557c 100644 (file)
@@ -271,6 +271,12 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS)
         const FiniteElementData<deal_II_dimension> &,
         std::vector<unsigned int> &);
 
+      template std::vector<unsigned int>
+      hierarchic_to_lexicographic_numbering<deal_II_dimension>(unsigned int);
+
+      template std::vector<unsigned int>
+      lexicographic_to_hierarchic_numbering<deal_II_dimension>(unsigned int);
+
       template std::vector<unsigned int>
       hierarchic_to_lexicographic_numbering<deal_II_dimension>(
         const FiniteElementData<deal_II_dimension> &);

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.