static double kaiser(double beta, int M, int n) { if (M == 1) return 1.; if (fabs((double)n / (double)M - 0.5) >= 0.5) return 0.; return bessel_I0(beta * sqrt(1. - pow(2. * (double)n / (double)M - 1., 2.))) / bessel_I0(beta); }
real gdisk(real r) { real x1 = 0.5 * alpha1 * r, x2 = 0.5 * alpha2 * r, a1, a2;; if (epsilon1 >= 0.0) /* compute smoothed accel. */ a1 = - mdisk1 * rqbe(alpha1) * simpson(dgdisk, r, alpha1, epsilon1, 0, KMAX*alpha1, STEP*alpha1); else /* use exact expression */ a1 = - mdisk1 * rqbe(alpha1) * r * (bessel_I0(x1) * bessel_K0(x1) - bessel_I1(x1) * bessel_K1(x1)) / 2; if (epsilon2 >= 0.0) a2 = - mdisk2 * rqbe(alpha2) * simpson(dgdisk, r, alpha2, epsilon2, 0, KMAX*alpha2, STEP*alpha2); else a2 = - mdisk2 * rqbe(alpha2) * r * (bessel_I0(x2) * bessel_K0(x2) - bessel_I1(x2) * bessel_K1(x2)) / 2; return (a1 + a2); }