From b057717283eddba5098ef07264602e367a2e665d Mon Sep 17 00:00:00 2001 From: hinder Date: Wed, 9 Oct 2013 17:56:08 +0000 Subject: tests.cc: Refactor convergence test code git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/Multipole/trunk@95 4f5cb9a8-4dd8-4c2d-9bbd-173fa4467843 --- src/tests.cc | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/tests.cc b/src/tests.cc index b63e18b..21542d9 100644 --- a/src/tests.cc +++ b/src/tests.cc @@ -10,7 +10,7 @@ #include "utils.hh" #include "integrate.hh" -static CCTK_REAL test_simpson_integral(int n) +static CCTK_REAL test_integral(int n, CCTK_REAL (*integration_fn) (const CCTK_REAL *, int, int, CCTK_REAL, CCTK_REAL)) { const int nx = n; const int ny = n; @@ -35,25 +35,28 @@ static CCTK_REAL test_simpson_integral(int n) } } - const CCTK_REAL result = Simpson2DIntegral(f, nx, ny, dx, dy); + const CCTK_REAL result = integration_fn(f, nx, ny, dx, dy); delete [] f; return result; } - -void Multipole_TestSimpson(CCTK_ARGUMENTS) +CCTK_REAL integration_convergence_order(CCTK_REAL (*integration_fn) (const CCTK_REAL *, int, int, CCTK_REAL, CCTK_REAL)) { - DECLARE_CCTK_ARGUMENTS; - const int n1 = 100; const int n2 = 200; const CCTK_REAL PI = acos(-1.0); - const CCTK_REAL result1 = test_simpson_integral(100); - const CCTK_REAL result2 = test_simpson_integral(200); + const CCTK_REAL result1 = test_integral(100, integration_fn); + const CCTK_REAL result2 = test_integral(200, integration_fn); const CCTK_REAL exact = 1./24 + 1./(64 * pow(PI,2)); const CCTK_REAL error1 = fabs(result1 - exact); const CCTK_REAL error2 = fabs(result2 - exact); - *test_simpson_convergence_order = log10(error1/error2) / log10((CCTK_REAL) n2/n1); + return log10(error1/error2) / log10((CCTK_REAL) n2/n1); +} + +void Multipole_TestSimpson(CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + *test_simpson_convergence_order = integration_convergence_order(&Simpson2DIntegral); } // void Multipole_TestIntegrate(CCTK_ARGUMENTS) -- cgit v1.2.3