]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix host-device annotations
authorDaniel Arndt <arndtd@ornl.gov>
Sat, 25 Feb 2023 15:40:48 +0000 (10:40 -0500)
committerDaniel Arndt <arndtd@ornl.gov>
Sat, 25 Feb 2023 15:40:48 +0000 (10:40 -0500)
include/deal.II/base/array_view.h
include/deal.II/base/config.h.in
include/deal.II/base/symmetric_tensor.h
include/deal.II/base/table_indices.h
include/deal.II/base/tensor.h
include/deal.II/lac/read_write_vector.h
include/deal.II/physics/elasticity/standard_tensors.h

index 31a54358237aa0bfb0642e6c6662de203bf7b5ba..9a118dbcdfe4fb2de34dc9c8510e6b65ebb346c0 100644 (file)
@@ -319,8 +319,8 @@ public:
    * Return a pointer to the underlying array serving as element storage.
    * In case the container is empty a nullptr is returned.
    */
-  value_type *
-  data() const noexcept;
+  DEAL_II_HOST_DEVICE value_type *
+                      data() const noexcept;
 
   /**
    * Return an iterator pointing to the beginning of the array view.
@@ -539,8 +539,9 @@ ArrayView<ElementType, MemorySpaceType>::operator!=(
 
 
 template <typename ElementType, typename MemorySpaceType>
-inline typename ArrayView<ElementType, MemorySpaceType>::value_type *
-ArrayView<ElementType, MemorySpaceType>::data() const noexcept
+inline DEAL_II_HOST_DEVICE
+  typename ArrayView<ElementType, MemorySpaceType>::value_type *
+  ArrayView<ElementType, MemorySpaceType>::data() const noexcept
 {
   if (n_elements == 0)
     return nullptr;
index b2b830344d35c71e101ce1862eec47b98e01467c..c6ef29e331b7dfaadcdacc712c5d335dc95eec6c 100644 (file)
 #endif
 #cmakedefine DEAL_II_FALLTHROUGH @DEAL_II_FALLTHROUGH@
 #cmakedefine DEAL_II_CONSTEXPR @DEAL_II_CONSTEXPR@
+// clang++ assumes that all constexpr functions are __host__ __device__ when
+// compiling CUDA code, i.e, when Kokkos was configured with CUDA support.
+// This is problematic when calling non-constexpr functions in constexpr
+// functions. Also, we intend constexpr functions to only be device-callable if
+// not marked with DEAL_II_HOST_DEVICE. Hence, just annotate constexpr
+// functions additionally with "__host__".
+#if defined(DEAL_II_CONSTEXPR)
+#  if defined(__clang__) && defined(__CUDA__)
+#    define DEAL_II_CONSTEXPR_FUNCTION DEAL_II_CONSTEXPR __host__
+#  else
+#    define DEAL_II_CONSTEXPR_FUNCTION DEAL_II_CONSTEXPR
+#  endif
+#endif
+
 
 // defined for backwards compatibility with older deal.II versions
 #define DEAL_II_WITH_CXX11
index 4a8397a6d0c1b8957a7d1b2d2bf7f84f9f6712a2..580e257c1cc2cac6a2de7a320147b5682ec0cedc 100644 (file)
@@ -45,8 +45,9 @@ class SymmetricTensor;
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number = double>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-                                               unit_symmetric_tensor();
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<2, dim, Number>
+  unit_symmetric_tensor();
 
 /**
  * Return the tensor of rank 4 that, when multiplied by a symmetric rank 2
@@ -77,8 +78,9 @@ DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number = double>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
-                                               deviator_tensor();
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<4, dim, Number>
+  deviator_tensor();
 
 /**
  * Return the fourth-order symmetric identity tensor $\mathbb S$ which maps
@@ -118,16 +120,17 @@ DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number = double>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
-                                               identity_tensor();
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<4, dim, Number>
+  identity_tensor();
 
 template <int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-                                invert(const SymmetricTensor<2, dim, Number> &);
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
+invert(const SymmetricTensor<2, dim, Number> &);
 
 template <int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
-                                invert(const SymmetricTensor<4, dim, Number> &);
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
+invert(const SymmetricTensor<4, dim, Number> &);
 
 /**
  * Compute and return the trace of a tensor of rank 2, i.e. the sum of its
@@ -139,7 +142,7 @@ constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
  * @relatesalso SymmetricTensor
  */
 template <int dim2, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number
 trace(const SymmetricTensor<2, dim2, Number> &);
 
 /**
@@ -153,8 +156,9 @@ trace(const SymmetricTensor<2, dim2, Number> &);
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-deviator(const SymmetricTensor<2, dim, Number> &);
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<2, dim, Number>
+  deviator(const SymmetricTensor<2, dim, Number> &);
 
 /**
  * Compute the determinant of a rank 2 symmetric tensor. The determinant is
@@ -170,7 +174,7 @@ deviator(const SymmetricTensor<2, dim, Number> &);
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number
 determinant(const SymmetricTensor<2, dim, Number> &);
 
 
@@ -246,7 +250,7 @@ namespace internal
      * put at position <tt>position</tt>. The remaining indices remain in
      * invalid state.
      */
-    DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE TableIndices<2>
+    DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE TableIndices<2>
     merge(const TableIndices<2> &previous_indices,
           const unsigned int     new_index,
           const unsigned int     position)
@@ -267,7 +271,7 @@ namespace internal
      * put at position <tt>position</tt>. The remaining indices remain in
      * invalid state.
      */
-    DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE TableIndices<4>
+    DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE TableIndices<4>
     merge(const TableIndices<4> &previous_indices,
           const unsigned int     new_index,
           const unsigned int     position)
@@ -502,27 +506,27 @@ namespace internal
        * This guarantees that the accessor objects go out of scope earlier
        * than the mother object, avoid problems with data consistency.
        */
-      constexpr Accessor(tensor_type &             tensor,
-                         const TableIndices<rank> &previous_indices);
+      DEAL_II_CONSTEXPR_FUNCTION
+      Accessor(tensor_type &tensor, const TableIndices<rank> &previous_indices);
 
       /**
        * Copy constructor.
        */
-      constexpr DEAL_II_ALWAYS_INLINE
+      DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
       Accessor(const Accessor &) = default;
 
     public:
       /**
        * Index operator.
        */
