From 2d948374094aa570f494ef84b1f2ef65fc4c3340 Mon Sep 17 00:00:00 2001 From: Patrick Jaap <jaap@wias-berlin.de> Date: Tue, 2 May 2023 11:46:34 +0200 Subject: [PATCH] umfpacktest.cc: measure relative residuals --- dune/istl/test/umfpacktest.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dune/istl/test/umfpacktest.cc b/dune/istl/test/umfpacktest.cc index c134bc905..35e5e6adf 100644 --- a/dune/istl/test/umfpacktest.cc +++ b/dune/istl/test/umfpacktest.cc @@ -43,8 +43,9 @@ TestSuite runUMFPack(std::size_t N) solver.free(); // test + auto norm = b.two_norm(); mat.mmv(x,b); - t.check( b.two_norm() < 1e-9 ) << " Error in UMFPACK, residual is too large: " << b.two_norm(); + t.check( b.two_norm()/norm < 1e-11 ) << " Error in UMFPACK, relative residual is too large: " << b.two_norm()/norm; Dune::UMFPack<Matrix> solver1; @@ -69,13 +70,15 @@ TestSuite runUMFPack(std::size_t N) x[i] = x1[i]; b[i] = b1[i]; } + + norm = b.two_norm(); mat.mmv(x,b); // truncate deactivated indices for( std::size_t i=N/2; i<N*N; i++ ) b[i] = 0; - t.check( b.two_norm() < 1e-9 ) << " Error in UMFPACK, residual is too large: " << b.two_norm(); + t.check( b.two_norm()/norm < 1e-11 ) << " Error in UMFPACK, relative residual is too large: " << b.two_norm()/norm; // compare with setSubMatrix solver1.setSubMatrix(mat,mrs); @@ -86,7 +89,7 @@ TestSuite runUMFPack(std::size_t N) solver1.apply(x2,b1, res); x2 -= x1; - t.check( x2.two_norm() < 1e-9 ) << " Error in UMFPACK, setSubMatrix yields different result as setMatrix with BitVector, diff: " << b.two_norm(); + t.check( x2.two_norm()/x1.two_norm() < 1e-11 ) << " Error in UMFPACK, setSubMatrix yields different result as setMatrix with BitVector, relative diff: " << x2.two_norm()/x1.two_norm(); solver1.apply(reinterpret_cast<typename Matrix::field_type*>(&x1[0]), -- GitLab