]> https://gitweb.dealii.org/ - dealii.git/commitdiff
reintroduce get_mapping_data()
authorRene Gassmoeller <rene.gassmoeller@mailbox.org>
Sat, 8 Jan 2022 17:50:22 +0000 (12:50 -0500)
committerRene Gassmoeller <rene.gassmoeller@mailbox.org>
Sat, 8 Jan 2022 18:07:49 +0000 (13:07 -0500)
include/deal.II/matrix_free/fe_point_evaluation.h
tests/matrix_free/point_evaluation_15.cc
tests/matrix_free/point_evaluation_16.cc

index dce59ef328bc61156e1d176b46b7d13265606103..0428e2e2f251c98fbd4f8c1235be4f05ee3421c9 100644 (file)
@@ -409,6 +409,8 @@ namespace internal
   } // namespace FEPointEvaluation
 } // namespace internal
 
+
+
 /**
  * This class provides an interface to the evaluation of interpolated solution
  * values and gradients on cells on arbitrary reference point positions. These
@@ -494,8 +496,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 precompute the mapping data
-   * using the function internal::FEPointEvaluation::compute_mapping_data().
+   * are used. You can get the mapping data from an initialized FEPointEvaluation
+   * object by calling the function get_mapping_data().
    *
    * @param[in] cell An iterator to the current cell
    *
@@ -512,6 +514,18 @@ 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().
@@ -915,6 +929,16 @@ 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
 FEPointEvaluation<n_components, dim, spacedim, Number>::evaluate(
index cb68738badee857bed85e42ac5ab742f71a80ce3..310f403a24fc80b3d1ee59bfb9f589570e8aab08 100644 (file)
@@ -112,15 +112,7 @@ test()
       evaluator1.evaluate(solution_values,
                           EvaluationFlags::values | EvaluationFlags::gradients);
 
-      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.reinit(cell, unit_points, evaluator1.get_mapping_data());
       evaluator2.evaluate(solution_values,
                           EvaluationFlags::values | EvaluationFlags::gradients);
 
index dc01e6f75f0f73e9878dd5b76c338fe3c2189eeb..07f609d6b60a9f6b480dab77c4df1ec57e752b9c 100644 (file)
@@ -112,15 +112,7 @@ test(const unsigned int degree)
       evaluator.evaluate(solution_values,
                          EvaluationFlags::values | EvaluationFlags::gradients);
 
-      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.reinit(cell, unit_points, evaluator.get_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.