-      constexpr Accessor<rank, dim, constness, P - 1, Number>
-      operator[](const unsigned int i);
+      DEAL_II_CONSTEXPR_FUNCTION Accessor<rank, dim, constness, P - 1, Number>
+                                 operator[](const unsigned int i);
 
       /**
        * Index operator.
        */
-      constexpr Accessor<rank, dim, constness, P - 1, Number>
-      operator[](const unsigned int i) const;
+      DEAL_II_CONSTEXPR_FUNCTION Accessor<rank, dim, constness, P - 1, Number>
+                                 operator[](const unsigned int i) const;
 
     private:
       /**
@@ -584,26 +588,26 @@ namespace internal
        * This guarantees that the accessor objects go out of scope earlier
        * than the mother object, avoid problems with data consistency.
        */
-      constexpr Accessor(tensor_type &             tensor,
-                         const TableIndices<rank> &previous_indices);
+      DEAL_II_CONSTEXPR_FUNCTION
+      Accessor(tensor_type &tensor, const TableIndices<rank> &previous_indices);
 
       /**
        * Copy constructor.
        */
-      constexpr DEAL_II_ALWAYS_INLINE
+      DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
       Accessor(const Accessor &) = default;
 
     public:
       /**
        * Index operator.
        */
-      constexpr reference
+      DEAL_II_CONSTEXPR_FUNCTION reference
       operator[](const unsigned int);
 
       /**
        * Index operator.
        */
-      constexpr reference
+      DEAL_II_CONSTEXPR_FUNCTION reference
       operator[](const unsigned int) const;
 
     private:
@@ -733,7 +737,7 @@ public:
   /**
    * Default constructor. Creates a tensor with all entries equal to zero.
    */
-  constexpr DEAL_II_ALWAYS_INLINE
+  DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   SymmetricTensor() = default;
 
   /**
@@ -767,7 +771,8 @@ public:
    * the object from the internal namespace is to work around bugs in some
    * older compilers.
    */
-  constexpr SymmetricTensor(const Number (&array)[n_independent_components]);
+  DEAL_II_CONSTEXPR_FUNCTION
+  SymmetricTensor(const Number (&array)[n_independent_components]);
 
   /**
    * Copy constructor from tensors with different underlying scalar type. This
@@ -775,7 +780,7 @@ public:
    * Number.
    */
   template <typename OtherNumber>
