From 0c233a058c9b1363dcca5a948a05a24b0613ee6c Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Thu, 11 Aug 2016 12:06:39 -0500 Subject: [PATCH] Implement the conversion of a SymmetricTensor<4,dim> to Tensor<4,dim>. --- include/deal.II/base/symmetric_tensor.h | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/include/deal.II/base/symmetric_tensor.h b/include/deal.II/base/symmetric_tensor.h index 501c0ec940..609f2e668d 100644 --- a/include/deal.II/base/symmetric_tensor.h +++ b/include/deal.II/base/symmetric_tensor.h @@ -1054,10 +1054,24 @@ namespace internal template dealii::Tensor<4,dim,Number> - convert_to_tensor (const dealii::SymmetricTensor<4,dim,Number> &) + convert_to_tensor (const dealii::SymmetricTensor<4,dim,Number> &st) { - Assert (false, ExcNotImplemented()); - return dealii::Tensor<4,dim,Number>(); + // utilize the symmetry properties of SymmetricTensor<4,dim> + // discussed in the class documentation to avoid accessing all + // independent elements of the input tensor more than once + dealii::Tensor<4,dim,Number> t; + + for (unsigned int i=0; i(i,j,k,l)] + = t[TableIndices<4>(i,j,l,k)] + = t[TableIndices<4>(j,i,k,l)] + = t[TableIndices<4>(j,i,l,k)] + = st[TableIndices<4>(i,j,k,l)]; + + return t; } } } -- 2.39.5