From b803e103a599218302d0ca52bf270b22c69dbf9f Mon Sep 17 00:00:00 2001
From: Lasse Hinrichsen <lh1887@mi.fu-berlin.de>
Date: Thu, 20 Sep 2018 15:33:47 +0200
Subject: [PATCH] Use sparseRangeFor utility instead of raw iterators

---
 dune/solvers/iterationsteps/blockgssteps.hh | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/dune/solvers/iterationsteps/blockgssteps.hh b/dune/solvers/iterationsteps/blockgssteps.hh
index 2bbdb0ff..7ed5a385 100644
--- a/dune/solvers/iterationsteps/blockgssteps.hh
+++ b/dune/solvers/iterationsteps/blockgssteps.hh
@@ -7,6 +7,7 @@
 #include <dune/common/parametertree.hh>
 
 #include <dune/matrix-vector/ldlt.hh>
+#include <dune/matrix-vector/algorithm.hh>
 
 #include <dune/solvers/common/defaultbitvector.hh>
 #include <dune/solvers/iterationsteps/lineariterationstep.hh>
@@ -45,12 +46,11 @@ void linearStep(const M& m, V& x, const V& b, const BitVector* ignore,
     auto ri = b[i];
     using Block = typename M::block_type;
     const Block* diag = nullptr;
-    for (auto cIt = row_i.begin(); cIt != row_i.end(); ++cIt) {
-      size_t j = cIt.index();
-      cIt->mmv(x[j], ri);
+    MatrixVector::sparseRangeFor(row_i, [&](const auto& mij, auto j) {
+      mij.mmv(x[j], ri);
       if (j == i)
-        diag = &*cIt;
-    }
+        diag = &mij;
+      });
 
     using Ignore = std::bitset<V::block_type::dimension>;
 
@@ -150,12 +150,12 @@ VBlock gs(const MBlock& m, const VBlock& b, double tol = defaultGsTol) {
     if (std::abs(mii) <= tol)
       continue;
     x[i] = b[i];
-    const auto& end = mi.end();
-    for (auto it = mi.begin(); it != end; ++it) {
-      auto j = it.index();
+
+    MatrixVector::sparseRangeFor(mi, [&](const auto& mij, auto j) {
       if (j != i)
-        x[i] -= (*it) * x[j];
-    }
+        x[i] -= mij * x[j];
+    });
+
     x[i] /= mii;
   }
   return x;
-- 
GitLab