]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Preconditioners: Make access to vector pointers more uniform 17852/head
authorMartin Kronbichler <martin.kronbichler@rub.de>
Fri, 8 Nov 2024 11:29:02 +0000 (12:29 +0100)
committerMartin Kronbichler <martin.kronbichler@rub.de>
Fri, 8 Nov 2024 11:41:06 +0000 (12:41 +0100)
include/deal.II/lac/precondition.h

index 6682077948f809941d47ef1b6b091cc6560a60c3..5555defa380a8139a59a7897ebfe0019160c1994 100644 (file)
@@ -1291,20 +1291,19 @@ namespace internal
                     const bool         transposed)
     {
       (void)transposed;
-      using Number = typename VectorType::value_type;
+      using Number          = typename VectorType::value_type;
+      Number       *dst_ptr = dst.begin();
+      const Number *src_ptr = src.begin();
 
       if (i == 0)
         {
-          Number       *dst_ptr = dst.begin();
-          const Number *src_ptr = src.begin();
-
           preconditioner.vmult(
             dst,
             src,
             [&](const unsigned int start_range, const unsigned int end_range) {
               // zero 'dst' before running the vmult operation
               if (end_range > start_range)
-                std::memset(dst.begin() + start_range,
+                std::memset(dst_ptr + start_range,
                             0,
                             sizeof(Number) * (end_range - start_range));
             },
@@ -1312,9 +1311,6 @@ namespace internal
               if (relaxation == 1.0)
                 return; // nothing to do
 
-              const auto src_ptr = src.begin();
-              const auto dst_ptr = dst.begin();
-
               DEAL_II_OPENMP_SIMD_PRAGMA
               for (std::size_t i = start_range; i < end_range; ++i)
                 dst_ptr[i] *= relaxation;
@@ -1332,7 +1328,6 @@ namespace internal
             dst,
             tmp,
             [&](const unsigned int start_range, const unsigned int end_range) {
-              const auto src_ptr = src.begin();
               const auto tmp_ptr = tmp.begin();
 
               if (relaxation == 1.0)
@@ -1383,18 +1378,18 @@ namespace internal
       (void)transposed;
       using Number = typename VectorType::value_type;
 
+      Number       *dst_ptr = dst.begin();
+      const Number *src_ptr = src.begin();
+
       if (i == 0)
         {
-          Number       *dst_ptr = dst.begin();
-          const Number *src_ptr = src.begin();
-
           preconditioner.vmult(
             dst,
             src,
             [&](const unsigned int start_range, const unsigned int end_range) {
               // zero 'dst' before running the vmult operation
               if (end_range > start_range)
-                std::memset(dst.begin() + start_range,
+                std::memset(dst_ptr + start_range,
                             0,
                             sizeof(Number) * (end_range - start_range));
             },
@@ -1402,9 +1397,6 @@ namespace internal
               if (relaxation == 1.0)
                 return; // nothing to do
 
-              const auto src_ptr = src.begin();
-              const auto dst_ptr = dst.begin();
-
               DEAL_II_OPENMP_SIMD_PRAGMA
               for (std::size_t i = start_range; i < end_range; ++i)
                 dst_ptr[i] *= relaxation;
@@ -1413,6 +1405,7 @@ namespace internal
       else
         {
           tmp.reinit(src, true);
+          const auto tmp_ptr = tmp.begin();
 
           Assert(transposed == false, ExcNotImplemented());
 
@@ -1423,14 +1416,11 @@ namespace internal
               // zero 'tmp' before running the vmult
               // operation
               if (end_range > start_range)
-                std::memset(tmp.begin() + start_range,
+                std::memset(tmp_ptr + start_range,
                             0,
                             sizeof(Number) * (end_range - start_range));
             },
             [&](const unsigned int start_range, const unsigned int end_range) {
-              const auto src_ptr = src.begin();
-              const auto tmp_ptr = tmp.begin();
-
               if (relaxation == 1.0)
                 {
                   DEAL_II_OPENMP_SIMD_PRAGMA
@@ -1500,16 +1490,16 @@ namespace internal
         {
           tmp.reinit(src, true);
 
-          Number       *dst_ptr  = dst.begin();
-          const Number *src_ptr  = src.begin();
-          const Number *tmp_ptr  = tmp.begin();
-          const Number *diag_ptr = preconditioner.get_vector().begin();
-
           if (transposed)
             Tvmult(A, tmp, dst);
           else
             A.vmult(tmp, dst);
 
+          Number       *dst_ptr  = dst.begin();
+          const Number *src_ptr  = src.begin();
+          const Number *tmp_ptr  = tmp.begin();
+          const Number *diag_ptr = preconditioner.get_vector().begin();
+
           if (relaxation == 1.0)
             {
               DEAL_II_OPENMP_SIMD_PRAGMA
@@ -3157,27 +3147,25 @@ namespace internal
 
       if (iteration_index == 0)
         {
-          const auto solution_old_ptr = solution_old.begin();
-
           // compute t = P^{-1} * (b)
           preconditioner.vmult(solution_old, rhs);
 
           // compute x^{n+1} = f_2 * t
+          const auto solution_old_ptr = solution_old.begin();
           DEAL_II_OPENMP_SIMD_PRAGMA
           for (unsigned int i = 0; i < solution_old.locally_owned_size(); ++i)
             solution_old_ptr[i] = solution_old_ptr[i] * factor2;
         }
       else if (iteration_index == 1)
         {
-          const auto solution_ptr     = solution.begin();
-          const auto solution_old_ptr = solution_old.begin();
-
           // compute t = P^{-1} * (b-A*x^{n})
           temp_vector1.sadd(-1.0, 1.0, rhs);
 
           preconditioner.vmult(solution_old, temp_vector1);
 
           // compute x^{n+1} = x^{n} + f_1 * x^{n} + f_2 * t
+          const auto solution_ptr     = solution.begin();
+          const auto solution_old_ptr = solution_old.begin();
           DEAL_II_OPENMP_SIMD_PRAGMA
           for (unsigned int i = 0; i < solution_old.locally_owned_size(); ++i)
             solution_old_ptr[i] =
@@ -3185,16 +3173,15 @@ namespace internal
         }
       else
         {
-          const auto solution_ptr     = solution.begin();
-          const auto solution_old_ptr = solution_old.begin();
-          const auto temp_vector2_ptr = temp_vector2.begin();
-
           // compute t = P^{-1} * (b-A*x^{n})
           temp_vector1.sadd(-1.0, 1.0, rhs);
 
           preconditioner.vmult(temp_vector2, temp_vector1);
 
           // compute x^{n+1} = x^{n} + f_1 * (x^{n}-x^{n-1}) + f_2 * t
+          const auto solution_ptr     = solution.begin();
+          const auto solution_old_ptr = solution_old.begin();
+          const auto temp_vector2_ptr = temp_vector2.begin();
           DEAL_II_OPENMP_SIMD_PRAGMA
           for (unsigned int i = 0; i < solution_old.locally_owned_size(); ++i)
             solution_old_ptr[i] = factor1_plus_1 * solution_ptr[i] -
@@ -3245,7 +3232,7 @@ namespace internal
             rhs,
             [&](const auto start_range, const auto end_range) {
               if (end_range > start_range)
-                std::memset(solution.begin() + start_range,
+                std::memset(solution_ptr + start_range,
                             0,
                             sizeof(Number) * (end_range - start_range));
             },
@@ -3262,7 +3249,7 @@ namespace internal
             temp_vector1,
             [&](const auto begin, const auto end) {
               if (end > begin)
-                std::memset(temp_vector2.begin() + begin,
+                std::memset(temp_vector2_ptr + begin,
                             0,
                             sizeof(Number) * (end - begin));
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.