From 898bafbbfb67dea8652adf5d665023b366c02afa Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <schaller@strw.leidenuniv.nl> Date: Tue, 12 May 2020 11:35:17 +0200 Subject: [PATCH] Document the accuracy achieved by the new approximation --- src/kernel_long_gravity.h | 5 ++++- tests/testKernelLongGrav.c | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/kernel_long_gravity.h b/src/kernel_long_gravity.h index e6f454b588..f525d89f8c 100644 --- a/src/kernel_long_gravity.h +++ b/src/kernel_long_gravity.h @@ -86,7 +86,10 @@ kernel_long_grav_derivatives(const float r, const float r_s_inv, const float e = expf(-u2); /* Compute erfcf(u) using eq. 7.1.25 of - Abramowitz & Stegun, 1972. */ + * Abramowitz & Stegun, 1972. + * + * This has a *relative* error of less than 4e-3 over + * the range of interest (0 < u < 5) */ const float t = 1.f / (1.f + 0.47047f * u); diff --git a/tests/testKernelLongGrav.c b/tests/testKernelLongGrav.c index 7de3f00e97..e305e1944e 100644 --- a/tests/testKernelLongGrav.c +++ b/tests/testKernelLongGrav.c @@ -37,8 +37,10 @@ const int num_tests = 1 << 10; void check_value(double a, double b, const char* s, const double tol, const double r, const double r_s) { if (fabs(a - b) / fabs(a + b) > tol) - error("Values are inconsistent: %12.15e %12.15e rel=%e (%s for r_s=%e r/r_s=%e)!", - a, b, fabs(a - b) / fabs(a + b), s, r_s, r / r_s); + error( + "Values are inconsistent: %12.15e %12.15e rel=%e (%s for r_s=%e " + "r/r_s=%e)!", + a, b, fabs(a - b) / fabs(a + b), s, r_s, r / r_s); } int main(int argc, char* argv[]) { @@ -92,7 +94,7 @@ int main(int argc, char* argv[]) { (12. * pow(r_s, 4.) - 12. * r_s * r_s * r * r + pow(r, 4.)) * pow(r_s, -9.); - check_value(chi_swift.chi_0, chi_0, "chi_0", 4e-3, r, r_s); + check_value(chi_swift.chi_0, chi_0, "chi_0", 3.4e-3, r, r_s); check_value(chi_swift.chi_1, chi_1, "chi_1", 1e-5, r, r_s); check_value(chi_swift.chi_2, chi_2, "chi_2", 1e-5, r, r_s); check_value(chi_swift.chi_3, chi_3, "chi_3", 1e-4, r, r_s); -- GitLab