]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Provide the hp::DoFHandler class with a policy object.
authorWolfgang Bangerth <bangerth@colostate.edu>
Tue, 27 Jun 2017 14:23:05 +0000 (08:23 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Sat, 1 Jul 2017 23:40:59 +0000 (17:40 -0600)
include/deal.II/dofs/dof_handler.h
include/deal.II/hp/dof_handler.h
source/hp/dof_handler.cc

index b3862ebe3d449643fd0fea67cba24580dad00bf9..ae3fe3df737f13fb690e1c3ead1531a28f969bc3 100644 (file)
@@ -1272,7 +1272,7 @@ DoFHandler<dim,spacedim>::n_boundary_dofs (const std::map<types::boundary_id, co
 namespace internal
 {
   /**
-   * returns a string representing the dynamic type of the given argument.
+   * Return a string representing the dynamic type of the given argument.
    * This is basically the same what typeid(...).name() does, but it turns out
    * this is broken on Intel 13+.
    *
index 0a5b3bb5d0b0cd0680fe8473397bb73682e3adb3..679b2ee7f883bbec9ce62c6edf5caecc6274786b 100644 (file)
@@ -41,6 +41,17 @@ template <int dim, int spacedim> class Triangulation;
 
 namespace internal
 {
+  namespace DoFHandler
+  {
+    struct Implementation;
+
+    namespace Policy
+    {
+      template <int dim, int spacedim> class PolicyBase;
+      struct Implementation;
+    }
+  }
+
   namespace hp
   {
     class DoFLevel;
@@ -734,7 +745,12 @@ namespace hp
      */
     SmartPointer<const hp::FECollection<dim,spacedim>,hp::DoFHandler<dim,spacedim> > finite_elements;
 
-  private:
+    /**
+     * An object that describes how degrees of freedom should be distributed and
+     * renumbered.
+     */
+    std::unique_ptr<dealii::internal::DoFHandler::Policy::PolicyBase<dim,spacedim> > policy;
+
 
     /**
      * Free all used memory.
@@ -919,9 +935,25 @@ namespace hp
     // then just hand everything over to the other function that does the work
     return n_boundary_dofs(boundary_ids_only);
   }
+}
 
 
+namespace internal
+{
+  /**
+   * Return a string representing the dynamic type of the given argument.
+   * This is basically the same what typeid(...).name() does, but it turns out
+   * this is broken on Intel 13+.
+   *
+   * Defined in source/dofs/dof_handler.cc.
+   */
+  template <int dim, int spacedim>
+  std::string policy_to_string(const dealii::internal::DoFHandler::Policy::PolicyBase<dim,spacedim> &policy);
+}
+
 
+namespace hp
+{
   template <int dim, int spacedim>
   template <class Archive>
   void DoFHandler<dim, spacedim>::save(Archive &ar, unsigned int) const
@@ -934,12 +966,16 @@ namespace hp
     ar &has_children;
 
     // write out the number of triangulation cells and later check during
-    // loading that this number is indeed correct;
+    // loading that this number is indeed correct; same with something that
+    // identifies the policy
     unsigned int n_cells = tria->n_cells();
+    std::string  policy_name = dealii::internal::policy_to_string(*policy);
 
-    ar &n_cells;
+    ar &n_cells &policy_name;
   }
 
+
+
   template <int dim, int spacedim>
   template <class Archive>
   void DoFHandler<dim, spacedim>::load(Archive &ar, unsigned int)
@@ -968,12 +1004,20 @@ namespace hp
     // these are the checks that correspond to the last block in the save()
     // function
     unsigned int n_cells;
-
-    ar &n_cells;
-
-    AssertThrow(n_cells == tria->n_cells(),
-                ExcMessage("The object being loaded into does not match the triangulation "
-                           "that has been stored previously."));
+    std::string  policy_name;
+
+    ar &n_cells &policy_name;
+
+    AssertThrow (n_cells == tria->n_cells(),
+                 ExcMessage ("The object being loaded into does not match the triangulation "
+                             "that has been stored previously."));
+    AssertThrow (policy_name == dealii::internal::policy_to_string(*policy),
+                 ExcMessage (std::string ("The policy currently associated with this DoFHandler (")
+                             + dealii::internal::policy_to_string(*policy)
+                             +std::string(") does not match the one that was associated with the "
+                                          "DoFHandler previously stored (")
+                             + policy_name
+                             + ")."));
   }
 
   template <int dim, int spacedim>
index 34a11d2df94ff4d0106a79d3099849954b866b07..55b874de1e800d6dc2fcb3be54f4f732fadc7832 100644 (file)
@@ -20,6 +20,7 @@
 #include <deal.II/hp/dof_level.h>
 #include <deal.II/hp/dof_faces.h>
 #include <deal.II/dofs/dof_accessor.h>
+#include <deal.II/dofs/dof_handler_policy.h>
 #include <deal.II/grid/tria_accessor.h>
 #include <deal.II/grid/tria_iterator.h>
 #include <deal.II/grid/tria_levels.h>

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.