From: Martin Kronbichler Date: Tue, 14 Apr 2015 13:31:34 +0000 (+0200) Subject: Improve order of multiplication/addition in perform_double_contraction which is perfo... X-Git-Tag: v8.3.0-rc1~275^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4aaf5bb2deb88a9d9cfd64a96212257b8f280a75;p=dealii.git Improve order of multiplication/addition in perform_double_contraction which is performance sensitive --- diff --git a/include/deal.II/base/symmetric_tensor.h b/include/deal.II/base/symmetric_tensor.h index e50518ea4e..4958cbf3c6 100644 --- a/include/deal.II/base/symmetric_tensor.h +++ b/include/deal.II/base/symmetric_tensor.h @@ -1184,11 +1184,14 @@ namespace internal data[1] * sdata[1] + 2*data[2] * sdata[2]); default: - Number sum = Number(); + // Start with the non-diagonal part to avoid some multiplications by + // 2. + Number sum = data[dim] * sdata[dim]; + for (unsigned int d=dim+1; d<(dim*(dim+1)/2); ++d) + sum += data[d] * sdata[d]; + sum *= 2.; for (unsigned int d=0; d