void MMM1D_recalcTables() { /* polygamma, determine order */ int n; double err; double rhomax2nm2, rhomax2 = uz2*mmm1d_params.far_switch_radius_2; /* rhomax2 < 1, so rhomax2m2 falls monotonously */ n = 1; rhomax2nm2 = 1.0; do { create_mod_psi_up_to(n+1); /* |uz*z| <= 0.5 */ err = 2*n*fabs(mod_psi_even(n, 0.5))*rhomax2nm2; rhomax2nm2 *= rhomax2; n++; // fprintf(stderr, "%f\n", err); } while (err > 0.1*mmm1d_params.maxPWerror); }
static void prepare_polygamma_series(double maxPWerror, double maxrad2) { /* polygamma, determine order */ int n; double err; double rhomax2nm2, rhomax2 = uz2*maxrad2; /* rhomax2 < 1, so rhomax2m2 falls monotonously */ n = 1; rhomax2nm2 = 1.0; do { create_mod_psi_up_to(n+1); /* |uz*z| <= 0.5 */ err = 2*n*fabs(mod_psi_even(n, 0.5))*rhomax2nm2; rhomax2nm2 *= rhomax2; n++; // fprintf(stderr, "%f\n", err); } while (err > 0.1*maxPWerror); }