]> https://gitweb.dealii.org/ - dealii.git/commitdiff
No longer require active_fe_index when calling cell->vertex_dof_index().
authorWolfgang Bangerth <bangerth@colostate.edu>
Fri, 2 Jul 2021 23:25:56 +0000 (17:25 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Fri, 2 Jul 2021 23:28:18 +0000 (17:28 -0600)
include/deal.II/dofs/dof_accessor.h
include/deal.II/dofs/dof_accessor.templates.h

index a011cda7dab52b26e84ac3131a7c9ce30fcfb6b5..39d95fc4652800b2e51d1c13d7daa0c7d01ca613 100644 (file)
@@ -477,14 +477,18 @@ public:
    * ::DoFHandler class, this value must be equal to its default value since
    * that class only supports the same finite element on all cells anyway.
    *
-   * However, when hp-capabilities are enabled, different finite element
-   * objects may be used on different cells. On faces between two cells, as
-   * well as vertices, there may therefore be two sets of degrees of freedom,
-   * one for each of the finite elements used on the adjacent cells.  In order
-   * to specify which set of degrees of freedom to work on, the last argument
-   * is used to disambiguate. Finally, if this function is called for a cell
+   * However, when hp-capabilities are enabled, different finite
+   * element objects may be used on different cells. On faces between
+   * two cells, as well as vertices, there may therefore be two sets
+   * of degrees of freedom, one for each of the finite elements used
+   * on the adjacent cells.  In order to specify which set of degrees
+   * of freedom to work on, the last argument is used to
+   * disambiguate. Finally, if this function is called for a cell
    * object, there can only be a single set of degrees of freedom, and
-   * fe_index has to match the result of active_fe_index().
+   * `fe_index` has to match the result of
+   * `cell->active_fe_index()`. Alternatively, if `fe_index` is left
+   * to its default value when this function is called on a cell, then
+   * this is interpreted as equal to `cell->active_fe_index()`.
    */
   types::global_dof_index
   vertex_dof_index(const unsigned int vertex,
index 1f3c77bc6c3bf6aa82bb74891b816ea317e2f10a..d665de9ff0c03b427bdbd2b404a5d191c4992c62 100644 (file)
@@ -1627,10 +1627,20 @@ DoFAccessor<structdim, dim, spacedim, level_dof_access>::vertex_dof_index(
   const unsigned int fe_index_) const
 {
   const unsigned int fe_index =
-    (this->dof_handler->hp_capability_enabled == false &&
-     fe_index_ == DoFHandler<dim, spacedim>::invalid_fe_index) ?
-      DoFHandler<dim, spacedim>::default_fe_index :
-      fe_index_;
+    (((this->dof_handler->hp_capability_enabled == false) &&
+      (fe_index_ == DoFHandler<dim, spacedim>::invalid_fe_index)) ?
+       // No hp enabled, and the argument is at its default value -> we
+       // can translate to the default active fe index
+       DoFHandler<dim, spacedim>::default_fe_index :
+       // Otherwise: If anything other than the default is provided by
+       // the caller, then we should take just that. As an exception, if
+       // we are on a cell (rather than a face/edge/vertex), then we know
+       // that there is only one active fe index on this cell and we can
+       // use that:
+       ((dim == structdim) &&
+            (fe_index_ == DoFHandler<dim, spacedim>::invalid_fe_index) ?
+          this->nth_active_fe_index(0) :
+          fe_index_));
 
   return dealii::internal::DoFAccessorImplementation::Implementation::
     get_dof_index(*this->dof_handler,

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.