]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Update FEValues::internal::do_function_* to use std::decay
authorJean-Paul Pelteret <jppelteret@gmail.com>
Thu, 24 Aug 2017 09:08:39 +0000 (11:08 +0200)
committerJean-Paul Pelteret <jppelteret@gmail.com>
Thu, 24 Aug 2017 09:23:36 +0000 (11:23 +0200)
source/fe/fe_values.cc

index f36d21b3eb69b5cbb753aeb8ac41e6ac64a8511e..92bcd8dfe65bcca90838a507a3a1cc5db65d9d2c 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <iomanip>
 #include <memory>
+#include <type_traits>
 
 #include <deal.II/differentiation/ad/sacado_product_types.h>
 
@@ -461,21 +462,21 @@ namespace FEValuesViews
     do_function_values (const ArrayView<Number> &dof_values,
                         const Table<2,double> &shape_values,
                         const std::vector<typename Scalar<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                        std::vector<typename ProductType<typename std::remove_cv<Number>::type,double>::type>            &values)
+                        std::vector<typename ProductType<typename std::decay<Number>::type,double>::type>            &values)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
                                                shape_values.n_cols() : values.size();
       AssertDimension (values.size(), n_quadrature_points);
 
-      std::fill (values.begin(), values.end(), Number());
+      std::fill (values.begin(), values.end(), dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0));
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
         if (shape_function_data[shape_function].is_nonzero_shape_function_component)
           {
             const Number &value = dof_values[shape_function];
-            if (value == Number() )
+            if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
               continue;
 
             const double *shape_value_ptr =
@@ -494,7 +495,7 @@ namespace FEValuesViews
     do_function_derivatives (const ArrayView<Number> &dof_values,
                              const Table<2,dealii::Tensor<order,spacedim> > &shape_derivatives,
                              const std::vector<typename Scalar<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                             std::vector<typename ProductType<Number,dealii::Tensor<order,spacedim> >::type> &derivatives)
+                             std::vector<typename ProductType<typename std::decay<Number>::type,dealii::Tensor<order,spacedim> >::type> &derivatives)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -502,14 +503,14 @@ namespace FEValuesViews
       AssertDimension (derivatives.size(), n_quadrature_points);
 
       std::fill (derivatives.begin(), derivatives.end(),
-                 typename ProductType<Number,dealii::Tensor<order,spacedim> >::type());
+                 typename ProductType<typename std::decay<Number>::type,dealii::Tensor<order,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
         if (shape_function_data[shape_function].is_nonzero_shape_function_component)
           {
             const Number &value = dof_values[shape_function];
-            if (value == Number() )
+            if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
               continue;
 
             const dealii::Tensor<order,spacedim> *shape_derivative_ptr =
@@ -542,7 +543,7 @@ namespace FEValuesViews
         if (shape_function_data[shape_function].is_nonzero_shape_function_component)
           {
             const Number &value = dof_values[shape_function];
-            if (value == Number())
+            if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
               continue;
 
             const dealii::Tensor<2,spacedim> *shape_hessian_ptr =
@@ -560,14 +561,14 @@ namespace FEValuesViews
     void do_function_values (const ArrayView<Number> &dof_values,
                              const Table<2,double>          &shape_values,
                              const std::vector<typename Vector<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                             std::vector<typename ProductType<Number,dealii::Tensor<1,spacedim> >::type> &values)
+                             std::vector<typename ProductType<typename std::decay<Number>::type,dealii::Tensor<1,spacedim> >::type> &values)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
                                                shape_values.n_cols() : values.size();
       AssertDimension (values.size(), n_quadrature_points);
 
-      std::fill (values.begin(), values.end(), typename ProductType<Number,dealii::Tensor<1,spacedim> >::type());
+      std::fill (values.begin(), values.end(), typename ProductType<typename std::decay<Number>::type,dealii::Tensor<1,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -579,7 +580,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -609,7 +610,7 @@ namespace FEValuesViews
     do_function_derivatives (const ArrayView<Number> &dof_values,
                              const Table<2,dealii::Tensor<order,spacedim> > &shape_derivatives,
                              const std::vector<typename Vector<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                             std::vector<typename ProductType<Number,dealii::Tensor<order+1,spacedim> >::type> &derivatives)
+                             std::vector<typename ProductType<typename std::decay<Number>::type,dealii::Tensor<order+1,spacedim> >::type> &derivatives)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -617,7 +618,7 @@ namespace FEValuesViews
       AssertDimension (derivatives.size(), n_quadrature_points);
 
       std::fill (derivatives.begin(), derivatives.end(),
-                 typename ProductType<Number,dealii::Tensor<order+1,spacedim> >::type());
+                 typename ProductType<typename std::decay<Number>::type,dealii::Tensor<order+1,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -629,7 +630,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -663,7 +664,7 @@ namespace FEValuesViews
     do_function_symmetric_gradients (const ArrayView<Number> &dof_values,
                                      const Table<2,dealii::Tensor<1,spacedim> > &shape_gradients,
                                      const std::vector<typename Vector<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                                     std::vector<typename ProductType<Number,dealii::SymmetricTensor<2,spacedim> >::type> &symmetric_gradients)
+                                     std::vector<typename ProductType<typename std::decay<Number>::type,dealii::SymmetricTensor<2,spacedim> >::type> &symmetric_gradients)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -671,7 +672,7 @@ namespace FEValuesViews
       AssertDimension (symmetric_gradients.size(), n_quadrature_points);
 
       std::fill (symmetric_gradients.begin(), symmetric_gradients.end(),
-                 typename ProductType<Number,dealii::SymmetricTensor<2,spacedim> >::type());
+                 typename ProductType<typename std::decay<Number>::type,dealii::SymmetricTensor<2,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -683,7 +684,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -736,7 +737,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -767,14 +768,15 @@ namespace FEValuesViews
     do_function_curls (const ArrayView<Number> &dof_values,
                        const Table<2,dealii::Tensor<1,spacedim> > &shape_gradients,
                        const std::vector<typename Vector<dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                       std::vector<typename ProductType<Number,typename dealii::internal::CurlType<spacedim>::type>::type> &curls)
