diff --git a/dune/solvers/norms/twonorm.hh b/dune/solvers/norms/twonorm.hh index ad06cde33637aed8cc7dbb7667a7b41db197bc9a..d36c8f6f688181f7db3de38156e3b6693d103da0 100644 --- a/dune/solvers/norms/twonorm.hh +++ b/dune/solvers/norms/twonorm.hh @@ -7,6 +7,7 @@ #include <cstring> // For size_t #include <dune/common/fvector.hh> +#include <dune/common/hybridutilities.hh> #include "norm.hh" @@ -43,15 +44,15 @@ class TwoNorm : public Norm<V> virtual field_type diff(const VectorType& f1, const VectorType& f2) const override { assert(f1.size() == f2.size()); - double r = 0.0; + field_type r = 0.0; - for (size_t i=0; i<f1.size(); ++i) + Dune::Hybrid::forEach(Dune::Hybrid::integralRange(Dune::Hybrid::size(f1)), [&](auto&& i) { - typename VectorType::block_type block = f1[i]; + auto block = f1[i]; block -= f2[i]; r += Dune::Impl::asVector(block).two_norm2(); - } + }); return std::sqrt(r); }