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