+                       std::vector<typename ProductType<typename std::decay<Number>::type,typename dealii::internal::CurlType<spacedim>::type>::type> &curls)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
                                                shape_gradients[0].size() : curls.size();
       AssertDimension (curls.size(), n_quadrature_points);
 
-      std::fill (curls.begin(), curls.end(), typename ProductType<Number,typename dealii::internal::CurlType<spacedim>::type>::type());
+      std::fill (curls.begin(), curls.end(),
+                 typename ProductType<typename std::decay<Number>::type,typename dealii::internal::CurlType<spacedim>::type>::type());
 
       switch (spacedim)
         {
@@ -797,7 +799,7 @@ namespace FEValuesViews
 
               const Number &value = dof_values[shape_function];
 
-              if (value == Number())
+              if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
                 continue;
 
               if (snc != -1)
@@ -857,7 +859,7 @@ namespace FEValuesViews
 
               const Number &value = dof_values[shape_function];
 
-              if (value == Number())
+              if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
                 continue;
 
               if (snc != -1)
@@ -979,7 +981,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -1013,7 +1015,7 @@ namespace FEValuesViews
     do_function_values (const ArrayView<Number> &dof_values,
                         const dealii::Table<2,double>          &shape_values,
                         const std::vector<typename SymmetricTensor<2,dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                        std::vector<typename ProductType<Number,dealii::SymmetricTensor<2,spacedim> >::type> &values)
+                        std::vector<typename ProductType<typename std::decay<Number>::type,dealii::SymmetricTensor<2,spacedim> >::type> &values)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -1021,7 +1023,7 @@ namespace FEValuesViews
       AssertDimension (values.size(), n_quadrature_points);
 
       std::fill (values.begin(), values.end(),
-                 typename ProductType<Number,dealii::SymmetricTensor<2,spacedim> >::type());
+                 typename ProductType<typename std::decay<Number>::type,dealii::SymmetricTensor<2,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -1033,7 +1035,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -1087,7 +1089,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -1155,7 +1157,7 @@ namespace FEValuesViews
     do_function_values (const ArrayView<Number> &dof_values,
                         const dealii::Table<2,double>          &shape_values,
                         const std::vector<typename Tensor<2,dim,spacedim>::ShapeFunctionData> &shape_function_data,
-                        std::vector<typename ProductType<Number,dealii::Tensor<2,spacedim> >::type> &values)
+                        std::vector<typename ProductType<typename std::decay<Number>::type,dealii::Tensor<2,spacedim> >::type> &values)
     {
       const unsigned int dofs_per_cell = dof_values.size();
       const unsigned int n_quadrature_points = dofs_per_cell > 0 ?
@@ -1163,7 +1165,7 @@ namespace FEValuesViews
       AssertDimension (values.size(), n_quadrature_points);
 
       std::fill (values.begin(), values.end(),
-                 typename ProductType<Number,dealii::Tensor<2,spacedim> >::type());
+                 typename ProductType<typename std::decay<Number>::type,dealii::Tensor<2,spacedim> >::type());
 
       for (unsigned int shape_function=0;
            shape_function<dofs_per_cell; ++shape_function)
@@ -1175,7 +1177,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -1231,7 +1233,7 @@ namespace FEValuesViews
             continue;
 
           const Number &value = dof_values[shape_function];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (snc != -1)
@@ -2672,7 +2674,7 @@ namespace internal
     AssertDimension(values.size(), n_quadrature_points);
 
     // initialize with zero
-    std::fill_n (values.begin(), n_quadrature_points, Number());
+    std::fill_n (values.begin(), n_quadrature_points, dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0));
 
     // add up contributions of trial functions. note that here we deal with
     // scalar finite elements, so no need to check for non-primitivity of
@@ -2740,7 +2742,7 @@ namespace internal
       for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
         {
           const Number &value = dof_values_ptr[shape_func+mc*dofs_per_cell];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (fe.is_primitive(shape_func))
@@ -2815,7 +2817,7 @@ namespace internal
     for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
       {
         const Number &value = dof_values_ptr[shape_func];
-        if (value == Number())
+        if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
           continue;
 
         const Tensor<order,spacedim> *shape_derivative_ptr
@@ -2874,7 +2876,7 @@ namespace internal
       for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
         {
           const Number &value = dof_values_ptr[shape_func+mc*dofs_per_cell];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (fe.is_primitive(shape_func))
@@ -2934,7 +2936,7 @@ namespace internal
     AssertDimension(laplacians.size(), n_quadrature_points);
 
     // initialize with zero
-    std::fill_n (laplacians.begin(), n_quadrature_points, Number());
+    std::fill_n (laplacians.begin(), n_quadrature_points, dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0));
 
     // add up contributions of trial functions. note that here we deal with
     // scalar finite elements and also note that the Laplacian is
@@ -3000,7 +3002,7 @@ namespace internal
       for (unsigned int shape_func=0; shape_func<dofs_per_cell; ++shape_func)
         {
           const Number &value = dof_values_ptr[shape_func+mc*dofs_per_cell];
-          if (value == Number())
+          if (value == dealii::internal::NumberType<typename std::decay<Number>::type>::value(0.0))
             continue;
 
           if (fe.is_primitive(shape_func))

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.