]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Move compute_mapping_data into internal namespace
authorRene Gassmoeller <rene.gassmoeller@mailbox.org>
Wed, 8 Dec 2021 18:49:44 +0000 (13:49 -0500)
committerRene Gassmoeller <rene.gassmoeller@mailbox.org>
Wed, 8 Dec 2021 18:52:54 +0000 (13:52 -0500)
include/deal.II/matrix_free/fe_point_evaluation.h
source/matrix_free/fe_point_evaluation.cc
tests/matrix_free/point_evaluation_15.cc
tests/matrix_free/point_evaluation_16.cc

index ddd9007e0ee91587151786c16dc4f821e2ae83a7..ad4141bfd0fada474ab46806242d3079492cb0ff 100644 (file)
@@ -364,18 +364,52 @@ namespace internal
     template <int dim, int spacedim>
     std::vector<Polynomials::Polynomial<double>>
     get_polynomial_space(const FiniteElement<dim, spacedim> &fe);
+
+    /**
+     * Compute the mapping related data for the given @p mapping,
+     * @p cell and @p unit_points that is required by the FEPointEvaluation
+     * class.
+     */
+    template <int dim, int spacedim>
+    void
+    compute_mapping_data_for_generic_points(
+      const Mapping<dim> &                                        mapping,
+      const typename Triangulation<dim, spacedim>::cell_iterator &cell,
+      const ArrayView<const Point<dim>> &                         unit_points,
+      const UpdateFlags                                           update_flags,
+      internal::FEValuesImplementation::MappingRelatedData<dim,
+                                                                   spacedim>
+        &mapping_data)
+    {
+      UpdateFlags update_flags_mapping = update_default;
+      // translate update flags
+      if (update_flags & update_jacobians)
+        update_flags_mapping |= update_jacobians;
+      if (update_flags & update_gradients ||
+          update_flags & update_inverse_jacobians)
+        update_flags_mapping |= update_inverse_jacobians;
+      if (update_flags & update_quadrature_points)
+        update_flags_mapping |= update_quadrature_points;
+
+      if (const MappingQ<dim, spacedim> *mapping_q =
+            dynamic_cast<const MappingQ<dim, spacedim> *>(&mapping))
+        {
+          mapping_q->fill_mapping_data_for_generic_points(cell,
+                                                          unit_points,
+                                                          update_flags_mapping,
+                                                          mapping_data);
+        }
+      else if (const MappingCartesian<dim, spacedim> *mapping_cartesian =
+                 dynamic_cast<const MappingCartesian<dim, spacedim> *>(
+                   &mapping))
+        {
+          mapping_cartesian->fill_mapping_data_for_generic_points(
+            cell, unit_points, update_flags_mapping, mapping_data);
+        }
+    }
   } // namespace FEPointEvaluation
 } // namespace internal
 
