Skip to content

Commit

Permalink
Fix warnings in, optimize complex Bessel function
Browse files Browse the repository at this point in the history
  • Loading branch information
inducer committed Aug 13, 2016
1 parent 96b08c4 commit 8738638
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions pyopencl/cl/pyopencl-bessel-j-complex.cl
Expand Up @@ -159,8 +159,7 @@ void bessel_j_complex(int v, cdouble_t z, cdouble_t *j_v, cdouble_t *j_vp1)
return;
}

dd = pow((cdouble_real(j_n)), 2)+pow(cdouble_imag(j_n),2);
if (dd > upbound)
if (cdouble_abs_squared(j_n) > upbound)
break;
}

Expand Down Expand Up @@ -191,7 +190,6 @@ void bessel_j_complex(int v, cdouble_t z, cdouble_t *j_v, cdouble_t *j_vp1)
ztmp = cdouble_sub(
cdouble_mul(cdouble_rmul(2*n, zinv), unscaled_j_n),
unscaled_j_np1);
dd = pow(cdouble_real(ztmp), 2) + pow(cdouble_imag(ztmp), 2);

unscaled_j_nm1 = ztmp;

Expand All @@ -203,7 +201,7 @@ void bessel_j_complex(int v, cdouble_t z, cdouble_t *j_v, cdouble_t *j_vp1)
unscaled_j_np1 = unscaled_j_n;
unscaled_j_n = unscaled_j_nm1;

if (dd > upbound)
if (cdouble_abs_squared(ztmp) > upbound)
{
unscaled_j_np1 = cdouble_rmul(upbound_inv, unscaled_j_np1);
unscaled_j_n = cdouble_rmul(upbound_inv, unscaled_j_n);
Expand All @@ -228,8 +226,8 @@ void bessel_j_complex(int v, cdouble_t z, cdouble_t *j_v, cdouble_t *j_vp1)
{
scaling = cdouble_divide( cdouble_exp( cdouble_mul(neg_ima,z) ), psi);
}
vscaling = pow(upbound_inv, vscale);
vp1scaling = pow(upbound_inv, vp1scale);
vscaling = pow(upbound_inv, (double) vscale);
vp1scaling = pow(upbound_inv, (double) vp1scale);

*j_v = cdouble_mul(unscaled_j_v, cdouble_mulr(scaling, vscaling));
*j_vp1 = cdouble_mul(unscaled_j_vp1, cdouble_mulr(scaling,vp1scaling));
Expand Down

0 comments on commit 8738638

Please sign in to comment.