User: hinder Date: 2013/10/09 12:56 PM
Modified: /trunk/src/ tests.cc
Log: tests.cc: Refactor convergence test code
File Changes:
Directory: /trunk/src/ ======================
File [modified]: tests.cc Delta lines: +12 -9 =================================================================== --- trunk/src/tests.cc 2013-10-09 17:56:00 UTC (rev 94) +++ trunk/src/tests.cc 2013-10-09 17:56:08 UTC (rev 95) @@ -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,27 +35,30 @@ } }
- 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) // { // const int n = 100;