-  constexpr explicit SymmetricTensor(
+  DEAL_II_CONSTEXPR_FUNCTION explicit SymmetricTensor(
     const SymmetricTensor<rank_, dim, OtherNumber> &initializer);
 
   /**
@@ -834,7 +839,7 @@ public:
    * @p Number.
    */
   template <typename OtherNumber>
-  constexpr SymmetricTensor &
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
   operator=(const SymmetricTensor<rank_, dim, OtherNumber> &rhs);
 
   /**
@@ -843,39 +848,39 @@ public:
    * value allowed for <tt>d</tt>, allowing the intuitive notation
    * $\mathbf A = 0$ to reset all elements of the tensor to zero.
    */
-  constexpr SymmetricTensor &
-  operator=(const Number &d);
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
+                             operator=(const Number &d);
 
   /**
    * Convert the present symmetric tensor into a full tensor with the same
    * elements, but using the different storage scheme of full tensors.
    */
-  constexpr operator Tensor<rank_, dim, Number>() const;
+  DEAL_II_CONSTEXPR_FUNCTION operator Tensor<rank_, dim, Number>() const;
 
   /**
    * Test for equality of two tensors.
    */
-  constexpr bool
+  DEAL_II_CONSTEXPR_FUNCTION bool
   operator==(const SymmetricTensor &) const;
 
   /**
    * Test for inequality of two tensors.
    */
-  constexpr bool
+  DEAL_II_CONSTEXPR_FUNCTION bool
   operator!=(const SymmetricTensor &) const;
 
   /**
    * Add another tensor.
    */
   template <typename OtherNumber>
-  constexpr SymmetricTensor &
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
   operator+=(const SymmetricTensor<rank_, dim, OtherNumber> &);
 
   /**
    * Subtract another tensor.
    */
   template <typename OtherNumber>
-  constexpr SymmetricTensor &
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
   operator-=(const SymmetricTensor<rank_, dim, OtherNumber> &);
 
   /**
@@ -883,20 +888,20 @@ public:
    * <tt>factor</tt>.
    */
   template <typename OtherNumber>
-  constexpr SymmetricTensor &
-  operator*=(const OtherNumber &factor);
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
+                             operator*=(const OtherNumber &factor);
 
   /**
    * Scale the tensor by <tt>1/factor</tt>.
    */
   template <typename OtherNumber>
-  constexpr SymmetricTensor &
-  operator/=(const OtherNumber &factor);
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor &
+                             operator/=(const OtherNumber &factor);
 
   /**
    * Unary minus operator. Negate all entries of a tensor.
    */
-  constexpr SymmetricTensor
+  DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor
   operator-() const;
 
   /**
@@ -952,7 +957,7 @@ public:
    *   symmetric tensors.
    */
   template <typename OtherNumber>
-  DEAL_II_CONSTEXPR typename internal::SymmetricTensorAccessors::
+  DEAL_II_CONSTEXPR_FUNCTION typename internal::SymmetricTensorAccessors::
     double_contraction_result<rank_, 2, dim, Number, OtherNumber>::type
     operator*(const SymmetricTensor<2, dim, OtherNumber> &s) const;
 
@@ -961,27 +966,27 @@ public:
    * two indices of the rank-4 symmetric tensor given as argument.
    */
   template <typename OtherNumber>
-  DEAL_II_CONSTEXPR typename internal::SymmetricTensorAccessors::
+  DEAL_II_CONSTEXPR_FUNCTION typename internal::SymmetricTensorAccessors::
     double_contraction_result<rank_, 4, dim, Number, OtherNumber>::type
     operator*(const SymmetricTensor<4, dim, OtherNumber> &s) const;
 
   /**
    * Return a read-write reference to the indicated element.
    */
-  constexpr Number &
-  operator()(const TableIndices<rank_> &indices);
+  DEAL_II_CONSTEXPR_FUNCTION Number &
+                             operator()(const TableIndices<rank_> &indices);
 
   /**
    * Return a @p const reference to the value referred to by the argument.
    */
-  constexpr const Number &
+  DEAL_II_CONSTEXPR_FUNCTION const Number &
   operator()(const TableIndices<rank_> &indices) const;
 
   /**
    * Access the elements of a row of this symmetric tensor. This function is
    * called for constant tensors.
    */
-  constexpr internal::SymmetricTensorAccessors::
+  DEAL_II_CONSTEXPR_FUNCTION internal::SymmetricTensorAccessors::
     Accessor<rank_, dim, true, rank_ - 1, Number>
     operator[](const unsigned int row) const;
 
@@ -989,7 +994,7 @@ public:
    * Access the elements of a row of this symmetric tensor. This function is
    * called for non-constant tensors.
    */
-  constexpr internal::SymmetricTensorAccessors::
+  DEAL_II_CONSTEXPR_FUNCTION internal::SymmetricTensorAccessors::
     Accessor<rank_, dim, false, rank_ - 1, Number>
     operator[](const unsigned int row);
 
@@ -998,7 +1003,7 @@ public:
    *
    * Exactly the same as operator().
    */
-  constexpr const Number &
+  DEAL_II_CONSTEXPR_FUNCTION const Number &
   operator[](const TableIndices<rank_> &indices) const;
 
   /**
@@ -1006,8 +1011,8 @@ public:
    *
    * Exactly the same as operator().
    */
-  constexpr Number &
-  operator[](const TableIndices<rank_> &indices);
+  DEAL_II_CONSTEXPR_FUNCTION Number &
+                             operator[](const TableIndices<rank_> &indices);
 
   /**
    * Access to an element according to unrolled index. The function
@@ -1015,7 +1020,7 @@ public:
    * <tt>s[s.unrolled_to_component_indices(unrolled_index)]</tt>, but more
    * efficiently.
    */
-  constexpr const Number &
+  DEAL_II_CONSTEXPR_FUNCTION const Number &
   access_raw_entry(const unsigned int unrolled_index) const;
 
   /**
@@ -1024,7 +1029,7 @@ public:
    * <tt>s[s.unrolled_to_component_indices(unrolled_index)]</tt>, but more
    * efficiently.
    */
-  constexpr Number &
+  DEAL_II_CONSTEXPR_FUNCTION Number &
   access_raw_entry(const unsigned int unrolled_index);
 
   /**
@@ -1036,7 +1041,7 @@ public:
    * upper right as well as lower left entries, not just one of them, although
    * they are equal for symmetric tensors).
    */
-  constexpr typename numbers::NumberTraits<Number>::real_type
+  DEAL_II_CONSTEXPR_FUNCTION typename numbers::NumberTraits<Number>::real_type
   norm() const;
 
   /**
@@ -1046,7 +1051,7 @@ public:
    * <code>[0,n_independent_components)</code> the given entry in a symmetric
    * tensor has.
    */
-  static constexpr unsigned int
+  static DEAL_II_CONSTEXPR_FUNCTION unsigned int
   component_to_unrolled_index(const TableIndices<rank_> &indices);
 
   /**
@@ -1054,7 +1059,7 @@ public:
    * form of the tensor, return what set of indices $(k,l)$ (for rank-2
    * tensors) or $(k,l,m,n)$ (for rank-4 tensors) corresponds to it.
    */
-  static constexpr TableIndices<rank_>
+  static DEAL_II_CONSTEXPR_FUNCTION TableIndices<rank_>
   unrolled_to_component_indices(const unsigned int i);
 
   /**
@@ -1069,15 +1074,15 @@ public:
    * and indeed the state where all elements have a zero value is the state
    * right after construction of such an object.
    */
-  constexpr void
+  DEAL_II_CONSTEXPR_FUNCTION void
   clear();
 
   /**
    * Determine an estimate for the memory consumption (in bytes) of this
    * object.
    */
-  static constexpr std::size_t
-  memory_consumption();
+  static DEAL_II_CONSTEXPR_FUNCTION std::size_t
+                                    memory_consumption();
 
   /**
    * Read or write the data of this object to or from a stream for the purpose
@@ -1113,28 +1118,28 @@ private:
 
   // Make a few more functions friends.
   template <int dim2, typename Number2>
-  friend constexpr Number2
+  friend DEAL_II_CONSTEXPR_FUNCTION Number2
   trace(const SymmetricTensor<2, dim2, Number2> &d);
 
   template <int dim2, typename Number2>
-  friend DEAL_II_CONSTEXPR Number2
+  friend DEAL_II_CONSTEXPR_FUNCTION Number2
   determinant(const SymmetricTensor<2, dim2, Number2> &t);
 
   template <int dim2, typename Number2>
-  friend constexpr SymmetricTensor<2, dim2, Number2>
+  friend DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<2, dim2, Number2>
   deviator(const SymmetricTensor<2, dim2, Number2> &t);
 
   template <int dim2, typename Number2>
-  friend DEAL_II_CONSTEXPR SymmetricTensor<2, dim2, Number2>
-                           unit_symmetric_tensor();
+  friend DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<2, dim2, Number2>
+                                    unit_symmetric_tensor();
 
   template <int dim2, typename Number2>
-  friend DEAL_II_CONSTEXPR SymmetricTensor<4, dim2, Number2>
-                           deviator_tensor();
+  friend DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim2, Number2>
+                                    deviator_tensor();
 
   template <int dim2, typename Number2>
-  friend DEAL_II_CONSTEXPR SymmetricTensor<4, dim2, Number2>
-                           identity_tensor();
+  friend DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim2, Number2>
+                                    identity_tensor();
 
 
   // Make a few helper classes friends as well.
@@ -1165,7 +1170,7 @@ namespace internal
   namespace SymmetricTensorAccessors
   {
     template <int rank_, int dim, bool constness, int P, typename Number>
-    constexpr DEAL_II_ALWAYS_INLINE
+    DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
     Accessor<rank_, dim, constness, P, Number>::Accessor(
       tensor_type &              tensor,
       const TableIndices<rank_> &previous_indices)
@@ -1176,7 +1181,7 @@ namespace internal
 
 
     template <int rank_, int dim, bool constness, int P, typename Number>
-    constexpr inline DEAL_II_ALWAYS_INLINE
+    DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
       Accessor<rank_, dim, constness, P - 1, Number>
       Accessor<rank_, dim, constness, P, Number>::operator[](
         const unsigned int i)
@@ -1188,8 +1193,8 @@ namespace internal
 
 
     template <int rank_, int dim, bool constness, int P, typename Number>
-    constexpr DEAL_II_ALWAYS_INLINE
-      Accessor<rank_, dim, constness, P - 1, Number>
+    DEAL_II_CONSTEXPR_FUNCTION
+      DEAL_II_ALWAYS_INLINE Accessor<rank_, dim, constness, P - 1, Number>
       Accessor<rank_, dim, constness, P, Number>::operator[](
         const unsigned int i) const
     {
@@ -1200,7 +1205,7 @@ namespace internal
 
 
     template <int rank_, int dim, bool constness, typename Number>
-    constexpr DEAL_II_ALWAYS_INLINE
+    DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
     Accessor<rank_, dim, constness, 1, Number>::Accessor(
       tensor_type &              tensor,
       const TableIndices<rank_> &previous_indices)
@@ -1211,7 +1216,7 @@ namespace internal
 
 
     template <int rank_, int dim, bool constness, typename Number>
-    constexpr inline DEAL_II_ALWAYS_INLINE
+    DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
       typename Accessor<rank_, dim, constness, 1, Number>::reference
       Accessor<rank_, dim, constness, 1, Number>::operator[](
         const unsigned int i)
@@ -1221,7 +1226,7 @@ namespace internal
 
 
     template <int rank_, int dim, bool constness, typename Number>
-    constexpr DEAL_II_ALWAYS_INLINE
+    DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
       typename Accessor<rank_, dim, constness, 1, Number>::reference
       Accessor<rank_, dim, constness, 1, Number>::operator[](
         const unsigned int i) const
@@ -1257,7 +1262,7 @@ SymmetricTensor<rank_, dim, Number>::SymmetricTensor(
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
 SymmetricTensor<rank_, dim, Number>::SymmetricTensor(
   const SymmetricTensor<rank_, dim, OtherNumber> &initializer)
   : data(initializer.data)
@@ -1266,7 +1271,7 @@ SymmetricTensor<rank_, dim, Number>::SymmetricTensor(
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
 SymmetricTensor<rank_, dim, Number>::SymmetricTensor(
   const Number (&array)[n_independent_components])
   : data(
@@ -1281,9 +1286,10 @@ SymmetricTensor<rank_, dim, Number>::SymmetricTensor(
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator=(
-  const SymmetricTensor<rank_, dim, OtherNumber> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator=(
+    const SymmetricTensor<rank_, dim, OtherNumber> &t)
 {
   data = t.data;
   return *this;
@@ -1292,8 +1298,9 @@ SymmetricTensor<rank_, dim, Number>::operator=(
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator=(const Number &d)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator=(const Number &d)
 {
   Assert(numbers::value_is_zero(d),
          ExcMessage("Only assignment with zero is allowed"));
@@ -1654,7 +1661,7 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   SymmetricTensor<rank_, dim, Number>::operator Tensor<rank_, dim, Number>()
     const
 {
@@ -1664,7 +1671,7 @@ constexpr DEAL_II_ALWAYS_INLINE
 
 
 template <int rank_, int dim, typename Number>
-constexpr bool
+DEAL_II_CONSTEXPR_FUNCTION bool
 SymmetricTensor<rank_, dim, Number>::operator==(
   const SymmetricTensor<rank_, dim, Number> &t) const
 {
@@ -1674,7 +1681,7 @@ SymmetricTensor<rank_, dim, Number>::operator==(
 
 
 template <int rank_, int dim, typename Number>
-constexpr bool
+DEAL_II_CONSTEXPR_FUNCTION bool
 SymmetricTensor<rank_, dim, Number>::operator!=(
   const SymmetricTensor<rank_, dim, Number> &t) const
 {
@@ -1685,9 +1692,10 @@ SymmetricTensor<rank_, dim, Number>::operator!=(
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator+=(
-  const SymmetricTensor<rank_, dim, OtherNumber> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator+=(
+    const SymmetricTensor<rank_, dim, OtherNumber> &t)
 {
   data += t.data;
   return *this;
@@ -1697,9 +1705,10 @@ SymmetricTensor<rank_, dim, Number>::operator+=(
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator-=(
-  const SymmetricTensor<rank_, dim, OtherNumber> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator-=(
+    const SymmetricTensor<rank_, dim, OtherNumber> &t)
 {
   data -= t.data;
   return *this;
@@ -1709,8 +1718,9 @@ SymmetricTensor<rank_, dim, Number>::operator-=(
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator*=(const OtherNumber &d)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator*=(const OtherNumber &d)
 {
   data *= d;
   return *this;
@@ -1720,8 +1730,9 @@ SymmetricTensor<rank_, dim, Number>::operator*=(const OtherNumber &d)
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number> &
-SymmetricTensor<rank_, dim, Number>::operator/=(const OtherNumber &d)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number> &
+  SymmetricTensor<rank_, dim, Number>::operator/=(const OtherNumber &d)
 {
   data /= d;
   return *this;
@@ -1730,8 +1741,9 @@ SymmetricTensor<rank_, dim, Number>::operator/=(const OtherNumber &d)
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
-SymmetricTensor<rank_, dim, Number>::operator-() const
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number>
+  SymmetricTensor<rank_, dim, Number>::operator-() const
 {
   SymmetricTensor tmp = *this;
   tmp.data            = -tmp.data;
@@ -1741,7 +1753,7 @@ SymmetricTensor<rank_, dim, Number>::operator-() const
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE void
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE void
 SymmetricTensor<rank_, dim, Number>::clear()
 {
   data.clear();
@@ -1750,7 +1762,7 @@ SymmetricTensor<rank_, dim, Number>::clear()
 
 
 template <int rank_, int dim, typename Number>
-constexpr std::size_t
+DEAL_II_CONSTEXPR_FUNCTION std::size_t
 SymmetricTensor<rank_, dim, Number>::memory_consumption()
 {
   // all memory consists of statically allocated memory of the current
@@ -1763,7 +1775,7 @@ SymmetricTensor<rank_, dim, Number>::memory_consumption()
 namespace internal
 {
   template <int dim, typename Number, typename OtherNumber = Number>
-  DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
+  DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
     typename SymmetricTensorAccessors::
       double_contraction_result<2, 2, dim, Number, OtherNumber>::type
       perform_double_contraction(
@@ -1798,7 +1810,7 @@ namespace internal
 
 
   template <int dim, typename Number, typename OtherNumber = Number>
-  DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
+  DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
     typename SymmetricTensorAccessors::
       double_contraction_result<4, 2, dim, Number, OtherNumber>::type
       perform_double_contraction(
@@ -1824,7 +1836,7 @@ namespace internal
 
 
   template <int dim, typename Number, typename OtherNumber = Number>
-  DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
+  DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
     typename SymmetricTensorAccessors::StorageType<
       2,
       dim,
@@ -1862,7 +1874,7 @@ namespace internal
 
 
   template <int dim, typename Number, typename OtherNumber = Number>
-  DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
+  DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
     typename SymmetricTensorAccessors::StorageType<
       4,
       dim,
@@ -1904,7 +1916,7 @@ namespace internal
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
   typename internal::SymmetricTensorAccessors::
     double_contraction_result<rank_, 2, dim, Number, OtherNumber>::type
     SymmetricTensor<rank_, dim, Number>::operator*(
@@ -1922,7 +1934,7 @@ DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE
 
 template <int rank_, int dim, typename Number>
 template <typename OtherNumber>
-DEAL_II_CONSTEXPR inline typename internal::SymmetricTensorAccessors::
+DEAL_II_CONSTEXPR_FUNCTION inline typename internal::SymmetricTensorAccessors::
   double_contraction_result<rank_, 4, dim, Number, OtherNumber>::type
   SymmetricTensor<rank_, dim, Number>::operator*(
     const SymmetricTensor<4, dim, OtherNumber> &s) const
@@ -2141,7 +2153,7 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE Number &
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number &
 SymmetricTensor<rank_, dim, Number>::operator()(
   const TableIndices<rank_> &indices)
 {
@@ -2153,7 +2165,7 @@ SymmetricTensor<rank_, dim, Number>::operator()(
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE const Number &
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE const Number &
 SymmetricTensor<rank_, dim, Number>::operator()(
   const TableIndices<rank_> &indices) const
 {
@@ -2192,8 +2204,8 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE internal::SymmetricTensorAccessors::
-  Accessor<rank_, dim, true, rank_ - 1, Number>
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE internal::
+  SymmetricTensorAccessors::Accessor<rank_, dim, true, rank_ - 1, Number>
   SymmetricTensor<rank_, dim, Number>::operator[](const unsigned int row) const
 {
   return internal::SymmetricTensorAccessors::
@@ -2206,8 +2218,8 @@ constexpr DEAL_II_ALWAYS_INLINE internal::SymmetricTensorAccessors::
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE internal::SymmetricTensorAccessors::
-  Accessor<rank_, dim, false, rank_ - 1, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE internal::
+  SymmetricTensorAccessors::Accessor<rank_, dim, false, rank_ - 1, Number>
   SymmetricTensor<rank_, dim, Number>::operator[](const unsigned int row)
 {
   return internal::SymmetricTensorAccessors::
@@ -2220,7 +2232,7 @@ constexpr inline DEAL_II_ALWAYS_INLINE internal::SymmetricTensorAccessors::
 
 
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE const Number &
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE const Number &
 SymmetricTensor<rank_, dim, Number>::operator[](
   const TableIndices<rank_> &indices) const
 {
@@ -2230,7 +2242,7 @@ SymmetricTensor<rank_, dim, Number>::operator[](
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE Number &
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number &
 SymmetricTensor<rank_, dim, Number>::operator[](
   const TableIndices<rank_> &indices)
 {
@@ -2303,7 +2315,7 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline const Number &
+DEAL_II_CONSTEXPR_FUNCTION inline const Number &
 SymmetricTensor<rank_, dim, Number>::access_raw_entry(
   const unsigned int index) const
 {
@@ -2315,7 +2327,7 @@ SymmetricTensor<rank_, dim, Number>::access_raw_entry(
 
 
 template <int rank_, int dim, typename Number>
-constexpr inline Number &
+DEAL_II_CONSTEXPR_FUNCTION inline Number &
 SymmetricTensor<rank_, dim, Number>::access_raw_entry(const unsigned int index)
 {
   AssertIndexRange(index, n_independent_components);
@@ -2417,7 +2429,7 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr typename numbers::NumberTraits<Number>::real_type
+DEAL_II_CONSTEXPR_FUNCTION typename numbers::NumberTraits<Number>::real_type
 SymmetricTensor<rank_, dim, Number>::norm() const
 {
   return internal::compute_norm<dim, Number>(data);
@@ -2511,7 +2523,7 @@ namespace internal
 
 
 template <int rank_, int dim, typename Number>
-constexpr unsigned int
+DEAL_II_CONSTEXPR_FUNCTION unsigned int
 SymmetricTensor<rank_, dim, Number>::component_to_unrolled_index(
   const TableIndices<rank_> &indices)
 {
@@ -2613,7 +2625,7 @@ namespace internal
 } // namespace internal
 
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE TableIndices<rank_>
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE TableIndices<rank_>
 SymmetricTensor<rank_, dim, Number>::unrolled_to_component_indices(
   const unsigned int i)
 {
@@ -2650,7 +2662,7 @@ SymmetricTensor<rank_, dim, Number>::serialize(Archive &ar, const unsigned int)
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
   SymmetricTensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator+(const SymmetricTensor<rank_, dim, Number> &     left,
             const SymmetricTensor<rank_, dim, OtherNumber> &right)
@@ -2675,7 +2687,7 @@ constexpr inline DEAL_II_ALWAYS_INLINE
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
   SymmetricTensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator-(const SymmetricTensor<rank_, dim, Number> &     left,
             const SymmetricTensor<rank_, dim, OtherNumber> &right)
@@ -2695,7 +2707,7 @@ constexpr inline DEAL_II_ALWAYS_INLINE
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   Tensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator+(const SymmetricTensor<rank_, dim, Number> &left,
             const Tensor<rank_, dim, OtherNumber> &    right)
@@ -2712,7 +2724,7 @@ constexpr DEAL_II_ALWAYS_INLINE
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   Tensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator+(const Tensor<rank_, dim, Number> &              left,
             const SymmetricTensor<rank_, dim, OtherNumber> &right)
@@ -2729,7 +2741,7 @@ constexpr DEAL_II_ALWAYS_INLINE
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   Tensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator-(const SymmetricTensor<rank_, dim, Number> &left,
             const Tensor<rank_, dim, OtherNumber> &    right)
@@ -2746,7 +2758,7 @@ constexpr DEAL_II_ALWAYS_INLINE
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   Tensor<rank_, dim, typename ProductType<Number, OtherNumber>::type>
   operator-(const Tensor<rank_, dim, Number> &              left,
             const SymmetricTensor<rank_, dim, OtherNumber> &right)
@@ -2757,7 +2769,7 @@ constexpr DEAL_II_ALWAYS_INLINE
 
 
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number
 determinant(const SymmetricTensor<2, dim, Number> &t)
 {
   switch (dim)
@@ -2797,7 +2809,7 @@ determinant(const SymmetricTensor<2, dim, Number> &t)
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE Number
 third_invariant(const SymmetricTensor<2, dim, Number> &t)
 {
   return determinant(t);
@@ -2806,7 +2818,7 @@ third_invariant(const SymmetricTensor<2, dim, Number> &t)
 
 
 template <int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE Number
 trace(const SymmetricTensor<2, dim, Number> &d)
 {
   Number t = d.data[0];
@@ -2828,7 +2840,7 @@ trace(const SymmetricTensor<2, dim, Number> &d)
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr Number
+DEAL_II_CONSTEXPR_FUNCTION Number
 first_invariant(const SymmetricTensor<2, dim, Number> &t)
 {
   return trace(t);
@@ -2847,7 +2859,7 @@ first_invariant(const SymmetricTensor<2, dim, Number> &t)
  * @relatesalso SymmetricTensor
  */
 template <typename Number>
-constexpr DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE Number
 second_invariant(const SymmetricTensor<2, 1, Number> &)
 {
   return internal::NumberType<Number>::value(0.0);
@@ -2874,7 +2886,7 @@ second_invariant(const SymmetricTensor<2, 1, Number> &)
  * @relatesalso SymmetricTensor
  */
 template <typename Number>
-constexpr DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE Number
 second_invariant(const SymmetricTensor<2, 2, Number> &t)
 {
   return t[0][0] * t[1][1] - t[0][1] * t[0][1];
@@ -2891,7 +2903,7 @@ second_invariant(const SymmetricTensor<2, 2, Number> &t)
  * @relatesalso SymmetricTensor
  */
 template <typename Number>
-constexpr DEAL_II_ALWAYS_INLINE Number
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE Number
 second_invariant(const SymmetricTensor<2, 3, Number> &t)
 {
   return (t[0][0] * t[1][1] + t[1][1] * t[2][2] + t[2][2] * t[0][0] -
@@ -3296,8 +3308,9 @@ eigenvectors(const SymmetricTensor<2, dim, Number> &T,
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
-transpose(const SymmetricTensor<rank_, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION
+  DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
+                        transpose(const SymmetricTensor<rank_, dim, Number> &t)
 {
   return t;
 }
@@ -3305,8 +3318,9 @@ transpose(const SymmetricTensor<rank_, dim, Number> &t)
 
 
 template <int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-deviator(const SymmetricTensor<2, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<2, dim, Number>
+  deviator(const SymmetricTensor<2, dim, Number> &t)
 {
   SymmetricTensor<2, dim, Number> tmp = t;
 
@@ -3321,8 +3335,9 @@ deviator(const SymmetricTensor<2, dim, Number> &t)
 
 
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-                                               unit_symmetric_tensor()
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<2, dim, Number>
+  unit_symmetric_tensor()
 {
   // create a default constructed matrix filled with
   // zeros, then set the diagonal elements to one
@@ -3349,7 +3364,7 @@ DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
 
 
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR inline SymmetricTensor<4, dim, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<4, dim, Number>
 deviator_tensor()
 {
   SymmetricTensor<4, dim, Number> tmp;
@@ -3377,8 +3392,9 @@ deviator_tensor()
 
 
 template <int dim, typename Number>
-DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
-                                               identity_tensor()
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<4, dim, Number>
+  identity_tensor()
 {
   SymmetricTensor<4, dim, Number> tmp;
 
@@ -3412,8 +3428,8 @@ DEAL_II_CONSTEXPR inline DEAL_II_ALWAYS_INLINE SymmetricTensor<4, dim, Number>
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-                                invert(const SymmetricTensor<2, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
+invert(const SymmetricTensor<2, dim, Number> &t)
 {
   return internal::SymmetricTensorImplementation::Inverse<2, dim, Number>::
     value(t);
@@ -3432,8 +3448,8 @@ constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr SymmetricTensor<4, dim, Number>
-invert(const SymmetricTensor<4, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim, Number>
+                           invert(const SymmetricTensor<4, dim, Number> &t)
 {
   return internal::SymmetricTensorImplementation::Inverse<4, dim, Number>::
     value(t);
@@ -3463,7 +3479,7 @@ invert(const SymmetricTensor<4, dim, Number> &t)
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr inline SymmetricTensor<4, dim, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<4, dim, Number>
 outer_product(const SymmetricTensor<2, dim, Number> &t1,
               const SymmetricTensor<2, dim, Number> &t2)
 {
@@ -3489,8 +3505,9 @@ outer_product(const SymmetricTensor<2, dim, Number> &t1,
  * @relatesalso SymmetricTensor
  */
 template <int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<2, dim, Number>
-symmetrize(const Tensor<2, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<2, dim, Number>
+  symmetrize(const Tensor<2, dim, Number> &t)
 {
   SymmetricTensor<2, dim, Number> result;
   for (unsigned int d = 0; d < dim; ++d)
@@ -3513,8 +3530,9 @@ symmetrize(const Tensor<2, dim, Number> &t)
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
-operator*(const SymmetricTensor<rank_, dim, Number> &t, const Number &factor)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim, Number>
+  operator*(const SymmetricTensor<rank_, dim, Number> &t, const Number &factor)
 {
   SymmetricTensor<rank_, dim, Number> tt = t;
   tt *= factor;
@@ -3531,8 +3549,9 @@ operator*(const SymmetricTensor<rank_, dim, Number> &t, const Number &factor)
  * @relatesalso SymmetricTensor
  */
 template <int rank_, int dim, typename Number>
-constexpr DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
-operator*(const Number &factor, const SymmetricTensor<rank_, dim, Number> &t)
+DEAL_II_CONSTEXPR_FUNCTION
+  DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim, Number>
+  operator*(const Number &factor, const SymmetricTensor<rank_, dim, Number> &t)
 {
   // simply forward to the other operator
   return t * factor;
@@ -3565,7 +3584,7 @@ operator*(const Number &factor, const SymmetricTensor<rank_, dim, Number> &t)
  * @relates SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE SymmetricTensor<
   rank_,
   dim,
   typename ProductType<Number,
@@ -3594,7 +3613,7 @@ operator*(const SymmetricTensor<rank_, dim, Number> &t,
  * @relates SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE SymmetricTensor<
   rank_,
   dim,
   typename ProductType<OtherNumber,
@@ -3614,7 +3633,7 @@ operator*(const Number &                                  factor,
  * @relates SymmetricTensor
  */
 template <int rank_, int dim, typename Number, typename OtherNumber>
-constexpr inline SymmetricTensor<
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<
   rank_,
   dim,
   typename ProductType<Number,
@@ -3637,8 +3656,9 @@ operator/(const SymmetricTensor<rank_, dim, Number> &t,
  * @relates SymmetricTensor
  */
 template <int rank_, int dim>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim>
-operator*(const SymmetricTensor<rank_, dim> &t, const double factor)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim>
+  operator*(const SymmetricTensor<rank_, dim> &t, const double factor)
 {
   SymmetricTensor<rank_, dim> tt(t);
   tt *= factor;
@@ -3654,8 +3674,9 @@ operator*(const SymmetricTensor<rank_, dim> &t, const double factor)
  * @relates SymmetricTensor
  */
 template <int rank_, int dim>
-constexpr inline DEAL_II_ALWAYS_INLINE SymmetricTensor<rank_, dim>
-operator*(const double factor, const SymmetricTensor<rank_, dim> &t)
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
+  SymmetricTensor<rank_, dim>
+  operator*(const double factor, const SymmetricTensor<rank_, dim> &t)
 {
   SymmetricTensor<rank_, dim> tt(t);
   tt *= factor;
@@ -3670,7 +3691,7 @@ operator*(const double factor, const SymmetricTensor<rank_, dim> &t)
  * @relates SymmetricTensor
  */
 template <int rank_, int dim>
-constexpr inline SymmetricTensor<rank_, dim>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<rank_, dim>
 operator/(const SymmetricTensor<rank_, dim> &t, const double factor)
 {
   SymmetricTensor<rank_, dim> tt(t);
@@ -3688,9 +3709,10 @@ operator/(const SymmetricTensor<rank_, dim> &t, const double factor)
  * @relates SymmetricTensor
  */
 template <int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE typename ProductType<Number, OtherNumber>::type
-scalar_product(const SymmetricTensor<2, dim, Number> &     t1,
-               const SymmetricTensor<2, dim, OtherNumber> &t2)
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
+  typename ProductType<Number, OtherNumber>::type
+  scalar_product(const SymmetricTensor<2, dim, Number> &     t1,
+                 const SymmetricTensor<2, dim, OtherNumber> &t2)
 {
   return (t1 * t2);
 }
@@ -3709,7 +3731,7 @@ scalar_product(const SymmetricTensor<2, dim, Number> &     t1,
  * @relates SymmetricTensor
  */
 template <int dim, typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE
   typename ProductType<Number, OtherNumber>::type
   scalar_product(const SymmetricTensor<2, dim, Number> &t1,
                  const Tensor<2, dim, OtherNumber> &    t2)
@@ -3736,9 +3758,10 @@ constexpr inline DEAL_II_ALWAYS_INLINE
  * @relates SymmetricTensor
  */
 template <int dim, typename Number, typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE typename ProductType<Number, OtherNumber>::type
-scalar_product(const Tensor<2, dim, Number> &              t1,
-               const SymmetricTensor<2, dim, OtherNumber> &t2)
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
+  typename ProductType<Number, OtherNumber>::type
+  scalar_product(const Tensor<2, dim, Number> &              t1,
+                 const SymmetricTensor<2, dim, OtherNumber> &t2)
 {
   return scalar_product(t2, t1);
 }
@@ -3759,7 +3782,7 @@ scalar_product(const Tensor<2, dim, Number> &              t1,
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline DEAL_II_ALWAYS_INLINE void
+DEAL_II_CONSTEXPR_FUNCTION inline DEAL_II_ALWAYS_INLINE void
 double_contract(
   SymmetricTensor<2, 1, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<4, 1, Number> &                                   t,
@@ -3785,7 +3808,7 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 double_contract(
   SymmetricTensor<2, 1, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<2, 1, Number> &                                   s,
@@ -3811,7 +3834,7 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 double_contract(
   SymmetricTensor<2, 2, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<4, 2, Number> &                                   t,
@@ -3842,7 +3865,7 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 double_contract(
   SymmetricTensor<2, 2, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<2, 2, Number> &                                   s,
@@ -3873,7 +3896,7 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 double_contract(
   SymmetricTensor<2, 3, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<4, 3, Number> &                                   t,
@@ -3905,7 +3928,7 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <typename Number, typename OtherNumber>
-constexpr inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 double_contract(
   SymmetricTensor<2, 3, typename ProductType<Number, OtherNumber>::type> &tmp,
   const SymmetricTensor<2, 3, Number> &                                   s,
@@ -3929,9 +3952,10 @@ double_contract(
  * @relates SymmetricTensor
  */
 template <int dim, typename Number, typename OtherNumber>
-constexpr Tensor<1, dim, typename ProductType<Number, OtherNumber>::type>
-operator*(const SymmetricTensor<2, dim, Number> &src1,
-          const Tensor<1, dim, OtherNumber> &    src2)
+DEAL_II_CONSTEXPR_FUNCTION
+  Tensor<1, dim, typename ProductType<Number, OtherNumber>::type>
+  operator*(const SymmetricTensor<2, dim, Number> &src1,
+            const Tensor<1, dim, OtherNumber> &    src2)
 {
   Tensor<1, dim, typename ProductType<Number, OtherNumber>::type> dest;
   for (unsigned int i = 0; i < dim; ++i)
@@ -3948,9 +3972,10 @@ operator*(const SymmetricTensor<2, dim, Number> &src1,
  * @relates SymmetricTensor
  */
 template <int dim, typename Number, typename OtherNumber>
-constexpr Tensor<1, dim, typename ProductType<Number, OtherNumber>::type>
-operator*(const Tensor<1, dim, Number> &              src1,
-          const SymmetricTensor<2, dim, OtherNumber> &src2)
+DEAL_II_CONSTEXPR_FUNCTION
+  Tensor<1, dim, typename ProductType<Number, OtherNumber>::type>
+  operator*(const Tensor<1, dim, Number> &              src1,
+            const SymmetricTensor<2, dim, OtherNumber> &src2)
 {
   // this is easy for symmetric tensors:
   return src2 * src1;
@@ -3982,7 +4007,7 @@ template <int rank_1,
           int dim,
           typename Number,
           typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   typename Tensor<rank_1 + rank_2 - 2,
                   dim,
                   typename ProductType<Number, OtherNumber>::type>::tensor_type
@@ -4018,7 +4043,7 @@ template <int rank_1,
           int dim,
           typename Number,
           typename OtherNumber>
-constexpr DEAL_II_ALWAYS_INLINE
+DEAL_II_CONSTEXPR_FUNCTION DEAL_II_ALWAYS_INLINE
   typename Tensor<rank_1 + rank_2 - 2,
                   dim,
                   typename ProductType<Number, OtherNumber>::type>::tensor_type
index f7d8a7c5abe6c8be6354375c5e0fd197788d47ad..ae1ceff5068df6946aa80d27ed2a487612957f23 100644 (file)
@@ -93,7 +93,7 @@ public:
    * Sort the indices in ascending order. While this operation is not very
    * useful for Table objects, it is used for the SymmetricTensor class.
    */
-  DEAL_II_CONSTEXPR void
+  DEAL_II_CONSTEXPR_FUNCTION void
   sort();
 
   /**
@@ -165,7 +165,7 @@ TableIndices<N>::operator!=(const TableIndices<N> &other) const
 
 
 template <int N>
-DEAL_II_CONSTEXPR inline void
+DEAL_II_CONSTEXPR_FUNCTION inline void
 TableIndices<N>::sort()
 {
   std::sort(std::begin(indices), std::end(indices));
index eefd25c2fb0de3b7c10cd20764147b28b015928d..5d17ee88081601d750436bdb7b6dfa04525cdc6f 100644 (file)
@@ -1720,7 +1720,7 @@ constexpr inline DEAL_II_ALWAYS_INLINE
 
 
 template <int rank_, int dim, typename Number>
-inline typename numbers::NumberTraits<Number>::real_type
+inline DEAL_II_HOST_DEVICE typename numbers::NumberTraits<Number>::real_type
 Tensor<rank_, dim, Number>::norm() const
 {
   // Make things work with AD types
index 62358e09177bb6e0cf8d92aaa59faf4ae2b5b583..536e39901a0705ffad090ef4cb7f9c6a0426c82c 100644 (file)
@@ -737,7 +737,8 @@ namespace LinearAlgebra
     /**
      * Pointer to the array of local elements of this vector.
      */
-    std::unique_ptr<Number[], decltype(std::free) *> values;
+    std::unique_ptr<Number[], /*decltype(std::free) * */ void (*)(void *)>
+      values;
 
     /**
      * For parallel loops with TBB, this member variable stores the affinity
index 7facd3b6ead7054995abbd1288b4055ff82b0a46..550bb84c351646277ab944defc72bdd728513202 100644 (file)
@@ -231,8 +231,8 @@ namespace Physics
        * @dealiiHolzapfelA{229,6.83}
        */
       template <typename Number>
-      static DEAL_II_CONSTEXPR SymmetricTensor<4, dim, Number>
-                               Dev_P(const Tensor<2, dim, Number> &F);
+      static DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim, Number>
+                                        Dev_P(const Tensor<2, dim, Number> &F);
 
       /**
        * Return the transpose of the fourth-order referential deviatoric tensor,
@@ -246,8 +246,8 @@ namespace Physics
        * @f]
        */
       template <typename Number>
-      static DEAL_II_CONSTEXPR SymmetricTensor<4, dim, Number>
-                               Dev_P_T(const Tensor<2, dim, Number> &F);
+      static DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim, Number>
+      Dev_P_T(const Tensor<2, dim, Number> &F);
 
       /** @} */
 
@@ -273,8 +273,8 @@ namespace Physics
        * @dealiiHolzapfelA{228,6.82}
        */
       template <typename Number>
-      static DEAL_II_CONSTEXPR SymmetricTensor<2, dim, Number>
-                               ddet_F_dC(const Tensor<2, dim, Number> &F);
+      static DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<2, dim, Number>
+      ddet_F_dC(const Tensor<2, dim, Number> &F);
 
       /** @} */
 
@@ -298,8 +298,8 @@ namespace Physics
        * @dealiiWriggersA{76,3.255}
        */
       template <typename Number>
-      static DEAL_II_CONSTEXPR SymmetricTensor<4, dim, Number>
-                               dC_inv_dC(const Tensor<2, dim, Number> &F);
+      static DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<4, dim, Number>
+      dC_inv_dC(const Tensor<2, dim, Number> &F);
 
       /** @} */
     };
@@ -316,7 +316,7 @@ namespace Physics
 
 template <int dim>
 template <typename Number>
-DEAL_II_CONSTEXPR inline SymmetricTensor<4, dim, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<4, dim, Number>
 Physics::Elasticity::StandardTensors<dim>::Dev_P(
   const Tensor<2, dim, Number> &F)
 {
@@ -343,7 +343,7 @@ Physics::Elasticity::StandardTensors<dim>::Dev_P(
 
 template <int dim>
 template <typename Number>
-DEAL_II_CONSTEXPR inline SymmetricTensor<4, dim, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<4, dim, Number>
 Physics::Elasticity::StandardTensors<dim>::Dev_P_T(
   const Tensor<2, dim, Number> &F)
 {
@@ -371,8 +371,8 @@ Physics::Elasticity::StandardTensors<dim>::Dev_P_T(
 
 template <int dim>
 template <typename Number>
-DEAL_II_CONSTEXPR SymmetricTensor<2, dim, Number>
-                  Physics::Elasticity::StandardTensors<dim>::ddet_F_dC(
+DEAL_II_CONSTEXPR_FUNCTION SymmetricTensor<2, dim, Number>
+                           Physics::Elasticity::StandardTensors<dim>::ddet_F_dC(
   const Tensor<2, dim, Number> &F)
 {
   return internal::NumberType<Number>::value(0.5 * determinant(F)) *
@@ -383,7 +383,7 @@ DEAL_II_CONSTEXPR SymmetricTensor<2, dim, Number>
 
 template <int dim>
 template <typename Number>
-DEAL_II_CONSTEXPR inline SymmetricTensor<4, dim, Number>
+DEAL_II_CONSTEXPR_FUNCTION inline SymmetricTensor<4, dim, Number>
 Physics::Elasticity::StandardTensors<dim>::dC_inv_dC(
   const Tensor<2, dim, Number> &F)
 {

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.