From e6fce324766e9443823fdb7e2eef268d40e91d78 Mon Sep 17 00:00:00 2001 From: Martin Kronbichler Date: Tue, 20 Aug 2019 21:13:16 +0200 Subject: [PATCH] Avoid superfluous zero + add-into in tensor contraction --- include/deal.II/base/tensor_accessors.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/include/deal.II/base/tensor_accessors.h b/include/deal.II/base/tensor_accessors.h index b08d048709..a82c4027ed 100644 --- a/include/deal.II/base/tensor_accessors.h +++ b/include/deal.II/base/tensor_accessors.h @@ -714,12 +714,22 @@ namespace TensorAccessors { // Some auto-differentiable numbers need explicit // zero initialization. - T1 result = dealii::internal::NumberType::value(0.0); - for (unsigned int i = 0; i < dim; ++i) - result += - Contract2::template contract2(left[i], - right[i]); - return result; + if (dim == 0) + { + T1 result = dealii::internal::NumberType::value(0.0); + return result; + } + else + { + T1 result = + Contract2::template contract2(left[0], + right[0]); + for (unsigned int i = 1; i < dim; ++i) + result += + Contract2::template contract2(left[i], + right[i]); + return result; + } } }; -- 2.39.5