Skip to content
Snippets Groups Projects
Commit b803e103 authored by lh1887's avatar lh1887
Browse files

Use sparseRangeFor utility instead of raw iterators

parent c0a16f94
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <dune/common/parametertree.hh> #include <dune/common/parametertree.hh>
#include <dune/matrix-vector/ldlt.hh> #include <dune/matrix-vector/ldlt.hh>
#include <dune/matrix-vector/algorithm.hh>
#include <dune/solvers/common/defaultbitvector.hh> #include <dune/solvers/common/defaultbitvector.hh>
#include <dune/solvers/iterationsteps/lineariterationstep.hh> #include <dune/solvers/iterationsteps/lineariterationstep.hh>
...@@ -45,12 +46,11 @@ void linearStep(const M& m, V& x, const V& b, const BitVector* ignore, ...@@ -45,12 +46,11 @@ void linearStep(const M& m, V& x, const V& b, const BitVector* ignore,
auto ri = b[i]; auto ri = b[i];
using Block = typename M::block_type; using Block = typename M::block_type;
const Block* diag = nullptr; const Block* diag = nullptr;
for (auto cIt = row_i.begin(); cIt != row_i.end(); ++cIt) { MatrixVector::sparseRangeFor(row_i, [&](const auto& mij, auto j) {
size_t j = cIt.index(); mij.mmv(x[j], ri);
cIt->mmv(x[j], ri);
if (j == i) if (j == i)
diag = &*cIt; diag = &mij;
} });
using Ignore = std::bitset<V::block_type::dimension>; using Ignore = std::bitset<V::block_type::dimension>;
...@@ -150,12 +150,12 @@ VBlock gs(const MBlock& m, const VBlock& b, double tol = defaultGsTol) { ...@@ -150,12 +150,12 @@ VBlock gs(const MBlock& m, const VBlock& b, double tol = defaultGsTol) {
if (std::abs(mii) <= tol) if (std::abs(mii) <= tol)
continue; continue;
x[i] = b[i]; x[i] = b[i];
const auto& end = mi.end();
for (auto it = mi.begin(); it != end; ++it) { MatrixVector::sparseRangeFor(mi, [&](const auto& mij, auto j) {
auto j = it.index();
if (j != i) if (j != i)
x[i] -= (*it) * x[j]; x[i] -= mij * x[j];
} });
x[i] /= mii; x[i] /= mii;
} }
return x; return x;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment