]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix ADOL-C warnings
authorDaniel Arndt <arndtd@ornl.gov>
Tue, 19 Nov 2019 03:38:51 +0000 (22:38 -0500)
committerDaniel Arndt <arndtd@ornl.gov>
Tue, 19 Nov 2019 03:39:11 +0000 (22:39 -0500)
include/deal.II/base/symmetric_tensor.templates.h
source/base/symmetric_tensor.cc
source/base/symmetric_tensor.inst.in

index 64c1886d260918ae0c84d5f5c2c6a7fb4be3e6cf..865867332934f56478faf3e238c20040aada4bad 100644 (file)
@@ -1001,80 +1001,6 @@ eigenvectors(const SymmetricTensor<2, dim, Number> &T,
 
 
 
-#ifdef DEAL_II_ADOLC_WITH_ADVANCED_BRANCHING
-
-// Specializations of the above functions for taped ADOL-C numbers
-// when the advanced branching feature is activated.
-// We could copy-paste all of these functions and add the appropriate
-// conditional assignments (see the ADOL-C manual, section 1.8).
-// However, some of the conditions are quite complicated (with possibly
-// no 1-1 correspondence for the operations along each branch) so this
-// needs some careful attention. For the sake of simplicity and until
-// this can be rigourously checked, at this point in time we simply
-// disable these functions.
-
-namespace internal
-{
-  namespace SymmetricTensorImplementation
-  {
-    template <>
-    struct Inverse<4, 3, adouble>
-    {
-      static dealii::SymmetricTensor<4, 3, adouble>
-      value(const dealii::SymmetricTensor<4, 3, adouble> & /*t*/)
-      {
-        AssertThrow(false, ExcADOLCAdvancedBranching());
-        return dealii::SymmetricTensor<4, 3, adouble>();
-      }
-    };
-  } // namespace SymmetricTensorImplementation
-} // namespace internal
-
-template <>
-std::array<adouble, 1>
-eigenvalues(const SymmetricTensor<2, 1, adouble> & /*T*/)
-{
-  AssertThrow(false, ExcADOLCAdvancedBranching());
-  return std::array<adouble, 1>();
-}
-
-
-
-template <>
-std::array<adouble, 2>
-eigenvalues(const SymmetricTensor<2, 2, adouble> & /*T*/)
-{
-  AssertThrow(false, ExcADOLCAdvancedBranching());
-  return std::array<adouble, 2>();
-}
-
-
-
-template <>
-std::array<adouble, 3>
-eigenvalues(const SymmetricTensor<2, 3, adouble> & /*T*/)
-{
-  AssertThrow(false, ExcADOLCAdvancedBranching());
-  return std::array<adouble, 3>();
-}
-
-
-
-template <int dim>
-std::array<std::pair<adouble, Tensor<1, dim, adouble>>,
-           std::integral_constant<int, dim>::value>
-eigenvectors(const SymmetricTensor<2, dim, adouble> & /*T*/,
-             const SymmetricTensorEigenvectorMethod /*method*/)
-{
-  AssertThrow(false, ExcADOLCAdvancedBranching());
-  return std::array<std::pair<adouble, Tensor<1, dim, adouble>>,
-                    std::integral_constant<int, dim>::value>();
-}
-
-#endif
-
-
-
 DEAL_II_NAMESPACE_CLOSE
 
 #endif
index ac98f1d475b127f3faf7123f0dc756763d7c3f21..e0995d383eb84b5c3fb46fb6ccb06d5a928af49b 100644 (file)
 #include <deal.II/differentiation/ad/sacado_product_types.h>
 
 DEAL_II_NAMESPACE_OPEN
+#ifdef DEAL_II_WITH_ADOLC
+#  ifdef DEAL_II_ADOLC_WITH_ADVANCED_BRANCHING
+
+// Specializations of the above functions for taped ADOL-C numbers
+// when the advanced branching feature is activated.
+// We could copy-paste all of these functions and add the appropriate
+// conditional assignments (see the ADOL-C manual, section 1.8).
+// However, some of the conditions are quite complicated (with possibly
+// no 1-1 correspondence for the operations along each branch) so this
+// needs some careful attention. For the sake of simplicity and until
+// this can be rigourously checked, at this point in time we simply
+// disable these functions.
+namespace internal
+{
+  namespace SymmetricTensorImplementation
+  {
+    template <>
+    struct Inverse<4, 3, adouble>
+    {
+      static dealii::SymmetricTensor<4, 3, adouble>
+      value(const dealii::SymmetricTensor<4, 3, adouble> & /*t*/)
+      {
+        AssertThrow(false, ExcADOLCAdvancedBranching());
+        return dealii::SymmetricTensor<4, 3, adouble>();
+      }
+    };
+  } // namespace SymmetricTensorImplementation
+} // namespace internal
+
+template <>
+std::array<adouble, 1>
+eigenvalues(const SymmetricTensor<2, 1, adouble> & /*T*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<adouble, 1>();
+}
+
+
+
+template <>
+std::array<adouble, 2>
+eigenvalues(const SymmetricTensor<2, 2, adouble> & /*T*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<adouble, 2>();
+}
+
+
+
+template <>
+std::array<adouble, 3>
+eigenvalues(const SymmetricTensor<2, 3, adouble> & /*T*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<adouble, 3>();
+}
+
+
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 1, adouble>>, 1>
+eigenvectors(const SymmetricTensor<2, 1, adouble> & /*T*/,
+             const SymmetricTensorEigenvectorMethod /*method*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<std::pair<adouble, Tensor<1, 1, adouble>>, 1>();
+}
+
+
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 2, adouble>>, 2>
+eigenvectors(const SymmetricTensor<2, 2, adouble> & /*T*/,
+             const SymmetricTensorEigenvectorMethod /*method*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<std::pair<adouble, Tensor<1, 2, adouble>>, 2>();
+}
+
+
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 3, adouble>>, 3>
+eigenvectors(const SymmetricTensor<2, 3, adouble> & /*T*/,
+             const SymmetricTensorEigenvectorMethod /*method*/)
+{
+  AssertThrow(false, ExcADOLCAdvancedBranching());
+  return std::array<std::pair<adouble, Tensor<1, 3, adouble>>, 3>();
+}
+#  else
+template std::array<adouble, 1>
+eigenvalues(const SymmetricTensor<2, 1, adouble> &);
+
+template std::array<adouble, 2>
+eigenvalues(const SymmetricTensor<2, 2, adouble> &);
+
+template std::array<adouble, 3>
+eigenvalues(const SymmetricTensor<2, 3, adouble> &);
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 1, adouble>>, 1>
+eigenvectors(const SymmetricTensor<2, 1, adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 2, adouble>>, 2>
+eigenvectors(const SymmetricTensor<2, 2, adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+
+template <>
+std::array<std::pair<adouble, Tensor<1, 3, adouble>>, 3>
+eigenvectors(const SymmetricTensor<2, 3, adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+#  endif
+
+template std::array<adtl::adouble, 1>
+eigenvalues(const SymmetricTensor<2, 1, adtl::adouble> &);
+
+template std::array<adtl::adouble, 2>
+eigenvalues(const SymmetricTensor<2, 2, adtl::adouble> &);
+
+template std::array<adtl::adouble, 3>
+eigenvalues(const SymmetricTensor<2, 3, adtl::adouble> &);
+
+template <>
+std::array<std::pair<adtl::adouble, Tensor<1, 1, adtl::adouble>>, 1>
+eigenvectors(const SymmetricTensor<2, 1, adtl::adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+
+template <>
+std::array<std::pair<adtl::adouble, Tensor<1, 2, adtl::adouble>>, 2>
+eigenvectors(const SymmetricTensor<2, 2, adtl::adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+
+template <>
+std::array<std::pair<adtl::adouble, Tensor<1, 3, adtl::adouble>>, 3>
+eigenvectors(const SymmetricTensor<2, 3, adtl::adouble> &,
+             const SymmetricTensorEigenvectorMethod);
+#endif
 
 // explicit instantiations
 #include "symmetric_tensor.inst"
index 1729ec17b08b559245239a33da73202599a2ca70..1f4a580d1fc37671b8f84ccc69ae3b9634330fca 100644 (file)
@@ -34,14 +34,6 @@ for (deal_II_dimension : DIMENSIONS; number : DIFFERENTIABLE_ADOLC_REAL_SCALARS)
     template class SymmetricTensor<2, deal_II_dimension, number>;
 
     template class SymmetricTensor<4, deal_II_dimension, number>;
-
-    template std::array<number, deal_II_dimension> eigenvalues(
-      const SymmetricTensor<2, deal_II_dimension, number> &);
-
-    template std::array<std::pair<number, Tensor<1, deal_II_dimension, number>>,
-                        std::integral_constant<int, deal_II_dimension>::value>
-    eigenvectors(const SymmetricTensor<2, deal_II_dimension, number> &,
-                 const SymmetricTensorEigenvectorMethod);
   }
 
 for (deal_II_dimension : DIMENSIONS;

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.