]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
rework r31702
authorheister <heister@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 19 Nov 2013 16:40:27 +0000 (16:40 +0000)
committerheister <heister@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 19 Nov 2013 16:40:27 +0000 (16:40 +0000)
git-svn-id: https://svn.dealii.org/trunk@31711 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/dofs/dof_handler.h
deal.II/include/deal.II/dofs/dof_handler_policy.h
deal.II/source/dofs/dof_handler_policy.cc

index a6a1d88142da5ac4dc365bf3d2a1b79a33079e0e..aa3ac71149a3e8cca133cda989197b1b946e56a6 100644 (file)
@@ -1248,6 +1248,32 @@ DoFHandler<dim,spacedim>::block_info () const
 }
 
 
+namespace internal
+{
+  /**
+   * returns 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+.
+   */
+    template<int dim, int spacedim>
+    std::string policy_to_string(const dealii::internal::DoFHandler::Policy::PolicyBase<dim,spacedim> & policy)
+    {
+      std::string policy_name;
+      if (dynamic_cast<const typename dealii::internal::DoFHandler::Policy::Sequential<dim,spacedim>*>(&policy))
+          policy_name = "Policy::Sequential<";
+      else
+        if (dynamic_cast<const typename dealii::internal::DoFHandler::Policy::ParallelDistributed<dim,spacedim>*>(&policy))
+            policy_name = "Policy::ParallelDistributed<";
+        else
+          AssertThrow(false, ExcNotImplemented());
+      policy_name += Utilities::int_to_string(dim)+
+              ","+Utilities::int_to_string(spacedim)+">";
+      return policy_name;
+    }
+
+}
+
+
 template <int dim, int spacedim>
 template <class Archive>
 void DoFHandler<dim,spacedim>::save (Archive &ar,
@@ -1264,7 +1290,7 @@ void DoFHandler<dim,spacedim>::save (Archive &ar,
   // identifies the FE and the policy
   unsigned int n_cells = tria->n_cells();
   std::string  fe_name = selected_fe->get_name();
-  std::string  policy_name = policy->to_string();
+  std::string  policy_name = internal::policy_to_string(*policy);
 
   ar &n_cells &fe_name &policy_name;
 }
@@ -1305,9 +1331,9 @@ void DoFHandler<dim,spacedim>::load (Archive &ar,
   AssertThrow (fe_name == selected_fe->get_name(),
                ExcMessage ("The finite element associated with this DoFHandler does not match "
                            "the one that was associated with the DoFHandler previously stored."));
-  AssertThrow (policy_name == policy->to_string(),
+  AssertThrow (policy_name == internal::policy_to_string(*policy),
                ExcMessage (std::string ("The policy currently associated with this DoFHandler (")
-                          + policy->to_string()
+                          + internal::policy_to_string(*policy)
                           +std::string(") does not match the one that was associated with the "
                                       "DoFHandler previously stored (")
                           + policy_name
index 39a07a544faf6c4b1ed4862be9220251605330eb..42eecf8afa2ea9c73299017ccbe98e34b326b301 100644 (file)
@@ -64,13 +64,6 @@ namespace internal
          */
         virtual ~PolicyBase ();
 
-       /**
-        * Convert type of policy to a string. This is used as a
-        * workaround in serialization because the intel compiler can
-        * not handle typeid correctly.
-        */
-       virtual std::string to_string () const = 0;
-
         /**
          * Distribute degrees of freedom on
          * the object given as last argument.
@@ -115,14 +108,6 @@ namespace internal
         virtual
         NumberCache
         distribute_dofs (dealii::DoFHandler<dim,spacedim> &dof_handler) const;
-       
-       /**
-        * Convert type of policy to a string. This is used as a
-        * workaround in serialization because the intel compiler can
-        * not handle typeid correctly.
-        */
-       virtual std::string to_string () const;
-
 
         /**
          * Distribute multigrid DoFs.
@@ -162,13 +147,6 @@ namespace internal
         NumberCache
         distribute_dofs (dealii::DoFHandler<dim,spacedim> &dof_handler) const;
 
-       /**
-        * Convert type of policy to a string. This is used as a
-        * workaround in serialization because the intel compiler can
-        * not handle typeid correctly.
-        */
-       virtual std::string to_string () const;
-
         /**
          * Distribute multigrid DoFs.
          */
index 4e8a60fc77c7a893007cd0d01e5ec18d22311512..3db4b2104af7c2a615ae8f7bd831618b466a4b93 100644 (file)
@@ -866,16 +866,8 @@ namespace internal
       PolicyBase<dim,spacedim>::~PolicyBase ()
       {}
 
-      /* --------------------- class Sequential ---------------- */
-       
-      template <int dim, int spacedim>
-      std::string 
-      Sequential<dim,spacedim>::to_string () const
-      {
-       return "Policy::Sequential<"+Utilities::int_to_string(dim)+
-         ","+Utilities::int_to_string(spacedim)+">";
-      }
 
+      /* --------------------- class Sequential ---------------- */
 
 
       template <int dim, int spacedim>
@@ -1934,13 +1926,6 @@ namespace internal
 
 #endif // DEAL_II_WITH_P4EST
 
-      template <int dim, int spacedim>
-      std::string 
-      ParallelDistributed<dim,spacedim>::to_string () const
-      {
-       return "Policy::ParallelDistributed<"+Utilities::int_to_string(dim)+
-         ","+Utilities::int_to_string(spacedim)+">";
-      }
 
 
       template <int dim, int spacedim>

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.