From 73ed8d2e2208a181110c5dc3adc065f6f1a905e1 Mon Sep 17 00:00:00 2001 From: Jean-Paul Pelteret <jppelteret@gmail.com> Date: Thu, 12 Apr 2018 15:39:11 +0200 Subject: [PATCH] Instantiate SymmetricTensor class for auto-differentiable numbers --- .../changes/minor/20180412Jean-PaulPelteret-4 | 4 + source/base/symmetric_tensor.cc | 6 +- source/base/symmetric_tensor.inst.in | 124 ++++++------------ 3 files changed, 45 insertions(+), 89 deletions(-) create mode 100644 doc/news/changes/minor/20180412Jean-PaulPelteret-4 diff --git a/doc/news/changes/minor/20180412Jean-PaulPelteret-4 b/doc/news/changes/minor/20180412Jean-PaulPelteret-4 new file mode 100644 index 0000000000..edb1c45a9b --- /dev/null +++ b/doc/news/changes/minor/20180412Jean-PaulPelteret-4 @@ -0,0 +1,4 @@ +Fixed: The SymmetricTensor class was previously not instantiated for +auto-differentiable numbers. +<br> +(Jean-Paul Pelteret, 2018/04/12) diff --git a/source/base/symmetric_tensor.cc b/source/base/symmetric_tensor.cc index b6c125d0e5..f4b6242ca5 100644 --- a/source/base/symmetric_tensor.cc +++ b/source/base/symmetric_tensor.cc @@ -16,12 +16,8 @@ #include <deal.II/base/config.h> // Required for instantiation of template functions -#ifdef DEAL_II_WITH_TRILINOS - -# include <Sacado.hpp> - +#include <deal.II/differentiation/ad/adolc_product_types.h> #include <deal.II/differentiation/ad/sacado_product_types.h> -#endif #include <deal.II/base/symmetric_tensor.h> #include <deal.II/base/symmetric_tensor.templates.h> diff --git a/source/base/symmetric_tensor.inst.in b/source/base/symmetric_tensor.inst.in index e321af8d47..7e7963fe7d 100644 --- a/source/base/symmetric_tensor.inst.in +++ b/source/base/symmetric_tensor.inst.in @@ -22,123 +22,79 @@ for (deal_II_dimension : DIMENSIONS; number : REAL_SCALARS) template class SymmetricTensor<4,deal_II_dimension,number>; - namespace internal - \{ - namespace SymmetricTensorImplementation - \{ template - void - tridiagonalize<deal_II_dimension, number> - (const dealii::SymmetricTensor<2,deal_II_dimension,number> &, - dealii::Tensor<2,deal_II_dimension,number> &, - std::array<number,deal_II_dimension> &, - std::array<number,deal_II_dimension-1> &); + 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> >,deal_II_dimension> - ql_implicit_shifts<deal_II_dimension, number> - (const dealii::SymmetricTensor<2,deal_II_dimension,number> &); - - template - std::array<std::pair<number, Tensor<1,deal_II_dimension,number> >,deal_II_dimension> - jacobi<deal_II_dimension, number> - (dealii::SymmetricTensor<2,deal_II_dimension,number>); - -#ifdef DEAL_II_WITH_TRILINOS - template - void - tridiagonalize<deal_II_dimension,Sacado::Fad::DFad<number> > - (const dealii::SymmetricTensor<2,deal_II_dimension,Sacado::Fad::DFad<number> > &, - dealii::Tensor<2,deal_II_dimension,Sacado::Fad::DFad<number> > &, - std::array<Sacado::Fad::DFad<number>,deal_II_dimension> &, - std::array<Sacado::Fad::DFad<number>,deal_II_dimension-1> &); - - template - std::array<std::pair<Sacado::Fad::DFad<number>, Tensor<1,deal_II_dimension,Sacado::Fad::DFad<number> > >,deal_II_dimension> - ql_implicit_shifts<deal_II_dimension,Sacado::Fad::DFad<number> > - (const dealii::SymmetricTensor<2,deal_II_dimension,Sacado::Fad::DFad<number> > &); - - template - std::array<std::pair<Sacado::Fad::DFad<number>, Tensor<1,deal_II_dimension,Sacado::Fad::DFad<number> > >,deal_II_dimension> - jacobi<deal_II_dimension,Sacado::Fad::DFad<number> > - (dealii::SymmetricTensor<2,deal_II_dimension,Sacado::Fad::DFad<number> >); -#endif - \} - \} + eigenvectors (const SymmetricTensor<2,deal_II_dimension,number> &, + const SymmetricTensorEigenvectorMethod); } -for (deal_II_dimension : DIMENSIONS; number : COMPLEX_SCALARS) +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>; -} - -for (number : REAL_SCALARS) -{ - namespace internal - \{ - namespace SymmetricTensorImplementation - \{ template - struct Inverse<4,3,number>; - \} - \} + std::array<number,deal_II_dimension> + eigenvalues (const SymmetricTensor<2,deal_II_dimension,number> &); template - SymmetricTensor<4,3,number> - invert (const SymmetricTensor<4,3,number> &t); + std::array<std::pair<number, Tensor<1,deal_II_dimension,number> >,deal_II_dimension> + eigenvectors (const SymmetricTensor<2,deal_II_dimension,number> &, + const SymmetricTensorEigenvectorMethod); +} +for (deal_II_dimension : DIMENSIONS; number : DIFFERENTIABLE_TRILINOS_SACADO_REAL_SCALARS) +{ template - std::array<number,1> - eigenvalues (const SymmetricTensor<2,1,number> &); + class SymmetricTensor<2,deal_II_dimension,number>; template - std::array<number,2> - eigenvalues (const SymmetricTensor<2,2,number> &); + class SymmetricTensor<4,deal_II_dimension,number>; template - std::array<number,3> - eigenvalues (const SymmetricTensor<2,3,number> &); + std::array<number,deal_II_dimension> + eigenvalues (const SymmetricTensor<2,deal_II_dimension,number> &); -#ifdef DEAL_II_WITH_TRILINOS template - std::array<Sacado::Fad::DFad<number>,1> - eigenvalues (const SymmetricTensor<2,1,Sacado::Fad::DFad<number> > &); + std::array<std::pair<number, Tensor<1,deal_II_dimension,number> >,deal_II_dimension> + eigenvectors (const SymmetricTensor<2,deal_II_dimension,number> &, + const SymmetricTensorEigenvectorMethod); +} +for (deal_II_dimension : DIMENSIONS; number : COMPLEX_SCALARS) +{ template - std::array<Sacado::Fad::DFad<number>,2> - eigenvalues (const SymmetricTensor<2,2,Sacado::Fad::DFad<number> > &); + class SymmetricTensor<2,deal_II_dimension,number>; template - std::array<Sacado::Fad::DFad<number>,3> - eigenvalues (const SymmetricTensor<2,3,Sacado::Fad::DFad<number> > &); -#endif + class SymmetricTensor<4,deal_II_dimension,number>; +} - namespace internal - \{ - namespace SymmetricTensorImplementation - \{ - template - std::array<std::pair<number, Tensor<1,2,number> >,2> - hybrid (const dealii::SymmetricTensor<2,2,number> &); +for (number : REAL_SCALARS) +{ template - std::array<std::pair<number, Tensor<1,3,number> >,3> - hybrid (const dealii::SymmetricTensor<2,3,number> &A); + SymmetricTensor<4,3,number> + invert (const SymmetricTensor<4,3,number> &t); +} -#ifdef DEAL_II_WITH_TRILINOS +for (number : DIFFERENTIABLE_ADOLC_REAL_SCALARS) +{ template - std::array<std::pair<Sacado::Fad::DFad<number>, Tensor<1,2,Sacado::Fad::DFad<number> > >,2> - hybrid (const dealii::SymmetricTensor<2,2,Sacado::Fad::DFad<number> > &); + SymmetricTensor<4,3,number> + invert (const SymmetricTensor<4,3,number> &t); +} +for (number : DIFFERENTIABLE_TRILINOS_SACADO_REAL_SCALARS) +{ template - std::array<std::pair<Sacado::Fad::DFad<number>, Tensor<1,3,Sacado::Fad::DFad<number> > >,3> - hybrid (const dealii::SymmetricTensor<2,3,Sacado::Fad::DFad<number> > &A); -#endif - \} - \} + SymmetricTensor<4,3,number> + invert (const SymmetricTensor<4,3,number> &t); } -- 2.39.5