]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Cleanup workarounds for VectorizedArray 8443/head
authorDaniel Arndt <arndtd@ornl.gov>
Fri, 2 Aug 2019 20:10:31 +0000 (16:10 -0400)
committerDaniel Arndt <arndtd@ornl.gov>
Fri, 2 Aug 2019 20:12:39 +0000 (16:12 -0400)
include/deal.II/base/numbers.h
include/deal.II/base/tensor.h
include/deal.II/base/vectorization.h

index 10b41a36b090eb762dc6f4d263eba07d4670f6d2..e264687af3930580852476fdd7175911cc993b62 100644 (file)
@@ -708,18 +708,9 @@ namespace internal
     static bool const value = test<From, To>(0);
   };
 
-  /**
-   * The structs below are needed since VectorizedArray<T1> is a POD-type
-   * without a constructor and can be a template argument for
-   * SymmetricTensor<...,T2> where T2 would equal VectorizedArray<T1>.
-   * Internally, in previous versions of deal.II, SymmetricTensor<...,T2> would
-   * make use of the constructor of T2 leading to a compile-time error. However
-   * simply adding a constructor for VectorizedArray<T1> breaks the POD-idioms
-   * needed elsewhere. Calls to constructors of T2 subsequently got replaced by
-   * a call to internal::NumberType<T2> which then determines the right function
-   * to use by template deduction. A detailed discussion can be found at
-   * https://github.com/dealii/dealii/pull/3967 . Also see numbers.h for another
-   * specialization.
+  /*
+   * The structs below are needed to convert between some special number types.
+   * Also see tensor.h for another specialization.
    */
   template <typename T>
   struct NumberType
index c2fd168fcb7b78035303459adbd73f24b72675de..90fc129269d9603ba8aed3dd7be4c0afc3d96ef7 100644 (file)
@@ -743,17 +743,8 @@ private:
 namespace internal
 {
   /**
-   * The structs below are needed since VectorizedArray<T1> is a POD-type
-   * without a constructor and can be a template argument for Tensor<...,T2>
-   * where T2 would equal Tensor<1, dim, VectorizedArray >. Internally, in
-   * previous versions of deal.II, Tensor<...,T2> would make use of the
-   * constructor of T2 leading to a compile-time error. However simply adding a
-   * constructor for VectorizedArray<T1> breaks the POD-idioms needed elsewhere.
-   * Calls to constructors of T2 subsequently got replaced by a call to
-   * internal::NumberType<T2> which then determines the right function to use by
-   * template deduction. A detailed discussion can be found at
-   * https://github.com/dealii/dealii/pull/3967 . Also see numbers.h for another
-   * specialization.
+   * The structs below are needed to initialize nested Tensor objects.
+   * Also see numbers.h for another specialization.
    */
   template <int rank, int dim, typename T>
   struct NumberType<Tensor<rank, dim, T>>
@@ -772,35 +763,6 @@ namespace internal
       return tmp;
     }
   };
-
-  template <int rank, int dim, typename T, int width>
-  struct NumberType<Tensor<rank, dim, VectorizedArray<T, width>>>
-  {
-    static constexpr DEAL_II_ALWAYS_INLINE const
-      Tensor<rank, dim, VectorizedArray<T, width>> &
-      value(const Tensor<rank, dim, VectorizedArray<T, width>> &t)
-    {
-      return t;
-    }
-
-    static DEAL_II_CONSTEXPR
-      DEAL_II_ALWAYS_INLINE Tensor<rank, dim, VectorizedArray<T, width>>
-                            value(const T &t)
-    {
-      Tensor<rank, dim, VectorizedArray<T, width>> tmp;
-      tmp = internal::NumberType<VectorizedArray<T, width>>::value(t);
-      return tmp;
-    }
-
-    static DEAL_II_CONSTEXPR
-      DEAL_II_ALWAYS_INLINE Tensor<rank, dim, VectorizedArray<T, width>>
-                            value(const VectorizedArray<T, width> &t)
-    {
-      Tensor<rank, dim, VectorizedArray<T, width>> tmp;
-      tmp = t;
-      return tmp;
-    }
-  };
 } // namespace internal
 
 
index a795d955d87b13b5c6c0032b6f0c70ef5d2e3849..51a0ffb65707285031c6c9034b70e82b915ed8a9 100644 (file)
 DEAL_II_NAMESPACE_OPEN
 
 
