spacepaste

  1.  
  2. #pragma OPENCL EXTENSION cl_khr_fp64 : enable
  3. double2 sample(const double qy, const double qz,
  4. const double r, const double h, const int dwba) {
  5. return (double2)(qy,qz);
  6. }
  7. __kernel void dwba(const int ny, const int nz,
  8. const double r, const double h,
  9. const __global double* qy, const __global double *qz,
  10. __global double* res, const int dwba, const int vector) {
  11. if (vector == 0) {
  12. int iy = get_global_id(0);
  13. int iz = get_global_id(1);
  14. int ind = iz+nz*iy;
  15. if (qz[iz] < 0) {
  16. res[ind] = 0;
  17. return;
  18. }
  19. res[ind] = length(sample(qy[iy], qz[iz], r, h, dwba));
  20. } else {
  21. const double q0 = 2*M_PI/0.139;
  22. const double alpha_i = 0.2*M_PI/180.;
  23. double2 tmp;
  24. int i = get_global_id(0);
  25. res[2*i] = 0;
  26. res[2*i+1] = 1;
  27. if (i < ny) {
  28. if (dwba == 0) {
  29. tmp = sample(qy[i], 0, r, h, dwba);
  30. } else {
  31. tmp = sample(qy[i], -q0*sin(alpha_i), r, h, dwba);
  32. }
  33. res[2*i] = tmp.x;
  34. res[2*i+1] = tmp.y;
  35. }
  36. if (i < nz) {
  37. tmp = sample(0, qz[i], r, h, dwba);
  38. res[2*(i+ny)] = tmp.x;
  39. res[2*(i+ny)+1] = tmp.y;
  40. }
  41. }
  42. }
  43.