]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Introduce FiniteElementData::max_dofs_per_quad() and FiniteElementData::max_dofs_per_... 10777/head
authorPeter Munch <peterrmuench@gmail.com>
Fri, 31 Jul 2020 19:02:18 +0000 (21:02 +0200)
committerPeter Munch <peterrmuench@gmail.com>
Sat, 1 Aug 2020 20:36:13 +0000 (22:36 +0200)
include/deal.II/fe/fe_base.h
include/deal.II/hp/fe_collection.h
source/dofs/dof_handler_policy.cc
source/fe/fe_data.cc

index 3b69a65a82913717375454f3130a35f3c02ff435..c8db30f1197fdb53e797376560f1ff9eff63cb0c 100644 (file)
@@ -243,6 +243,13 @@ public:
    */
   const unsigned int dofs_per_quad;
 
+private:
+  /**
+   * Maximum number of degrees of freedom on any quad.
+   */
+  const unsigned int dofs_per_quad_max;
+
+public:
   /**
    * Number of degrees of freedom in a hexahedron; not including the degrees
    * of freedom on the quadrilaterals, lines and vertices of the hexahedron.
@@ -281,6 +288,13 @@ public:
    */
   const unsigned int dofs_per_face;
 
+private:
+  /**
+   * Maximum number of degrees of freedom on any face.
+   */
+  const unsigned int dofs_per_face_max;
+
+public:
   /**
    * Total number of degrees of freedom on a cell. This is the accumulated
    * number of degrees of freedom on all the objects of dimension up to
@@ -395,6 +409,13 @@ public:
   unsigned int
   n_dofs_per_quad() const;
 
+  /**
+   * Maximum number of dofs per quad. Not including dofs on lower dimensional
+   * objects.
+   */
+  unsigned int
+  max_dofs_per_quad() const;
+
   /**
    * Number of dofs per hex. Not including dofs on lower dimensional objects.
    */
@@ -408,6 +429,13 @@ public:
   unsigned int
   n_dofs_per_face() const;
 
+  /**
+   * Maximum number of dofs per face, accumulating degrees of freedom of all
+   * lower dimensional objects.
+   */
+  unsigned int
+  max_dofs_per_face() const;
+
   /**
    * Number of dofs per cell, accumulating degrees of freedom of all lower
    * dimensional objects.
@@ -594,6 +622,15 @@ FiniteElementData<dim>::n_dofs_per_quad() const
 
 
 
+template <int dim>
+inline unsigned int
+FiniteElementData<dim>::max_dofs_per_quad() const
+{
+  return dofs_per_quad_max;
+}
+
+
+
 template <int dim>
 inline unsigned int
 FiniteElementData<dim>::n_dofs_per_hex() const
@@ -612,6 +649,15 @@ FiniteElementData<dim>::n_dofs_per_face() const
 
 
 
+template <int dim>
+inline unsigned int
+FiniteElementData<dim>::max_dofs_per_face() const
+{
+  return dofs_per_face_max;
+}
+
+
+
 template <int dim>
 inline unsigned int
 FiniteElementData<dim>::n_dofs_per_cell() const
index 2dfe8194f173c7eb86241cac55d0020cb57ededf..c6e6f87956611e6faf5ccf883fe9e28e8cd2bddf 100644 (file)
@@ -884,8 +884,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_vertex() > max)
-        max = finite_elements[i]->n_dofs_per_vertex();
+      max = std::max(max, finite_elements[i]->n_dofs_per_vertex());
 
     return max;
   }
@@ -900,8 +899,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_line() > max)
-        max = finite_elements[i]->n_dofs_per_line();
+      max = std::max(max, finite_elements[i]->n_dofs_per_line());
 
     return max;
   }
@@ -916,8 +914,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_quad() > max)
-        max = finite_elements[i]->n_dofs_per_quad();
+      max = std::max(max, finite_elements[i]->max_dofs_per_quad());
 
     return max;
   }
@@ -932,8 +929,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_hex() > max)
-        max = finite_elements[i]->n_dofs_per_hex();
+      max = std::max(max, finite_elements[i]->n_dofs_per_hex());
 
     return max;
   }
@@ -948,8 +944,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_face() > max)
-        max = finite_elements[i]->n_dofs_per_face();
+      max = std::max(max, finite_elements[i]->max_dofs_per_face());
 
     return max;
   }
@@ -964,8 +959,7 @@ namespace hp
 
     unsigned int max = 0;
     for (unsigned int i = 0; i < finite_elements.size(); ++i)
-      if (finite_elements[i]->n_dofs_per_cell() > max)
-        max = finite_elements[i]->n_dofs_per_cell();
+      max = std::max(max, finite_elements[i]->n_dofs_per_cell());
 
     return max;
   }
index f5195216c316dd7cb1819995a81e6b713e685c49..c36f9866b58aaf45021c0c400fa69c8ff4ecee43 100644 (file)
@@ -2619,7 +2619,7 @@ namespace internal
           const bool               check_validity)
         {
           if (dof_handler.get_fe().n_dofs_per_line() > 0 ||
-              dof_handler.get_fe().n_dofs_per_quad() > 0)
+              dof_handler.get_fe().max_dofs_per_quad() > 0)
             {
               // save user flags as they will be modified
               std::vector<bool> user_flags;
index f9fff482ff17ff37efd55e5a4f244d07f196ff22..21e16f708a3faf549d2158d87442a3383c873089 100644 (file)
@@ -50,6 +50,7 @@ FiniteElementData<dim>::FiniteElementData(
   , dofs_per_vertex(dofs_per_object[0])
   , dofs_per_line(dofs_per_object[1])
   , dofs_per_quad(dim > 1 ? dofs_per_object[2] : 0)
+  , dofs_per_quad_max(dofs_per_quad)
   , dofs_per_hex(dim > 2 ? dofs_per_object[3] : 0)
   , first_line_index(
       ReferenceCell::internal::Info::get_cell(cell_type).n_vertices() *
@@ -83,6 +84,7 @@ FiniteElementData<dim>::FiniteElementData(
       ReferenceCell::internal::Info::get_face(cell_type, 0).n_lines() *
         dofs_per_line +
       (dim == 3 ? 1 : 0) * dofs_per_quad)
+  , dofs_per_face_max(dofs_per_face)
   , dofs_per_cell(
       ReferenceCell::internal::Info::get_cell(cell_type).n_vertices() *
         dofs_per_vertex +

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.