-template <int dim, int spacedim>
-void
-compute_mapping_data(
-  const Mapping<dim> &                                        mapping,
-  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
-  const ArrayView<const Point<dim>> &                         unit_points,
-  dealii::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
-    &mapping_data);
-
 /**
  * This class provides an interface to the evaluation of interpolated solution
  * values and gradients on cells on arbitrary reference point positions. These
@@ -461,8 +495,8 @@ public:
    * a precomputed @p mapping_data object. This function can be used
    * to avoid duplicated evaluation of the mapping if multiple
    * FEPointEvaluation objects for the different components of the same FESystem
-   * are used. You can retrieve the mapping data from a FEPointEvaluation object
-   * using the get_mapping_data() function.
+   * are used. You can precompute the mapping data
+   * using the function internal::FEPointEvaluation::compute_mapping_data().
    *
    * @param[in] cell An iterator to the current cell
    *
@@ -479,18 +513,6 @@ public:
          const dealii::internal::FEValuesImplementation::
            MappingRelatedData<dim, spacedim> &mapping_data);
 
-  /**
-   * Returns the mapping data that was computed during the last call to
-   * the reinit() function. This can be useful if multiple FEPointEvaluation
-   * objects are used for multiple components of a FESystem. The mapping data
-   * can be retrieved from the first FEPointEvaluation object and subsequently
-   * passed to the other objects, avoiding the need to recompute the mapping
-   * data.
-   */
-  const dealii::internal::FEValuesImplementation::MappingRelatedData<dim,
-                                                                     spacedim> &
-  get_mapping_data() const;
-
   /**
    * This function interpolates the finite element solution, represented by
    * `solution_values`, on the cell and `unit_points` passed to reinit().
@@ -811,43 +833,6 @@ FEPointEvaluation<n_components, dim, spacedim, Number>::FEPointEvaluation(
 }
 
 
-template <int dim, int spacedim>
-void
-compute_mapping_data_for_generic_points(
-  const Mapping<dim> &                                        mapping,
-  const typename Triangulation<dim, spacedim>::cell_iterator &cell,
-  const ArrayView<const Point<dim>> &                         unit_points,
-  const UpdateFlags                                           update_flags,
-  dealii::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
-    &mapping_data)
-{
-  UpdateFlags update_flags_mapping = update_default;
-  // translate update flags
-  if (update_flags & update_jacobians)
-    update_flags_mapping |= update_jacobians;
-  if (update_flags & update_gradients ||
-      update_flags & update_inverse_jacobians)
-    update_flags_mapping |= update_inverse_jacobians;
-  if (update_flags & update_quadrature_points)
-    update_flags_mapping |= update_quadrature_points;
-
-  if (const MappingQ<dim, spacedim> *mapping_q =
-        dynamic_cast<const MappingQ<dim, spacedim> *>(&mapping))
-    {
-      mapping_q->fill_mapping_data_for_generic_points(cell,
-                                                      unit_points,
-                                                      update_flags_mapping,
-                                                      mapping_data);
-    }
-  else if (const MappingCartesian<dim, spacedim> *mapping_cartesian =
-             dynamic_cast<const MappingCartesian<dim, spacedim> *>(&mapping))
-    {
-      mapping_cartesian->fill_mapping_data_for_generic_points(
-        cell, unit_points, update_flags_mapping, mapping_data);
-    }
-}
-
-
 
 template <int n_components, int dim, int spacedim, typename Number>
 void
@@ -857,7 +842,7 @@ FEPointEvaluation<n_components, dim, spacedim, Number>::reinit(
 {
   // If using the fast path, we need to precompute the mapping data.
   if (!poly.empty())
-    compute_mapping_data_for_generic_points(
+    internal::FEPointEvaluation::compute_mapping_data_for_generic_points(
       *mapping, cell, unit_points, update_flags_mapping, mapping_data);
 
   // then call the other version of this function with the precomputed data
@@ -930,15 +915,6 @@ FEPointEvaluation<n_components, dim, spacedim, Number>::reinit(
 }
 
 
-template <int n_components, int dim, int spacedim, typename Number>
-const dealii::internal::FEValuesImplementation::MappingRelatedData<dim,
-                                                                   spacedim> &
-FEPointEvaluation<n_components, dim, spacedim, Number>::get_mapping_data() const
-{
-  return mapping_data;
-}
-
-
 
 template <int n_components, int dim, int spacedim, typename Number>
 void
index 3770f18435e94aa654fd2ca720f411e12115f0f4..cbe0ef2fcb28c9a29aa32df7cf6656064b126fcc 100644 (file)
@@ -83,14 +83,11 @@ namespace internal
     bool
     is_fast_path_supported(const Mapping<dim, spacedim> &mapping)
     {
-      if (const MappingQ<dim, spacedim> *mapping_q =
-            dynamic_cast<const MappingQ<dim, spacedim> *>(&mapping))
+      if (dynamic_cast<const MappingQ<dim, spacedim> *>(&mapping))
         {
           return true;
         }
-      else if (const MappingCartesian<dim, spacedim> *mapping_cartesian =
-                 dynamic_cast<const MappingCartesian<dim, spacedim> *>(
-                   &mapping))
+      else if (dynamic_cast<const MappingCartesian<dim, spacedim> *>(&mapping))
         {
           return true;
         }
index 8383e3870e28a75e98f3a7592541230ba62d74be..cb68738badee857bed85e42ac5ab742f71a80ce3 100644 (file)
@@ -112,7 +112,14 @@ test()
       evaluator1.evaluate(solution_values,
                           EvaluationFlags::values | EvaluationFlags::gradients);
 
-      const auto &mapping_data = evaluator1.get_mapping_data();
+      internal::FEValuesImplementation::MappingRelatedData<dim> mapping_data;
+      internal::FEPointEvaluation::compute_mapping_data_for_generic_points<dim>(
+        mapping,
+        cell,
+        unit_points,
+        update_values | update_gradients,
+        mapping_data);
+
       evaluator2.reinit(cell, unit_points, mapping_data);
       evaluator2.evaluate(solution_values,
                           EvaluationFlags::values | EvaluationFlags::gradients);
index a7d8891b4fe1663b73457023cc3f1db460950b09..dc01e6f75f0f73e9878dd5b76c338fe3c2189eeb 100644 (file)
@@ -112,7 +112,14 @@ test(const unsigned int degree)
       evaluator.evaluate(solution_values,
                          EvaluationFlags::values | EvaluationFlags::gradients);
 
-      const auto &mapping_data = evaluator.get_mapping_data();
+      internal::FEValuesImplementation::MappingRelatedData<dim> mapping_data;
+      internal::FEPointEvaluation::compute_mapping_data_for_generic_points<dim>(
+        mapping,
+        cell,
+        unit_points,
+        update_values | update_gradients,
+        mapping_data);
+
       evaluator2.reinit(cell, unit_points, mapping_data);
       evaluator2.evaluate(solution_values,
                           EvaluationFlags::values | EvaluationFlags::gradients);

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.