-namespace internal
-{
-  /**
-   * The structs below are needed since VectorizedArray<T1> is a POD-type
-   * without a constructor and can be a template argument for
-   * SymmetricTensor<...,T2> where T2 would equal VectorizedArray<T1>.
-   * Internally, in previous versions of deal.II, SymmetricTensor<...,T2> would
-   * make use of the constructor of T2 leading to a compile-time error. However
-   * simply adding a constructor for VectorizedArray<T1> breaks the POD-idioms
-   * needed elsewhere. Calls to constructors of T2 subsequently got replaced by
-   * a call to internal::NumberType<T2> which then determines the right function
-   * to use by template deduction. A detailed discussion can be found at
-   * https://github.com/dealii/dealii/pull/3967 . Also see numbers.h for other
-   * specializations.
-   */
-  template <typename T, int width>
-  struct NumberType<VectorizedArray<T, width>>
-  {
-    static const VectorizedArray<T, width> &
-    value(const VectorizedArray<T, width> &t)
-    {
-      return t;
-    }
-
-    static VectorizedArray<T, width>
-    value(const T &t)
-    {
-      VectorizedArray<T, width> tmp;
-      tmp = t;
-      return tmp;
-    }
-  };
-} // namespace internal
-
-
 // Enable the EnableIfScalar type trait for VectorizedArray<Number> such
 // that it can be used as a Number type in Tensor<rank,dim,Number>, etc.
 
@@ -526,8 +491,7 @@ template <
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              make_vectorized_array(const Number &u)
 {
-  VectorizedArray<Number, width> result;
-  result = u;
+  VectorizedArray<Number, width> result = u;
   return result;
 }
 
@@ -549,8 +513,7 @@ inline DEAL_II_ALWAYS_INLINE VectorizedArrayType
                                  VectorizedArrayType::n_array_elements>>::value,
     "VectorizedArrayType is not a VectorizedArray.");
 
-  VectorizedArrayType result;
-  result = u;
+  VectorizedArrayType result = u;
   return result;
 }
 
@@ -3703,8 +3666,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator+(const Number &u, const VectorizedArray<Number, width> &v)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return tmp += v;
 }
 
@@ -3720,8 +3682,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator+(const double u, const VectorizedArray<float, width> &v)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = u;
+  VectorizedArray<float, width> tmp = u;
   return tmp += v;
 }
 
@@ -3763,8 +3724,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator-(const Number &u, const VectorizedArray<Number, width> &v)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return tmp -= v;
 }
 
@@ -3780,8 +3740,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator-(const double u, const VectorizedArray<float, width> &v)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = float(u);
+  VectorizedArray<float, width> tmp = static_cast<float>(u);
   return tmp -= v;
 }
 
@@ -3795,8 +3754,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator-(const VectorizedArray<Number, width> &v, const Number &u)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return v - tmp;
 }
 
@@ -3812,8 +3770,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator-(const VectorizedArray<float, width> &v, const double u)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = float(u);
+  VectorizedArray<float, width> tmp = static_cast<float>(u);
   return v - tmp;
 }
 
@@ -3827,8 +3784,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator*(const Number &u, const VectorizedArray<Number, width> &v)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return tmp *= v;
 }
 
@@ -3844,8 +3800,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator*(const double u, const VectorizedArray<float, width> &v)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = float(u);
+  VectorizedArray<float, width> tmp = static_cast<float>(u);
   return tmp *= v;
 }
 
@@ -3887,8 +3842,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator/(const Number &u, const VectorizedArray<Number, width> &v)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return tmp /= v;
 }
 
@@ -3904,8 +3858,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator/(const double u, const VectorizedArray<float, width> &v)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = float(u);
+  VectorizedArray<float, width> tmp = static_cast<float>(u);
   return tmp /= v;
 }
 
@@ -3919,8 +3872,7 @@ template <typename Number, int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<Number, width>
                              operator/(const VectorizedArray<Number, width> &v, const Number &u)
 {
-  VectorizedArray<Number, width> tmp;
-  tmp = u;
+  VectorizedArray<Number, width> tmp = u;
   return v / tmp;
 }
 
@@ -3936,8 +3888,7 @@ template <int width>
 inline DEAL_II_ALWAYS_INLINE VectorizedArray<float, width>
                              operator/(const VectorizedArray<float, width> &v, const double u)
 {
-  VectorizedArray<float, width> tmp;
-  tmp = float(u);
+  VectorizedArray<float, width> tmp = static_cast<float>(u);
   return v / tmp;
 }
 

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.