From: Martin Kronbichler <martin.kronbichler@uni-a.de>
Date: Mon, 12 Sep 2022 14:44:19 +0000 (+0200)
Subject: Add additional comments regarding aliasing
X-Git-Tag: v9.5.0-rc1~978^2
X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e9f7eb076e80d34cceaafca15972a5a26e33167;p=dealii.git

Add additional comments regarding aliasing
---

diff --git a/include/deal.II/lac/vector_operations_internal.h b/include/deal.II/lac/vector_operations_internal.h
index 7d4d40cecc..011c1285f5 100644
--- a/include/deal.II/lac/vector_operations_internal.h
+++ b/include/deal.II/lac/vector_operations_internal.h
@@ -1147,7 +1147,11 @@ namespace internal
     // this is the inner working routine for the accumulation loops
     // below. This is the standard case where the loop bounds are known. We
     // pulled this function out of the regular accumulate routine because we
-    // might do this thing vectorized (see specialized function below)
+    // might do this thing vectorized (see specialized function below). As
+    // opposed to the vector add functions above, we here pass the functor
+    // 'op' by value, because we cannot create a copy of the scalar inline,
+    // and instead make sure that the numbers get local (and thus definitely
+    // not aliased) for the compiler
     template <typename Operation, typename ResultType>
     void
     accumulate_regular(
@@ -1185,7 +1189,8 @@ namespace internal
     // below. This is the specialized case where the loop bounds are known and
     // where we can vectorize. In that case, we request the 'do_vectorized'
     // routine of the operation instead of the regular one which does several
-    // operations at once.
+    // operations at once. As above, pass in the functor by value to create a
+    // local copy of the variables in the function (if there are any).
     template <typename Operation, typename Number>
     void
     accumulate_regular(