]> https://gitweb.dealii.org/ - dealii.git/commitdiff
FEPointEvaluation for float 12177/head
authorPeter Munch <peterrmuench@gmail.com>
Tue, 11 May 2021 06:49:06 +0000 (08:49 +0200)
committerPeter Munch <peterrmuench@gmail.com>
Tue, 11 May 2021 18:09:13 +0000 (20:09 +0200)
include/deal.II/base/derivative_form.h
include/deal.II/base/function_lib.h
include/deal.II/fe/fe_point_evaluation.h
source/base/function_lib.cc
tests/fe/point_evaluation_01.cc
tests/fe/point_evaluation_01.output

index 950bc01c49ae158207929906fc8ff2e323a3220f..38f95f1e93982423867f9acab0b715563c187e83 100644 (file)
@@ -424,12 +424,12 @@ DerivativeForm<order, dim, spacedim, Number>::memory_consumption()
  *
  * @relatesalso DerivativeForm
  */
-template <int spacedim, int dim, typename Number>
-inline Tensor<1, spacedim, Number>
-apply_transformation(const DerivativeForm<1, dim, spacedim, Number> &grad_F,
-                     const Tensor<1, dim, Number> &                  d_x)
+template <int spacedim, int dim, typename Number1, typename Number2 = Number1>
+inline Tensor<1, spacedim, Number2>
+apply_transformation(const DerivativeForm<1, dim, spacedim, Number1> &grad_F,
+                     const Tensor<1, dim, Number2> &                  d_x)
 {
-  Tensor<1, spacedim, Number> dest;
+  Tensor<1, spacedim, Number2> dest;
   for (unsigned int i = 0; i < spacedim; ++i)
     dest[i] = grad_F[i] * d_x;
   return dest;
index eaf4c092049dd848174a16b14a32ec039ef5c679..e2205ab576270c2ba8470ade8048bea58a12ac82 100644 (file)
@@ -1316,8 +1316,8 @@ namespace Functions
    *
    * @ingroup functions
    */
-  template <int dim>
-  class Monomial : public Function<dim>
+  template <int dim, typename Number = double>
+  class Monomial : public Function<dim, Number>
   {
   public:
     /**
@@ -1326,13 +1326,13 @@ namespace Functions
      * components this object shall represent. All vector components will have
      * the same value.
      */
-    Monomial(const Tensor<1, dim> &exponents,
-             const unsigned int    n_components = 1);
+    Monomial(const Tensor<1, dim, Number> &exponents,
+             const unsigned int            n_components = 1);
 
     /**
      * Function value at one point.
      */
-    virtual double
+    virtual Number
     value(const Point<dim> &p, const unsigned int component = 0) const override;
 
     /**
@@ -1342,20 +1342,20 @@ namespace Functions
      * #n_components.
      */
     virtual void
-    vector_value(const Point<dim> &p, Vector<double> &values) const override;
+    vector_value(const Point<dim> &p, Vector<Number> &values) const override;
 
     /**
      * Function values at multiple points.
      */
     virtual void
     value_list(const std::vector<Point<dim>> &points,
-               std::vector<double> &          values,
+               std::vector<Number> &          values,
                const unsigned int             component = 0) const override;
 
     /**
      * Function gradient at one point.
      */
-    virtual Tensor<1, dim>
+    virtual Tensor<1, dim, Number>
     gradient(const Point<dim> & p,
              const unsigned int component = 0) const override;
 
@@ -1363,7 +1363,7 @@ namespace Functions
     /**
      * The set of exponents.
      */
-    const Tensor<1, dim> exponents;
+    const Tensor<1, dim, Number> exponents;
   };
 
 
index 53d87bad3dcf00e2e0c3f21ffc8ec121e180397c..6f46b73e3aa0a4355deb1c5b6a9c0c90625f699e 100644 (file)
@@ -42,14 +42,14 @@ namespace internal
      * Struct to distinguish between the value and gradient types of different
      * numbers of components used by the FlexibleEvaluator class.
      */
-    template <int dim, int n_components>
+    template <int dim, int n_components, typename Number>
     struct EvaluatorTypeTraits
     {
-      using value_type    = Tensor<1, n_components>;
-      using gradient_type = Tensor<1, n_components, Tensor<1, dim>>;
+      using value_type    = Tensor<1, n_components, Number>;
+      using gradient_type = Tensor<1, n_components, Tensor<1, dim, Number>>;
 
       static void
-      read_value(const double       vector_entry,
+      read_value(const Number       vector_entry,
                  const unsigned int component,
                  value_type &       result)
       {
@@ -58,7 +58,7 @@ namespace internal
       }
 
       static void
-      write_value(double &           vector_entry,
+      write_value(Number &           vector_entry,
                   const unsigned int component,
                   const value_type & result)
       {
@@ -68,7 +68,7 @@ namespace internal
 
       static void
       set_gradient(
-        const Tensor<1, dim, Tensor<1, n_components, VectorizedArray<double>>>
+        const Tensor<1, dim, Tensor<1, n_components, VectorizedArray<Number>>>
           &                value,
         const unsigned int vector_lane,
         gradient_type &    result)
@@ -79,7 +79,7 @@ namespace internal
       }
 
       static void get_gradient(
-        Tensor<1, dim, Tensor<1, n_components, VectorizedArray<double>>> &value,
+        Tensor<1, dim, Tensor<1, n_components, VectorizedArray<Number>>> &value,
         const unsigned int   vector_lane,
         const gradient_type &result)
       {
@@ -89,7 +89,7 @@ namespace internal
       }
 
       static void
-      set_value(const Tensor<1, n_components, VectorizedArray<double>> &value,
+      set_value(const Tensor<1, n_components, VectorizedArray<Number>> &value,
                 const unsigned int vector_lane,
                 value_type &       result)
       {
@@ -98,7 +98,7 @@ namespace internal
       }
 
       static void
-        get_value(Tensor<1, n_components, VectorizedArray<double>> &value,
+        get_value(Tensor<1, n_components, VectorizedArray<Number>> &value,
                   const unsigned int                                vector_lane,
                   const value_type &                                result)
       {
@@ -106,30 +106,30 @@ namespace internal
           value[i][vector_lane] = result[i];
       }
 
-      template <typename Number>
-      static Number &access(Tensor<1, n_components, Number> &value,
-                            const unsigned int               component)
+      template <typename Number2>
+      static Number2 &access(Tensor<1, n_components, Number2> &value,
+                             const unsigned int                component)
       {
         return value[component];
       }
 
-      template <typename Number>
-      static const Number &
-      access(const Tensor<1, n_components, Number> &value,
-             const unsigned int                     component)
+      template <typename Number2>
+      static const Number2 &
+      access(const Tensor<1, n_components, Number2> &value,
+             const unsigned int                      component)
       {
         return value[component];
       }
     };
 
-    template <int dim>
-    struct EvaluatorTypeTraits<dim, 1>
+    template <int dim, typename Number>
+    struct EvaluatorTypeTraits<dim, 1, Number>
     {
-      using value_type    = double;
-      using gradient_type = Tensor<1, dim>;
+      using value_type    = Number;
+      using gradient_type = Tensor<1, dim, Number>;
 
       static void
-      read_value(const double vector_entry,
+      read_value(const Number vector_entry,
                  const unsigned int,
                  value_type &result)
       {
@@ -137,7 +137,7 @@ namespace internal
       }
 
       static void
-      write_value(double &vector_entry,
+      write_value(Number &vector_entry,
                   const unsigned int,
                   const value_type &result)
       {
@@ -145,7 +145,7 @@ namespace internal
       }
 
       static void
-      set_gradient(const Tensor<1, dim, VectorizedArray<double>> &value,
+      set_gradient(const Tensor<1, dim, VectorizedArray<Number>> &value,
                    const unsigned int                             vector_lane,
                    gradient_type &                                result)
       {
@@ -153,7 +153,7 @@ namespace internal
           result[d] = value[d][vector_lane];
       }
 
-      static void get_gradient(Tensor<1, dim, VectorizedArray<double>> &value,
+      static void get_gradient(Tensor<1, dim, VectorizedArray<Number>> &value,
                                const unsigned int   vector_lane,
                                const gradient_type &result)
       {
@@ -162,7 +162,7 @@ namespace internal
       }
 
       static void
-      set_value(const VectorizedArray<double> &value,
+      set_value(const VectorizedArray<Number> &value,
                 const unsigned int             vector_lane,
                 value_type &                   result)
       {
@@ -170,36 +170,36 @@ namespace internal
       }
 
       static void
-      get_value(VectorizedArray<double> &value,
+      get_value(VectorizedArray<Number> &value,
                 const unsigned int       vector_lane,
                 const value_type &       result)
       {
         value[vector_lane] = result;
       }
 
-      template <typename Number>
-      static Number &
-      access(Number &value, const unsigned int)
+      template <typename Number2>
+      static Number2 &
+      access(Number2 &value, const unsigned int)
       {
         return value;
       }
 
-      template <typename Number>
-      static const Number &
-      access(const Number &value, const unsigned int)
+      template <typename Number2>
+      static const Number2 &
+      access(const Number2 &value, const unsigned int)
       {
         return value;
       }
     };
 
-    template <int dim>
-    struct EvaluatorTypeTraits<dim, dim>
+    template <int dim, typename Number>
+    struct EvaluatorTypeTraits<dim, dim, Number>
     {
-      using value_type    = Tensor<1, dim>;
-      using gradient_type = Tensor<2, dim>;
+      using value_type    = Tensor<1, dim, Number>;
+      using gradient_type = Tensor<2, dim, Number>;
 
       static void
-      read_value(const double       vector_entry,
+      read_value(const Number       vector_entry,
                  const unsigned int component,
                  value_type &       result)
       {
@@ -207,7 +207,7 @@ namespace internal
       }
 
       static void
-      write_value(double &           vector_entry,
+      write_value(Number &           vector_entry,
                   const unsigned int component,
                   const value_type & result)
       {
@@ -216,7 +216,7 @@ namespace internal
 
       static void
       set_gradient(
-        const Tensor<1, dim, Tensor<1, dim, VectorizedArray<double>>> &value,
+        const Tensor<1, dim, Tensor<1, dim, VectorizedArray<Number>>> &value,
         const unsigned int vector_lane,
         gradient_type &    result)
       {
@@ -226,7 +226,7 @@ namespace internal
       }
 
       static void get_gradient(
-        Tensor<1, dim, Tensor<1, dim, VectorizedArray<double>>> &value,
+        Tensor<1, dim, Tensor<1, dim, VectorizedArray<Number>>> &value,
         const unsigned int                                       vector_lane,
         const gradient_type &                                    result)
       {
@@ -236,7 +236,7 @@ namespace internal
       }
 
       static void
-      set_value(const Tensor<1, dim, VectorizedArray<double>> &value,
+      set_value(const Tensor<1, dim, VectorizedArray<Number>> &value,
                 const unsigned int                             vector_lane,
                 value_type &                                   result)
       {
@@ -244,7 +244,7 @@ namespace internal
           result[i] = value[i][vector_lane];
       }
 
-      static void get_value(Tensor<1, dim, VectorizedArray<double>> &value,
+      static void get_value(Tensor<1, dim, VectorizedArray<Number>> &value,
                             const unsigned int vector_lane,
                             const value_type & result)
       {
@@ -252,13 +252,13 @@ namespace internal
           value[i][vector_lane] = result[i];
       }
 
-      static double &
+      static Number &
       access(value_type &value, const unsigned int component)
       {
         return value[component];
       }
 
-      static const double &
+      static const Number &
       access(const value_type &value, const unsigned int component)
       {
         return value[component];
@@ -277,14 +277,14 @@ namespace internal
       }
     };
 
-    template <>
-    struct EvaluatorTypeTraits<1, 1>
+    template <typename Number>
+    struct EvaluatorTypeTraits<1, 1, Number>
     {
-      using value_type    = double;
-      using gradient_type = Tensor<1, 1>;
+      using value_type    = Number;
+      using gradient_type = Tensor<1, 1, Number>;
 
       static void
-      read_value(const double vector_entry,
+      read_value(const Number vector_entry,
                  const unsigned int,
                  value_type &result)
       {
@@ -292,7 +292,7 @@ namespace internal
       }
 
       static void
-      write_value(double &vector_entry,
+      write_value(Number &vector_entry,
                   const unsigned int,
                   const value_type &result)
       {
@@ -300,14 +300,14 @@ namespace internal
       }
 
       static void
-      set_gradient(const Tensor<1, 1, VectorizedArray<double>> &value,
+      set_gradient(const Tensor<1, 1, VectorizedArray<Number>> &value,
                    const unsigned int                           vector_lane,
                    gradient_type &                              result)
       {
         result[0] = value[0][vector_lane];
       }
 
-      static void get_gradient(Tensor<1, 1, VectorizedArray<double>> &value,
+      static void get_gradient(Tensor<1, 1, VectorizedArray<Number>> &value,
                                const unsigned int   vector_lane,
                                const gradient_type &result)
       {
@@ -315,7 +315,7 @@ namespace internal
       }
 
       static void
-      set_value(const VectorizedArray<double> &value,
+      set_value(const VectorizedArray<Number> &value,
                 const unsigned int             vector_lane,
                 value_type &                   result)
       {
@@ -323,23 +323,23 @@ namespace internal
       }
 
       static void
-      get_value(VectorizedArray<double> &value,
+      get_value(VectorizedArray<Number> &value,
                 const unsigned int       vector_lane,
                 const value_type &       result)
       {
         value[vector_lane] = result;
       }
 
-      template <typename Number>
-      static Number &
-      access(Number &value, const unsigned int)
+      template <typename Number2>
+      static Number2 &
+      access(Number2 &value, const unsigned int)
       {
         return value;
       }
 
-      template <typename Number>
-      static const Number &
-      access(const Number &value, const unsigned int)
+      template <typename Number2>
+      static const Number2 &
+      access(const Number2 &value, const unsigned int)
       {
         return value;
       }
@@ -369,14 +369,17 @@ namespace internal
  * by this class is similar (or sometimes even somewhat lower) than using
  * `FEValues::reinit(cell)` followed by `FEValues::get_function_gradients`.
  */
-template <int n_components, int dim, int spacedim = dim>
+template <int n_components,
+          int dim,
+          int spacedim    = dim,
+          typename Number = double>
 class FEPointEvaluation
 {
 public:
   using value_type = typename internal::FEPointEvaluation::
-    EvaluatorTypeTraits<dim, n_components>::value_type;
+    EvaluatorTypeTraits<dim, n_components, Number>::value_type;
   using gradient_type = typename internal::FEPointEvaluation::
-    EvaluatorTypeTraits<dim, n_components>::gradient_type;
+    EvaluatorTypeTraits<dim, n_components, Number>::gradient_type;
 
   /**
    * Constructor.
@@ -414,7 +417,7 @@ public:
   void
   evaluate(const typename Triangulation<dim, spacedim>::cell_iterator &cell,
            const ArrayView<const Point<dim>> &     unit_points,
-           const ArrayView<const double> &         solution_values,
+           const ArrayView<const Number> &         solution_values,
            const EvaluationFlags::EvaluationFlags &evaluation_flags);
 
   /**
@@ -436,7 +439,7 @@ public:
   void
   integrate(const typename Triangulation<dim, spacedim>::cell_iterator &cell,
             const ArrayView<const Point<dim>> &     unit_points,
-            const ArrayView<double> &               solution_values,
+            const ArrayView<Number> &               solution_values,
             const EvaluationFlags::EvaluationFlags &integration_flags);
 
   /**
@@ -547,8 +550,8 @@ private:
 // ----------------------- template and inline function ----------------------
 
 
-template <int n_components, int dim, int spacedim>
-FEPointEvaluation<n_components, dim, spacedim>::FEPointEvaluation(
+template <int n_components, int dim, int spacedim, typename Number>
+FEPointEvaluation<n_components, dim, spacedim, Number>::FEPointEvaluation(
   const Mapping<dim> &      mapping,
   const FiniteElement<dim> &fe,
   const unsigned int        first_selected_component)
@@ -604,12 +607,12 @@ FEPointEvaluation<n_components, dim, spacedim>::FEPointEvaluation(
 
 
 
-template <int n_components, int dim, int spacedim>
+template <int n_components, int dim, int spacedim, typename Number>
 void
-FEPointEvaluation<n_components, dim, spacedim>::evaluate(
+FEPointEvaluation<n_components, dim, spacedim, Number>::evaluate(
   const typename Triangulation<dim, spacedim>::cell_iterator &cell,
   const ArrayView<const Point<dim>> &                         unit_points,
-  const ArrayView<const double> &                             solution_values,
+  const ArrayView<const Number> &                             solution_values,
   const EvaluationFlags::EvaluationFlags &                    evaluation_flag)
 {
   if (unit_points.size() == 0) // no evaluation points provided
@@ -629,10 +632,11 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
         solution_renumbered.resize(dofs_per_component);
       for (unsigned int comp = 0; comp < n_components; ++comp)
         for (unsigned int i = 0; i < dofs_per_component; ++i)
-          internal::FEPointEvaluation::EvaluatorTypeTraits<dim, n_components>::
-            read_value(solution_values[renumber[comp * dofs_per_component + i]],
-                       comp,
-                       solution_renumbered[i]);
+          internal::FEPointEvaluation::
+            EvaluatorTypeTraits<dim, n_components, Number>::read_value(
+              solution_values[renumber[comp * dofs_per_component + i]],
+              comp,
+              solution_renumbered[i]);
 
       if (evaluation_flag & EvaluationFlags::values)
         values.resize(unit_points.size());
@@ -640,11 +644,11 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
         gradients.resize(unit_points.size());
 
       const std::size_t n_points = unit_points.size();
-      const std::size_t n_lanes  = VectorizedArray<double>::size();
+      const std::size_t n_lanes  = VectorizedArray<Number>::size();
       for (unsigned int i = 0; i < n_points; i += n_lanes)
         {
           // convert to vectorized format
-          Point<dim, VectorizedArray<double>> vectorized_points;
+          Point<dim, VectorizedArray<Number>> vectorized_points;
           for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
             for (unsigned int d = 0; d < dim; ++d)
               vectorized_points[d][j] = unit_points[i + j][d];
@@ -657,13 +661,13 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
           // convert back to standard format
           if (evaluation_flag & EvaluationFlags::values)
             for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
-              internal::FEPointEvaluation::EvaluatorTypeTraits<
-                dim,
-                n_components>::set_value(val_and_grad.first, j, values[i + j]);
+              internal::FEPointEvaluation::
+                EvaluatorTypeTraits<dim, n_components, Number>::set_value(
+                  val_and_grad.first, j, values[i + j]);
           if (evaluation_flag & EvaluationFlags::gradients)
             for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
               internal::FEPointEvaluation::
-                EvaluatorTypeTraits<dim, n_components>::set_gradient(
+                EvaluatorTypeTraits<dim, n_components, Number>::set_gradient(
                   val_and_grad.second, j, gradients[i + j]);
         }
 
@@ -702,20 +706,19 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
           std::fill(values.begin(), values.end(), value_type());
           for (unsigned int i = 0; i < fe->n_dofs_per_cell(); ++i)
             {
-              const double value = solution_values[i];
+              const Number value = solution_values[i];
               for (unsigned int d = 0; d < n_components; ++d)
                 if (nonzero_shape_function_component[i][d] &&
                     (fe->is_primitive(i) || fe->is_primitive()))
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     internal::FEPointEvaluation::
-                      EvaluatorTypeTraits<dim, n_components>::access(values[q],
-                                                                     d) +=
-                      fe_values.shape_value(i, q) * value;
+                      EvaluatorTypeTraits<dim, n_components, Number>::access(
+                        values[q], d) += fe_values.shape_value(i, q) * value;
                 else if (nonzero_shape_function_component[i][d])
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     internal::FEPointEvaluation::
-                      EvaluatorTypeTraits<dim, n_components>::access(values[q],
-                                                                     d) +=
+                      EvaluatorTypeTraits<dim, n_components, Number>::access(
+                        values[q], d) +=
                       fe_values.shape_value_component(i, q, d) * value;
             }
         }
@@ -726,19 +729,19 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
           std::fill(gradients.begin(), gradients.end(), gradient_type());
           for (unsigned int i = 0; i < fe->n_dofs_per_cell(); ++i)
             {
-              const double value = solution_values[i];
+              const Number value = solution_values[i];
               for (unsigned int d = 0; d < n_components; ++d)
                 if (nonzero_shape_function_component[i][d] &&
                     (fe->is_primitive(i) || fe->is_primitive()))
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     internal::FEPointEvaluation::
-                      EvaluatorTypeTraits<dim, n_components>::access(
+                      EvaluatorTypeTraits<dim, n_components, Number>::access(
                         gradients[q], d) += fe_values.shape_grad(i, q) * value;
                 else if (nonzero_shape_function_component[i][d])
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
-                    internal::FEPointEvaluation::EvaluatorTypeTraits<
-                      dim,
-                      n_components>::access(gradients[q], d) +=
+                    internal::FEPointEvaluation::
+                      EvaluatorTypeTraits<dim, n_components, Number>::access(
+                        gradients[q], d) +=
                       fe_values.shape_grad_component(i, q, d) * value;
             }
         }
@@ -747,12 +750,12 @@ FEPointEvaluation<n_components, dim, spacedim>::evaluate(
 
 
 
-template <int n_components, int dim, int spacedim>
+template <int n_components, int dim, int spacedim, typename Number>
 void
-FEPointEvaluation<n_components, dim, spacedim>::integrate(
+FEPointEvaluation<n_components, dim, spacedim, Number>::integrate(
   const typename Triangulation<dim, spacedim>::cell_iterator &cell,
   const ArrayView<const Point<dim>> &                         unit_points,
-  const ArrayView<double> &                                   solution_values,
+  const ArrayView<Number> &                                   solution_values,
   const EvaluationFlags::EvaluationFlags &                    integration_flags)
 {
   if (unit_points.size() == 0) // no evaluation points provided
@@ -788,36 +791,36 @@ FEPointEvaluation<n_components, dim, spacedim>::integrate(
         AssertIndexRange(unit_points.size(), gradients.size() + 1);
 
       const std::size_t n_points = unit_points.size();
-      const std::size_t n_lanes  = VectorizedArray<double>::size();
+      const std::size_t n_lanes  = VectorizedArray<Number>::size();
       for (unsigned int i = 0; i < n_points; i += n_lanes)
         {
           // convert to vectorized format
-          Point<dim, VectorizedArray<double>> vectorized_points;
+          Point<dim, VectorizedArray<Number>> vectorized_points;
           for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
             for (unsigned int d = 0; d < dim; ++d)
               vectorized_points[d][j] = unit_points[i + j][d];
 
           typename internal::ProductTypeNoPoint<value_type,
-                                                VectorizedArray<double>>::type
+                                                VectorizedArray<Number>>::type
             value;
           Tensor<1,
                  dim,
                  typename internal::ProductTypeNoPoint<
                    value_type,
-                   VectorizedArray<double>>::type>
+                   VectorizedArray<Number>>::type>
             gradient;
 
           // convert back to standard format
           if (integration_flags & EvaluationFlags::values)
             for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
-              internal::FEPointEvaluation::EvaluatorTypeTraits<
-                dim,
-                n_components>::get_value(value, j, values[i + j]);
+              internal::FEPointEvaluation::
+                EvaluatorTypeTraits<dim, n_components, Number>::get_value(
+                  value, j, values[i + j]);
           if (integration_flags & EvaluationFlags::gradients)
             for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
-              internal::FEPointEvaluation::EvaluatorTypeTraits<
-                dim,
-                n_components>::get_gradient(gradient, j, gradients[i + j]);
+              internal::FEPointEvaluation::
+                EvaluatorTypeTraits<dim, n_components, Number>::get_gradient(
+                  gradient, j, gradients[i + j]);
 
           // compute
           internal::integrate_tensor_product_value_and_gradient(
@@ -831,8 +834,8 @@ FEPointEvaluation<n_components, dim, spacedim>::integrate(
 
       for (unsigned int comp = 0; comp < n_components; ++comp)
         for (unsigned int i = 0; i < dofs_per_component; ++i)
-          internal::FEPointEvaluation::EvaluatorTypeTraits<dim, n_components>::
-            write_value(
+          internal::FEPointEvaluation::
+            EvaluatorTypeTraits<dim, n_components, Number>::write_value(
               solution_values[renumber[comp * dofs_per_component + i]],
               comp,
               solution_renumbered[i]);
@@ -867,16 +870,16 @@ FEPointEvaluation<n_components, dim, spacedim>::integrate(
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     solution_values[i] +=
                       fe_values.shape_value(i, q) *
-                      internal::FEPointEvaluation::EvaluatorTypeTraits<
-                        dim,
-                        n_components>::access(values[q], d);
+                      internal::FEPointEvaluation::
+                        EvaluatorTypeTraits<dim, n_components, Number>::access(
+                          values[q], d);
                 else if (nonzero_shape_function_component[i][d])
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     solution_values[i] +=
                       fe_values.shape_value_component(i, q, d) *
-                      internal::FEPointEvaluation::EvaluatorTypeTraits<
-                        dim,
-                        n_components>::access(values[q], d);
+                      internal::FEPointEvaluation::
+                        EvaluatorTypeTraits<dim, n_components, Number>::access(
+                          values[q], d);
             }
         }
 
@@ -891,16 +894,16 @@ FEPointEvaluation<n_components, dim, spacedim>::integrate(
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     solution_values[i] +=
                       fe_values.shape_grad(i, q) *
-                      internal::FEPointEvaluation::EvaluatorTypeTraits<
-                        dim,
-                        n_components>::access(gradients[q], d);
+                      internal::FEPointEvaluation::
+                        EvaluatorTypeTraits<dim, n_components, Number>::access(
+                          gradients[q], d);
                 else if (nonzero_shape_function_component[i][d])
                   for (unsigned int q = 0; q < unit_points.size(); ++q)
                     solution_values[i] +=
                       fe_values.shape_grad_component(i, q, d) *
-                      internal::FEPointEvaluation::EvaluatorTypeTraits<
-                        dim,
-                        n_components>::access(gradients[q], d);
+                      internal::FEPointEvaluation::
+                        EvaluatorTypeTraits<dim, n_components, Number>::access(
+                          gradients[q], d);
             }
         }
     }
@@ -908,10 +911,10 @@ FEPointEvaluation<n_components, dim, spacedim>::integrate(
 
 
 
-template <int n_components, int dim, int spacedim>
-inline const typename FEPointEvaluation<n_components, dim, spacedim>::value_type
-  &
-  FEPointEvaluation<n_components, dim, spacedim>::get_value(
+template <int n_components, int dim, int spacedim, typename Number>
+inline const typename FEPointEvaluation<n_components, dim, spacedim, Number>::
+  value_type &
+  FEPointEvaluation<n_components, dim, spacedim, Number>::get_value(
     const unsigned int q_point) const
 {
   AssertIndexRange(q_point, values.size());
@@ -920,10 +923,10 @@ inline const typename FEPointEvaluation<n_components, dim, spacedim>::value_type
 
 
 
-template <int n_components, int dim, int spacedim>
-inline const typename FEPointEvaluation<n_components, dim, spacedim>::
+template <int n_components, int dim, int spacedim, typename Number>
+inline const typename FEPointEvaluation<n_components, dim, spacedim, Number>::
   gradient_type &
-  FEPointEvaluation<n_components, dim, spacedim>::get_gradient(
+  FEPointEvaluation<n_components, dim, spacedim, Number>::get_gradient(
     const unsigned int q_point) const
 {
   AssertIndexRange(q_point, gradients.size());
@@ -932,9 +935,9 @@ inline const typename FEPointEvaluation<n_components, dim, spacedim>::
 
 
 
-template <int n_components, int dim, int spacedim>
+template <int n_components, int dim, int spacedim, typename Number>
 inline void
-FEPointEvaluation<n_components, dim, spacedim>::submit_value(
+FEPointEvaluation<n_components, dim, spacedim, Number>::submit_value(
   const value_type & value,
   const unsigned int q_point)
 {
@@ -946,9 +949,9 @@ FEPointEvaluation<n_components, dim, spacedim>::submit_value(
 
 
 
-template <int n_components, int dim, int spacedim>
+template <int n_components, int dim, int spacedim, typename Number>
 inline void
-FEPointEvaluation<n_components, dim, spacedim>::submit_gradient(
+FEPointEvaluation<n_components, dim, spacedim, Number>::submit_gradient(
   const gradient_type &gradient,
   const unsigned int   q_point)
 {
index d843e3a34ecd7c571e81f99f17d13816812ce1d4..2b94823f34cb2ba812962e2026010ad7a798e4ed 100644 (file)
@@ -2176,23 +2176,24 @@ namespace Functions
 
 
 
-  template <int dim>
-  Monomial<dim>::Monomial(const Tensor<1, dim> &exponents,
-                          const unsigned int    n_components)
-    : Function<dim>(n_components)
+  template <int dim, typename Number>
+  Monomial<dim, Number>::Monomial(const Tensor<1, dim, Number> &exponents,
+                                  const unsigned int            n_components)
+    : Function<dim, Number>(n_components)
     , exponents(exponents)
   {}
 
 
 
-  template <int dim>
-  double
-  Monomial<dim>::value(const Point<dim> &p, const unsigned int component) const
+  template <int dim, typename Number>
+  Number
+  Monomial<dim, Number>::value(const Point<dim> & p,
+                               const unsigned int component) const
   {
     (void)component;
     AssertIndexRange(component, this->n_components);
 
-    double prod = 1;
+    Number prod = 1;
     for (unsigned int s = 0; s < dim; ++s)
       {
         if (p[s] < 0)
@@ -2206,23 +2207,24 @@ namespace Functions
 
 
 
-  template <int dim>
+  template <int dim, typename Number>
   void
-  Monomial<dim>::vector_value(const Point<dim> &p, Vector<double> &values) const
+  Monomial<dim, Number>::vector_value(const Point<dim> &p,
+                                      Vector<Number> &  values) const
   {
     Assert(values.size() == this->n_components,
            ExcDimensionMismatch(values.size(), this->n_components));
 
     for (unsigned int i = 0; i < values.size(); ++i)
-      values(i) = Monomial<dim>::value(p, i);
+      values(i) = Monomial<dim, Number>::value(p, i);
   }
 
 
 
-  template <int dim>
-  Tensor<1, dim>
-  Monomial<dim>::gradient(const Point<dim> & p,
-                          const unsigned int component) const
+  template <int dim, typename Number>
+  Tensor<1, dim, Number>
+  Monomial<dim, Number>::gradient(const Point<dim> & p,
+                                  const unsigned int component) const
   {
     (void)component;
     AssertIndexRange(component, 1);
@@ -2258,17 +2260,17 @@ namespace Functions
 
 
 
-  template <int dim>
+  template <int dim, typename Number>
   void
-  Monomial<dim>::value_list(const std::vector<Point<dim>> &points,
-                            std::vector<double> &          values,
-                            const unsigned int             component) const
+  Monomial<dim, Number>::value_list(const std::vector<Point<dim>> &points,
+                                    std::vector<Number> &          values,
+                                    const unsigned int component) const
   {
     Assert(values.size() == points.size(),
            ExcDimensionMismatch(values.size(), points.size()));
 
     for (unsigned int i = 0; i < points.size(); ++i)
-      values[i] = Monomial<dim>::value(points[i], component);
+      values[i] = Monomial<dim, Number>::value(points[i], component);
   }
 
 
@@ -2986,6 +2988,9 @@ namespace Functions
   template class Monomial<1>;
   template class Monomial<2>;
   template class Monomial<3>;
+  template class Monomial<1, float>;
+  template class Monomial<2, float>;
+  template class Monomial<3, float>;
   template class Bessel1<1>;
   template class Bessel1<2>;
   template class Bessel1<3>;
index af0405c2635a6c853623ac061a66ea544aee8d4e..c74688fe47879b8f781fe077e807ca8a723e9fd6 100644 (file)
@@ -39,7 +39,7 @@
 
 
 
-template <int dim>
+template <int dim, typename Number = double>
 void
 test(const unsigned int degree)
 {
@@ -59,7 +59,7 @@ test(const unsigned int degree)
     {
       Point<dim> p;
       for (unsigned int d = 0; d < dim; ++d)
-        p[d] = static_cast<double>(i) / 17. + 0.015625 * d;
+        p[d] = static_cast<Number>(i) / 17. + 0.015625 * d;
       unit_points.push_back(p);
     }
 
@@ -71,20 +71,20 @@ test(const unsigned int degree)
 
   DoFHandler<dim> dof_handler(tria);
   dof_handler.distribute_dofs(fe);
-  Vector<double> vector(dof_handler.n_dofs());
+  Vector<Number> vector(dof_handler.n_dofs());
 
-  FEPointEvaluation<1, dim> evaluator(mapping, fe);
+  FEPointEvaluation<1, dim, dim, Number> evaluator(mapping, fe);
 
-  Tensor<1, dim> exponents;
+  Tensor<1, dim, Number> exponents;
   exponents[0] = 1.;
   VectorTools::interpolate(mapping,
                            dof_handler,
-                           Functions::Monomial<dim>(exponents),
+                           Functions::Monomial<dim, Number>(exponents),
                            vector);
 
-  std::vector<double>         solution_values(fe.dofs_per_cell);
-  std::vector<double>         function_values(unit_points.size());
-  std::vector<Tensor<1, dim>> function_gradients(unit_points.size());
+  std::vector<Number>                 solution_values(fe.dofs_per_cell);
+  std::vector<Number>                 function_values(unit_points.size());
+  std::vector<Tensor<1, dim, Number>> function_gradients(unit_points.size());
 
   for (const auto &cell : dof_handler.active_cell_iterators())
     {
@@ -139,4 +139,6 @@ main()
   test<2>(2);
   test<2>(6);
   test<3>(5);
+
+  test<3, float>(5);
 }
index 0344de7b66d752162b316278994e4411369caa96..5948ecd39863cb87309ebf451f7f33a97065a2ac 100644 (file)
@@ -323,3 +323,100 @@ DEAL::0.1695497377 0.6278029298 0.1863429372: 0.1695497377 error value 0.0000000
 DEAL::0.2131627953 0.5663675440 0.2290556314: 0.2131627953 error value 0.000000000 error grad 6.176492620e-16
 DEAL::
 DEAL::-13.62433110 0.5178825279 0.07092789491 0.006867631665 -0.4719553235 0.01545563061 0.0001540591983 -0.0001887148601 2.703585503 -0.5710442836 0.3443513004 -0.1924415100 0.2324616165 -0.03550052550 0.02131111286 -0.01680930345 10.71459276 -4.090117473 2.326078776 -1.398071673 0.1790474663 0.003202350270 0.08002420020 -0.01936457550 0.04971108465 0.0008879128189 0.001967668797 0.002526585569 0.01079680272 -0.006328540195 -0.06748069364 0.006622475460 0.3122872695 -0.09511691770 0.09248833409 -0.04345436940 0.002182450809 0.02422303116 0.1327949696 -0.001964751101 -14.64397343 4.004192244 -2.180569509 1.280625615 0.3860598860 -0.1480219016 0.03311747843 -0.04273704146 -0.08619657039 -0.007933811710 0.002372366073 0.0009272921563 0.01014670518 0.006921461724 -0.01569097120 0.001402733039 -6.955377625 0.3518247732 -0.4292281903 0.2305446211 0.1277276221 0.2820607558 0.1781708581 0.01801644509 0.2620718702 -0.2656386605 1.087673383 -0.04278080780 -0.1325729014 0.004930232271 0.03158796714 -0.01631501001 -0.3810904616 -0.2138093115 0.07210823003 -0.03278298605 0.01610871655 -0.01486367329 0.09505468859 -0.01532817141 0.1654915643 -0.4387935381 1.761517430 -0.01149465858 -0.02682678741 0.01788070253 0.3222285183 -0.03092349762 6.611970632 -1.969498867 1.441189911 -0.8427310399 -3.552630714 2.158222457 -0.5223466693 0.2561099470 1.743032357 -0.6306169620 -1.017322945 -0.2971495489 -1.044081102 0.3965652095 -0.04952676476 0.1235420561 -0.09058857252 0.1040909815 -0.004746022965 -0.008899970229 -0.3270230486 0.7738803509 0.1898223797 -0.06171065075 -0.08956572614 0.3432351468 -2.483002378 -0.5569383152 -0.02564775428 -0.02690273037 0.08140212662 0.007079452244 6.636904472 -2.314288178 1.065527793 -0.6306967801 -1.790486189 -0.9765979942 -0.1806871569 0.09261295937 0.7674403610 0.3652372175 0.4510362569 -0.01052447141 -0.4869473146 -0.02285698283 -0.3211436457 0.04640641304 0.6560584771 -0.1932681883 -0.006384693927 -0.02467247096 -0.02914195809 -0.7341765771 -0.02278370462 0.01053781560 -0.005720593200 0.3402567685 0.4704143848 0.3275494444 -0.01395399499 -0.05811086880 -0.6315166308 -0.01494062089 5.469561284 5.400888752 -1.882454386 1.051502567 2.693788692 6.820692642 -0.9934473741 0.5994110890 -0.3554955852 -2.681905043 -0.6898798769 -0.3288703031 0.2625617547 0.9435139165 0.5385841063 0.08717681820 -10.64966654 -3.344611920 0.03057946404 -0.03842163223 -2.319988165 3.483484676 -0.6515746296 0.06214523361 -0.1492095115 7.720965720 3.087632090 -0.04977515894 -0.2782431650 -2.329772604 -1.571546428 0.05880245580 3.191685423 -0.5546973832 4.190330374 -0.5697667533 0.7603557410 -6.762127664 -10.60070832 1.539771461 -3.249001162 9.740858940 2.453311278 -6.559884833 0.1229211448 -0.8379773877 9.866868728 -0.04740060666 -1.821582227 0.5263150662 0.1420907645 0.05023286635 0.04617124171 2.191656206 -0.07397787324 -0.01094990691 -0.07883970133 -0.8329718667 -1.704125970 -1.504090982 0.06263648993 0.1133949488 2.651709720 0.07031566753 
+DEAL::Mapping of degree 5
+DEAL::Cell with center 0.000000000 0.000000000 -0.7500000000
+DEAL::-0.5759520655 -0.5527659841 -0.5759520655: -0.5759518743 error value -2.384185791e-07 error grad 1.739970912e-06
+DEAL::-0.5254898676 -0.5029040719 -0.6187865537: -0.5254896879 error value 5.960464478e-08 error grad 1.343069357e-06
+DEAL::-0.4685426073 -0.4464599093 -0.6616551149: -0.4685424864 error value 0.000000000 error grad 9.548418802e-07
+DEAL::-0.4051542510 -0.3835292107 -0.7012978956: -0.4051542282 error value 8.940696716e-08 error grad 1.049046318e-06
+DEAL::-0.3359932318 -0.3148223149 -0.7343028440: -0.3359932303 error value -5.960464478e-08 error grad 7.156830861e-07
+DEAL::-0.2623766962 -0.2416891159 -0.7575161861: -0.2623766065 error value -8.940696716e-08 error grad 5.973838029e-07
+DEAL::-0.1861925434 -0.1660412603 -0.7684224851: -0.1861924827 error value -4.470348358e-08 error grad 4.059666594e-07
+DEAL::-0.1097387169 -0.09019150189 -0.7654365722: -0.1097386926 error value -2.235174179e-08 error grad 6.156984682e-07
+DEAL::-0.03550798632 -0.01663873419 -0.7480737719: -0.03550796956 error value -1.490116119e-08 error grad 3.683221905e-07
+DEAL::0.03404970570 0.05216906594 -0.7169856075: 0.03404974565 error value -3.725290298e-08 error grad 3.168740079e-07
+DEAL::0.09675558003 0.1140621810 -0.6738655685: 0.09675559402 error value -1.490116119e-08 error grad 5.033887192e-07
+DEAL::0.1508930055 0.1673387801 -0.6212435337: 0.1508930176 error value 1.490116119e-08 error grad 4.111292640e-07
+DEAL::0.1953394317 0.2108952300 -0.5621980946: 0.1953394860 error value -4.470348358e-08 error grad 5.283097835e-07
+DEAL::
+DEAL::-15.49544239 0.2783086896 -0.2824785709 0.001941547263 0.05293603614 0.006514296867 -0.002793600550 -0.004790181760 -7.755895138 2.335669994 -1.262550473 0.7657411098 0.01722191088 -0.01509479061 0.07523416728 -0.001832792652 5.248827934 -2.207770824 1.270765424 -0.7499045730 -0.01301694289 -0.04595639184 0.03338478133 -0.0009578819154 -0.1121441275 0.01297498867 0.02247761376 0.009637538344 0.005332804751 0.01207040716 0.1079383418 0.02118748799 0.1347544342 -0.06336861104 0.04103920609 -0.01368732098 -0.005054849200 -0.02797109261 -0.03518787399 0.02472895384 6.748606205 -0.6164376736 0.2904551327 -0.1492241174 0.2580477297 -0.003374640830 0.08063759655 -0.01604228280 0.02553078532 0.03928947076 0.01313569210 0.008040246554 0.002278828062 0.01334475446 0.1029224321 0.01777629182 -2.820404291 0.2598106265 0.01424081344 -0.06639892608 0.2699505687 1.179385900 0.3161379099 -0.1025709957 -0.5011186600 0.1431450993 -1.355332732 -0.07007806003 0.2998510897 -0.03842615336 -0.07659994811 -0.02792809159 -0.1645623893 0.02233755030 -0.1876895130 -0.01518770773 -0.3096975684 0.7503561974 0.4982005358 -0.01928681880 -0.1174674034 0.4301991463 -2.239012718 -0.4121022820 -0.01946246810 -0.03115624748 -0.3793162704 -0.07726793736 8.569950104 -1.568414688 0.6081715822 -0.3664264381 -2.190173149 -1.073923111 -0.3982132077 0.1774140745 1.086982489 0.3102415800 0.5579579473 -0.05645826086 -0.7000131607 0.0003734720231 -0.2940470576 0.02751408517 0.6204581857 -0.007176592015 -0.08810389787 0.01252762415 0.07978514582 -0.7177191973 -0.1995332241 0.08595196903 -0.07009720057 0.3398901522 0.4432486594 0.2606706321 -0.01782715879 -0.01873236708 -0.4537267983 -0.09408084303 -2.513534307 -0.2709848285 0.001143825590 -0.04893420637 0.7297635674 0.6876475811 0.2255915552 0.03664992005 -0.1672238111 -0.2662464082 0.9339296818 -0.2861707211 0.03932017460 0.1412206143 -0.08145122975 -0.01382823009 -0.5253329277 -0.06497917324 -0.01361023448 -0.02555452287 0.1799340993 0.1446822137 0.2777605057 -0.02016751282 -0.1252739131 -0.1130043417 1.797257423 -0.4657195807 0.008868835866 0.09659458697 0.1834570467 -0.1067303047 -1.735881209 2.277268171 -0.5723213553 0.4600857496 -8.860755920 -2.468793631 -0.7706382275 -0.04998415336 3.307003498 0.6164845228 -2.611025333 0.7490426898 -1.713572145 -0.2737982273 0.1731877774 0.09296272695 8.701126099 7.430457592 -2.529993534 0.8823295236 -6.479109287 2.850932598 7.072813511 -2.211944580 -0.2910014093 -4.643363953 6.732235909 -1.897175550 -0.004616541788 2.143212557 -0.9497081041 -0.03439086303 -2.657071114 -0.06184991449 -1.150406957 0.5357879400 0.6914360523 0.07697850466 4.683320999 -1.690427184 3.747058392 -12.20090389 6.868105412 8.498735428 0.3350919485 0.5117555857 -1.412792444 1.819875836 1.462252259 0.1714663506 -0.1180983633 0.09759100527 -0.4875712991 -0.3850667775 -0.5370506048 0.02405184507 0.3789093196 0.3650027812 -7.551410198 1.679880261 -0.01964658312 -0.2928843200 -1.194007993 0.4010408223 
+DEAL::Cell with center 0.7500000000 0.000000000 -4.163336342e-17
+DEAL::0.5879922187 -0.5879922187 -0.5412602679: 0.5879921317 error value 1.192092896e-07 error grad 1.488789394e-06
+DEAL::0.6317656581 -0.5359927398 -0.4904247681: 0.6317654848 error value -5.960464478e-08 error grad 3.385148830e-06
+DEAL::0.6752050943 -0.4774156808 -0.4328300536: 0.6752049327 error value 0.000000000 error grad 6.176010174e-07
+DEAL::0.7149693757 -0.4123477836 -0.3686646352: 0.7149693966 error value -1.192092896e-07 error grad 1.086151087e-06
+DEAL::0.7476112822 -0.3415220448 -0.2987437738: 0.7476111650 error value 2.384185791e-07 error grad 6.730336395e-07
+DEAL::0.7699931685 -0.2663289165 -0.2245218407: 0.7699928880 error value 2.980232239e-07 error grad 6.622721003e-07
+DEAL::0.7796633598 -0.1887262238 -0.1480024603: 0.7796632648 error value 5.960464478e-08 error grad 9.902248621e-07
+DEAL::0.7751382896 -0.1110685560 -0.07156802410: 0.7751381993 error value 0.000000000 error grad 7.130631730e-07
+DEAL::0.7560592058 -0.03588516627 0.002241853775: 0.7560589910 error value 1.192092896e-07 error grad 5.108199730e-07
+DEAL::0.7232127397 0.03436118254 0.07097021235: 0.7232123613 error value 1.192092896e-07 error grad 2.211859737e-06
+DEAL::0.6784217227 0.09750269006 0.1324691326: 0.6784213781 error value 2.384185791e-07 error grad 2.044119583e-06
+DEAL::0.6243263560 0.1518546010 0.1850850191: 0.6243263483 error value -5.960464478e-08 error grad 8.001516676e-07
+DEAL::0.5640861853 0.1963417794 0.2277818661: 0.5640861988 error value 5.960464478e-08 error grad 1.973758799e-06
+DEAL::
+DEAL::-0.4223180115 0.3033272326 -0.5825536251 0.01034617331 0.3000682592 0.01622751541 -0.007329309825 0.01863781735 -16.24939537 4.865996361 -2.723913670 1.575704575 0.1148375273 -0.01397434529 -0.03567454591 -0.03915020451 6.246036530 -2.370342016 1.345056772 -0.8218944669 -0.002712659072 -0.08070982993 -0.06125731021 -0.03641686216 -0.4072016180 0.1446642727 -0.1302408874 0.006766999606 0.001331573585 0.09190199524 -0.07346885651 -0.08542060107 0.2126174867 -0.03000364453 0.006210734602 -0.05230874941 -0.03222705796 0.0007915203460 -0.2289125323 -0.07536898553 12.66255760 -2.474488974 1.422033310 -0.8216686845 0.4484014213 0.04395872727 0.08548288792 -0.05476433784 -0.2901134789 0.1519641876 -0.07693655044 0.007016016170 -0.006941629108 0.04149222001 -0.06177589670 -0.08265007287 -16.93092918 3.500050545 -1.197541714 0.8043493032 1.770234346 1.534394264 0.04097338393 -0.4154732227 -1.882564664 1.293623209 -1.093020320 0.3128968775 1.108837962 -0.4424099922 0.3961532414 0.04072185978 -0.5624755621 -0.03690090030 0.2082623541 0.05064146966 -0.8421360850 1.329626441 -0.4973534644 -0.1638311446 -0.03503515199 1.030528426 -0.7928641438 0.4156441987 0.02542632818 -0.3350193501 0.2752735019 0.3795576096 17.30195808 -2.830399752 0.9058095813 -0.5650417209 -4.201508045 -4.509225845 0.1370564848 0.04839108512 2.108051538 0.3115725815 2.735378265 0.07496395707 -1.208989978 -0.1568193287 -0.2323057055 0.1843278557 1.478545666 0.05153277516 -0.03194724023 0.1246428713 0.07066040486 -2.606332302 -0.3051331937 -0.06603002548 0.2754996419 -0.3969447315 4.421670914 1.008067489 0.04247220233 -0.1606291085 0.2924681902 0.3337481320 -2.102291107 -1.672255993 0.5987293720 -0.3071799576 1.421574116 2.502007008 0.1670357734 -0.0002986343752 0.08616714180 -1.259079576 -0.5267357230 0.1249683276 0.02924941108 0.2319992781 0.3462066054 0.1447236985 -0.6928124428 -0.4960302114 0.1923406720 0.01913074218 0.2895885110 1.526830435 0.4322408736 -0.3189420998 0.1271144897 -1.000649333 -0.7297657728 0.2550565600 0.1264176369 -0.05291861668 1.106789231 0.3460734785 7.776768684 8.183970451 -2.928850174 1.533414245 -21.07143402 -7.814153194 -0.8388378620 0.2047928125 6.829074860 3.191703081 2.052604437 -0.6486720443 -4.118206501 -0.2554620802 -1.257116556 -0.2462868094 14.50973034 24.34759712 -4.632341385 2.439505339 -13.78829288 7.079248905 9.587686539 -4.016359806 2.537223339 -23.48223877 -5.306365013 1.569838881 -0.1686495692 7.667053699 2.165030003 0.6601060629 -3.381370306 -3.550871134 -7.038975716 0.1066832542 -0.4177515209 14.92432213 23.35073662 -3.163424969 2.101907492 -10.48002720 -1.187909961 2.421120644 -0.2038636953 1.620113134 -17.23742294 -1.795290947 1.901717544 1.484047055 -0.7761972547 -0.1681759059 -0.6624102592 -4.749961853 -0.9999374747 1.178946614 -0.4704361260 3.170073748 2.186510801 -0.9958961010 -0.5127907395 0.4492119551 -4.833429813 -1.534623384 
+DEAL::Cell with center 0.000000000 -4.163336342e-17 0.7500000000
+DEAL::-0.5879922187 -0.5412602679 0.5879922187: -0.5879921317 error value -1.192092896e-07 error grad 1.970508720e-06
+DEAL::-0.5359927398 -0.4904247681 0.6317656581: -0.5359925628 error value 1.192092896e-07 error grad 1.798287144e-06
+DEAL::-0.4774156808 -0.4328300536 0.6752050943: -0.4774155915 error value -2.980232239e-08 error grad 1.137061759e-06
+DEAL::-0.4123477836 -0.3686646352 0.7149693757: -0.4123477936 error value 0.000000000 error grad 3.218419522e-07
+DEAL::-0.3415220448 -0.2987437738 0.7476112822: -0.3415220082 error value 0.000000000 error grad 5.004416153e-07
+DEAL::-0.2663289165 -0.2245218407 0.7699931685: -0.2663287520 error value -1.788139343e-07 error grad 6.443946745e-07
+DEAL::-0.1887262238 -0.1480024603 0.7796633598: -0.1887261569 error value -2.980232239e-08 error grad 2.537777277e-07
+DEAL::-0.1110685560 -0.07156802410 0.7751382896: -0.1110685244 error value -7.450580597e-09 error grad 3.153926684e-07
+DEAL::-0.03588516627 0.002241853775 0.7560592058: -0.03588514403 error value -1.862645149e-08 error grad 7.612384678e-08
+DEAL::0.03436118254 0.07097021235 0.7232127397: 0.03436122090 error value -4.097819328e-08 error grad 4.471087323e-07
+DEAL::0.09750269006 0.1324691326 0.6784217227: 0.09750270098 error value -7.450580597e-09 error grad 2.437299997e-07
+DEAL::0.1518546010 0.1850850191 0.6243263560: 0.1518546492 error value -1.490116119e-08 error grad 2.916330288e-07
+DEAL::0.1963417794 0.2277818661 0.5640861853: 0.1963418126 error value -2.980232239e-08 error grad 6.574489362e-07
+DEAL::
+DEAL::-14.22774887 0.2758247554 0.3233479857 0.002258591121 -0.4923902452 0.006479232106 0.007673436776 -0.004048907198 9.627193451 -2.691710234 1.498494029 -0.8773621321 0.1279655397 0.04225023091 0.07356622815 -0.005097720772 5.585744381 -2.164580822 1.253407121 -0.7433193922 0.1099531725 -0.01260378677 0.009252681397 -0.002884065034 0.2806684971 -0.03219672665 0.08013089001 -0.02068051137 0.005503505468 0.02306512743 0.1436683238 0.01418968476 0.1365398914 -0.06721771508 0.04142149538 -0.01326448843 0.006057544146 -0.01734942943 -0.06045756489 0.02150109038 -15.47866821 4.190341473 -2.247251272 1.336822152 0.1129730344 -0.06340049952 0.07707715034 -0.01389673259 0.1419172287 -0.08253975958 0.04544159025 -0.01902282611 0.005634107161 0.008671590127 0.06230325252 0.01872661524 3.802969217 -1.849707007 0.6332956553 -0.3887352049 -1.842061639 1.784563303 -0.2503870130 0.2210510373 1.226549983 -0.04101697356 -1.133754134 -0.1190049574 -0.7601581812 0.08751763403 -0.2793232203 0.05139360577 -0.1329008341 -0.3121521771 -0.1517035514 -0.01853225939 0.03981668875 0.6990774870 0.4622235298 -0.02355304174 -0.1192408055 0.4685421884 -2.207587242 -0.2071638107 -0.02477211133 -0.04626213387 -0.5921081305 -0.06458500028 -1.652924418 -0.5230297446 0.5694200993 -0.3687703311 -1.094759464 0.9620045424 -0.4472056627 0.1970382631 0.4464597702 -0.05759212375 1.131391525 -0.08513598144 -0.3066828549 0.1682769656 -0.2719087899 0.01808771864 -0.5435221195 0.08994831890 0.002598016756 -0.02097247168 -0.1145273373 0.09827552736 -0.2322487384 0.06448703259 0.02506091446 0.1543179303 1.755390763 0.2961775362 -0.02442784235 -0.01317997463 -0.2872707248 -0.09701087326 4.853506088 -1.261010051 0.5260115862 -0.3492580354 -1.510834217 -1.223475218 0.5106148720 -0.1256819069 0.4868869483 -0.04233135656 0.4008789062 -0.2891613245 -0.3015204668 0.03534862027 0.02896238491 0.001281990437 0.6151089072 -0.003672339488 -0.02060560696 -0.02652030624 -0.1900802255 -0.7395428419 0.3518919647 -0.04743013531 -0.09060660005 0.02608939074 0.4230799079 -0.6149690747 -0.01712200791 0.05250635743 0.3326753676 -0.07802518457 2.121679068 2.337383270 -0.4897458255 0.3746950328 8.149450302 6.289573669 -2.500187635 0.8941109180 -2.613834858 -0.6445206404 -0.9252414107 0.6674411893 1.505453229 0.3175848424 -0.2207673490 0.08565212786 -10.30178356 -2.326323271 -0.4906401634 -0.1022775844 -4.553508282 4.248086452 6.557427406 -2.070031643 0.1038856506 0.4292281568 3.613144398 -1.828610182 -0.2400125712 -0.2564033568 -0.1848736703 0.01722637005 3.248341084 0.4700540006 -2.876006842 0.5101440549 -1.098704338 -5.770073891 8.370279312 -1.740240574 4.006911278 -11.71563339 5.895265579 8.368196487 -0.02757678740 0.7988924980 -6.864811897 0.9900431633 -1.706443310 -0.04059720039 -0.01223452017 0.1212061048 0.5110735297 2.232782125 -0.9087918997 0.04007372633 0.4185161889 -0.2844356894 -1.422126174 2.547418833 0.05804313719 -0.1888395697 -1.540541053 0.3479112983 
+DEAL::Cell with center -0.7500000000 0.000000000 0.000000000
+DEAL::-0.6012515503 -0.5766780283 -0.5531118850: -0.6012513638 error value -1.788139343e-07 error grad 1.887112717e-06
+DEAL::-0.6458946236 -0.5236491363 -0.5006487306: -0.6458944082 error value -2.980232239e-07 error grad 8.393988651e-07
+DEAL::-0.6898189280 -0.4638689601 -0.4413495827: -0.6898186207 error value -2.384185791e-07 error grad 7.578279337e-07
+DEAL::-0.7296048967 -0.3975220470 -0.3754490693: -0.7296048403 error value 1.788139343e-07 error grad 1.163424827e-06
+DEAL::-0.7617762381 -0.3254496235 -0.3038288032: -0.7617760897 error value -2.384185791e-07 error grad 1.165493131e-06
+DEAL::-0.7832188522 -0.2491480826 -0.2280163559: -0.7832185626 error value -3.576278687e-07 error grad 1.036731305e-06
+DEAL::-0.7915521155 -0.1706669598 -0.1500833118: -0.7915519476 error value -5.960464478e-08 error grad 4.658785144e-07
+DEAL::-0.7854001879 -0.09242877894 -0.07246518026: -0.7853999138 error value 5.960464478e-08 error grad 1.308552669e-06
+DEAL::-0.7645345314 -0.01700078778 0.002266559507: -0.7645344734 error value 0.000000000 error grad 6.888347457e-07
+DEAL::-0.7298790026 0.05314854421 0.07164727507: -0.7298784852 error value -4.172325134e-07 error grad 5.983599181e-07
+DEAL::-0.6833856700 0.1158765656 0.1335451305: -0.6833853722 error value -3.576278687e-07 error grad 2.101722885e-06
+DEAL::-0.6278029298 0.1695497377 0.1863429372: -0.6278028488 error value -5.960464478e-08 error grad 1.229632971e-06
+DEAL::-0.5663675440 0.2131627953 0.2290556314: -0.5663675666 error value 0.000000000 error grad 7.290870485e-07
+DEAL::
+DEAL::1.260267258 0.5641642809 -0.2820299268 0.002626161790 -0.2663730979 0.01134317555 -0.02182109281 -0.02018296905 -7.204004288 2.419783354 -1.261455655 0.7688359618 0.3535044789 0.01324732229 0.1324997842 0.003613254987 12.07118988 -4.432329655 2.590243340 -1.519812465 0.1640500277 -0.08860089630 0.1027230620 0.003625789890 -0.3151390553 0.1202294007 -0.007735904306 0.07082657516 0.04791356996 0.01913735084 0.2365168631 0.08705456555 0.3617859185 -0.1625753045 0.1493080705 -0.01895324141 0.006011677906 -0.1034086645 0.09562009573 0.08882799745 -10.48211193 2.364047527 -1.233799458 0.7308308482 0.5965970159 -0.09856647253 0.1475701332 -0.01745858788 -0.4993051589 0.08011872321 -0.04991342872 0.07254077494 0.03707432747 -0.001281046309 0.1581489295 0.09166892618 -26.77163124 4.361666679 -2.375917435 1.344286442 2.950864315 4.371966839 0.4655324221 -0.1893821657 -1.465139270 0.6248174310 -2.799061060 0.08373469859 0.8403727412 -0.3026270866 -0.08659416437 -0.2476501316 -1.133332610 -0.4927067459 -0.1726454645 -0.1309229434 -0.5200872421 2.493411779 0.7518110871 0.05501724780 -0.04697388411 0.7773869634 -3.841802597 -0.6572718024 -0.1685306430 0.008733562194 -1.007800698 -0.3915670812 16.17585754 -1.863848448 1.568704724 -0.9866070151 -5.897593498 -1.416102290 -1.187149048 0.4944255352 2.581286430 0.2796370089 1.177262783 -0.4569587708 -1.629776359 0.2522538900 -0.5228320360 -0.006541545503 0.8906854987 0.5976762176 -0.1154783443 -0.05192538723 -0.2446110696 -1.431594491 -0.7785348296 0.3855760992 -0.09185617417 0.7760829329 0.8549283147 -0.3669818938 -0.1312621236 0.04426624998 -0.7198714018 -0.4007576704 8.590970993 -4.045404434 1.498349905 -0.9747196436 -0.6291618943 -1.781654358 0.8676064014 -0.05588969588 0.6082989573 -0.6307174563 0.8571041226 -0.5083769560 -0.4475800097 0.2856460214 -0.3198925257 -0.05654918775 0.8577738404 -0.3732625842 -0.06233294308 -0.1639171690 0.3882611692 -1.476848841 1.010244846 -0.01109763235 -0.2370296121 -0.4334734082 0.7511008978 -1.026204467 -0.04747521132 0.3745304048 -0.3511634469 -0.3808437884 6.513928890 15.82318401 -5.124201298 3.157251835 -11.33580685 11.09433937 -4.884639263 1.423341990 4.621638298 -0.4843940735 -1.600012898 0.8919351697 -2.426311016 0.5417068601 0.3699146509 0.4880304039 -13.68873978 14.21897984 -4.835170269 1.487906218 -28.00940514 -0.5847373009 20.72099304 -7.271018982 3.017081022 -10.54402828 7.413534164 -3.022710800 -1.761172652 4.377375126 -2.455802679 -0.3527517021 4.414394379 -0.5133761764 -1.775301456 0.4771029949 2.117609501 -12.90157795 10.16017151 -3.017919540 7.051621437 -25.89193344 5.871879578 14.27528191 0.4566228390 2.239732742 -2.539179325 2.973898649 -2.342549324 0.8785856962 0.3179937899 0.6111671925 -1.175442338 4.596784115 -3.224331141 -0.2510226965 0.9492543936 0.9558909535 -2.124761343 4.376264572 0.2800742090 -1.420135856 1.408090711 1.705089331 
+DEAL::Cell with center 0.000000000 -0.7500000000 -4.163336342e-17
+DEAL::-0.5879922187 -0.5879922187 -0.5412602679: -0.5879921317 error value -1.192092896e-07 error grad 1.970508720e-06
+DEAL::-0.5359927398 -0.6317656581 -0.4904247681: -0.5359925628 error value 1.192092896e-07 error grad 1.798287144e-06
+DEAL::-0.4774156808 -0.6752050943 -0.4328300536: -0.4774155915 error value -2.980232239e-08 error grad 1.137061759e-06
+DEAL::-0.4123477836 -0.7149693757 -0.3686646352: -0.4123477936 error value 0.000000000 error grad 3.218419522e-07
+DEAL::-0.3415220448 -0.7476112822 -0.2987437738: -0.3415220082 error value 0.000000000 error grad 5.004416153e-07
+DEAL::-0.2663289165 -0.7699931685 -0.2245218407: -0.2663287520 error value -1.788139343e-07 error grad 6.443946745e-07
+DEAL::-0.1887262238 -0.7796633598 -0.1480024603: -0.1887261569 error value -2.980232239e-08 error grad 2.537777277e-07
+DEAL::-0.1110685560 -0.7751382896 -0.07156802410: -0.1110685244 error value -7.450580597e-09 error grad 3.153926684e-07
+DEAL::-0.03588516627 -0.7560592058 0.002241853775: -0.03588514403 error value -1.862645149e-08 error grad 7.612384678e-08
+DEAL::0.03436118254 -0.7232127397 0.07097021235: 0.03436122090 error value -4.097819328e-08 error grad 4.471087323e-07
+DEAL::0.09750269006 -0.6784217227 0.1324691326: 0.09750270098 error value -7.450580597e-09 error grad 2.437299997e-07
+DEAL::0.1518546010 -0.6243263560 0.1850850191: 0.1518546492 error value -1.490116119e-08 error grad 2.916330288e-07
+DEAL::0.1963417794 -0.5640861853 0.2277818661: 0.1963418126 error value -2.980232239e-08 error grad 6.574489362e-07
+DEAL::
+DEAL::-14.22774887 0.2758247554 0.3233479857 0.002258591121 -0.4923902452 0.006479232106 0.007673436776 -0.004048907198 9.627193451 -2.691710234 1.498494029 -0.8773621321 0.1279655397 0.04225023091 0.07356622815 -0.005097720772 5.585744381 -2.164580822 1.253407121 -0.7433193922 0.1099531725 -0.01260378677 0.009252681397 -0.002884065034 0.2806684971 -0.03219672665 0.08013089001 -0.02068051137 0.005503505468 0.02306512743 0.1436683238 0.01418968476 0.1365398914 -0.06721771508 0.04142149538 -0.01326448843 0.006057544146 -0.01734942943 -0.06045756489 0.02150109038 -15.47866821 4.190341473 -2.247251272 1.336822152 0.1129730344 -0.06340049952 0.07707715034 -0.01389673259 0.1419172287 -0.08253975958 0.04544159025 -0.01902282611 0.005634107161 0.008671590127 0.06230325252 0.01872661524 3.802969217 -1.849707007 0.6332956553 -0.3887352049 -1.842061639 1.784563303 -0.2503870130 0.2210510373 1.226549983 -0.04101697356 -1.133754134 -0.1190049574 -0.7601581812 0.08751763403 -0.2793232203 0.05139360577 -0.1329008341 -0.3121521771 -0.1517035514 -0.01853225939 0.03981668875 0.6990774870 0.4622235298 -0.02355304174 -0.1192408055 0.4685421884 -2.207587242 -0.2071638107 -0.02477211133 -0.04626213387 -0.5921081305 -0.06458500028 -1.652924418 -0.5230297446 0.5694200993 -0.3687703311 -1.094759464 0.9620045424 -0.4472056627 0.1970382631 0.4464597702 -0.05759212375 1.131391525 -0.08513598144 -0.3066828549 0.1682769656 -0.2719087899 0.01808771864 -0.5435221195 0.08994831890 0.002598016756 -0.02097247168 -0.1145273373 0.09827552736 -0.2322487384 0.06448703259 0.02506091446 0.1543179303 1.755390763 0.2961775362 -0.02442784235 -0.01317997463 -0.2872707248 -0.09701087326 4.853506088 -1.261010051 0.5260115862 -0.3492580354 -1.510834217 -1.223475218 0.5106148720 -0.1256819069 0.4868869483 -0.04233135656 0.4008789062 -0.2891613245 -0.3015204668 0.03534862027 0.02896238491 0.001281990437 0.6151089072 -0.003672339488 -0.02060560696 -0.02652030624 -0.1900802255 -0.7395428419 0.3518919647 -0.04743013531 -0.09060660005 0.02608939074 0.4230799079 -0.6149690747 -0.01712200791 0.05250635743 0.3326753676 -0.07802518457 2.121679068 2.337383270 -0.4897458255 0.3746950328 8.149450302 6.289573669 -2.500187635 0.8941109180 -2.613834858 -0.6445206404 -0.9252414107 0.6674411893 1.505453229 0.3175848424 -0.2207673490 0.08565212786 -10.30178356 -2.326323271 -0.4906401634 -0.1022775844 -4.553508282 4.248086452 6.557427406 -2.070031643 0.1038856506 0.4292281568 3.613144398 -1.828610182 -0.2400125712 -0.2564033568 -0.1848736703 0.01722637005 3.248341084 0.4700540006 -2.876006842 0.5101440549 -1.098704338 -5.770073891 8.370279312 -1.740240574 4.006911278 -11.71563339 5.895265579 8.368196487 -0.02757678740 0.7988924980 -6.864811897 0.9900431633 -1.706443310 -0.04059720039 -0.01223452017 0.1212061048 0.5110735297 2.232782125 -0.9087918997 0.04007372633 0.4185161889 -0.2844356894 -1.422126174 2.547418833 0.05804313719 -0.1888395697 -1.540541053 0.3479112983 
+DEAL::Cell with center 0.000000000 0.7500000000 0.000000000
+DEAL::-0.5766780283 0.6012515503 -0.5531118850: -0.5766779184 error value -1.192092896e-07 error grad 1.292544880e-06
+DEAL::-0.5236491363 0.6458946236 -0.5006487306: -0.5236488581 error value -5.960464478e-08 error grad 2.974639074e-06
+DEAL::-0.4638689601 0.6898189280 -0.4413495827: -0.4638688862 error value -1.192092896e-07 error grad 1.576514023e-06
+DEAL::-0.3975220470 0.7296048967 -0.3754490693: -0.3975220919 error value 2.980232239e-08 error grad 2.515240283e-07
+DEAL::-0.3254496235 0.7617762381 -0.3038288032: -0.3254495859 error value -5.960464478e-08 error grad 4.974722287e-07
+DEAL::-0.2491480826 0.7832188522 -0.2280163559: -0.2491479218 error value -1.192092896e-07 error grad 5.404370427e-07
+DEAL::-0.1706669598 0.7915521155 -0.1500833118: -0.1706669480 error value -2.980232239e-08 error grad 2.044161960e-07
+DEAL::-0.09242877894 0.7854001879 -0.07246518026: -0.09242872894 error value -5.960464478e-08 error grad 2.758063431e-07
+DEAL::-0.01700078778 0.7645345314 0.002266559507: -0.01700077020 error value -2.980232239e-08 error grad 2.389082567e-07
+DEAL::0.05314854421 0.7298790026 0.07164727507: 0.05314858630 error value -1.490116119e-08 error grad 6.759992175e-07
+DEAL::0.1158765656 0.6833856700 0.1335451305: 0.1158765629 error value 7.450580597e-09 error grad 2.989755785e-07
+DEAL::0.1695497377 0.6278029298 0.1863429372: 0.1695497930 error value -4.470348358e-08 error grad 4.367569204e-07
+DEAL::0.2131627953 0.5663675440 0.2290556314: 0.2131628394 error value -1.490116119e-08 error grad 4.223463179e-07
+DEAL::
+DEAL::-13.62434101 0.5178825855 0.07092788070 0.006867631339 -0.4719552398 0.01545562968 0.0001540676458 -0.0001887183753 2.703586102 -0.5710443258 0.3443513215 -0.1924414933 0.2324616164 -0.03550052270 0.02131112106 -0.01680930331 10.71459198 -4.090117455 2.326079369 -1.398071766 0.1790473759 0.003202366643 0.08002419770 -0.01936457120 0.04971134290 0.0008878231165 0.001967728138 0.002526564989 0.01079680212 -0.006328543648 -0.06748064607 0.006622490473 0.3122871816 -0.09511690587 0.09248834848 -0.04345437512 0.002182444325 0.02422303520 0.1327949762 -0.001964735566 -14.64396286 4.004190445 -2.180568695 1.280625343 0.3860600293 -0.1480218768 0.03311750665 -0.04273703694 -0.08619602770 -0.007933901623 0.002372428309 0.0009272717871 0.01014671475 0.006921459921 -0.01569093578 0.001402750029 -6.955353737 0.3518200517 -0.4292257130 0.2305431813 0.1277251691 0.2820614576 0.1781704724 0.01801668666 0.2620730400 -0.2656389773 1.087673187 -0.04278098792 -0.1325736046 0.004930475261 0.03158776462 -0.01631496288 -0.3810899556 -0.2138093859 0.07210822403 -0.03278301656 0.01610870287 -0.01486381516 0.09505479038 -0.01532815956 0.1654914767 -0.4387933612 1.761516571 -0.01149478462 -0.02682679519 0.01788072661 0.3222283125 -0.03092356771 6.611968517 -1.969498277 1.441189408 -0.8427309394 -3.552631855 2.158221722 -0.5223464370 0.2561098933 1.743032694 -0.6306168437 -1.017322659 -0.2971495688 -1.044081450 0.3965651691 -0.04952684790 0.1235420331 -0.09058871865 0.1040911004 -0.004746123683 -0.008899960667 -0.3270231485 0.7738800645 0.1898225397 -0.06171064451 -0.08956568688 0.3432351351 -2.483001947 -0.5569383502 -0.02564778551 -0.02690271847 0.08140199631 0.007079379167 6.636899948 -2.314287901 1.065527558 -0.6306967139 -1.790485263 -0.9765981436 -0.1806871444 0.09261295199 0.7674400210 0.3652373850 0.4510362148 -0.01052452810 -0.4869471192 -0.02285704017 -0.3211436272 0.04640639573 0.6560580730 -0.1932682097 -0.006384706590 -0.02467247657 -0.02914182097 -0.7341765165 -0.02278366871 0.01053783577 -0.005720693152 0.3402568996 0.4704143107 0.3275492489 -0.01395398192 -0.05811086297 -0.6315166354 -0.01494068466 5.469547749 5.400884628 -1.882451892 1.051501274 2.693789482 6.820693970 -0.9934476018 0.5994112492 -0.3554961383 -2.681905985 -0.6898796558 -0.3288702369 0.2625621259 0.9435142279 0.5385839939 0.08717692643 -10.64966202 -3.344609499 0.03057921864 -0.03842161968 -2.319989681 3.483485460 -0.6515755057 0.06214567274 -0.1492089480 7.720964432 3.087631702 -0.04977551103 -0.2782434821 -2.329771996 -1.571546435 0.05880239606 3.191684008 -0.5546978712 4.190329075 -0.5697665215 0.7603561282 -6.762126923 -10.60070610 1.539770722 -3.249000072 9.740856171 2.453309298 -6.559881687 0.1229214519 -0.8379780054 9.866867065 -0.04740010947 -1.821581244 0.5263152719 0.1420908421 0.05023293197 0.04617084563 2.191656351 -0.07397802174 -0.01095001306 -0.07883934677 -0.8329725266 -1.704125643 -1.504090071 0.06263647974 0.1133949310 2.651709795 0.07031597197 

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.