-
- #pragma OPENCL EXTENSION cl_khr_fp64 : enable
-
- double2 sample(const double qy, const double qz,
- const double r, const double h, const int dwba) {
- return (double2)(qy,qz);
- }
-
- __kernel void dwba(const int ny, const int nz,
- const double r, const double h,
- const __global double* qy, const __global double *qz,
- __global double* res, const int dwba, const int vector) {
-
- if (vector == 0) {
- int iy = get_global_id(0);
- int iz = get_global_id(1);
- int ind = iz+nz*iy;
-
- if (qz[iz] < 0) {
- res[ind] = 0;
- return;
- }
-
- res[ind] = length(sample(qy[iy], qz[iz], r, h, dwba));
- } else {
- const double q0 = 2*M_PI/0.139;
- const double alpha_i = 0.2*M_PI/180.;
- double2 tmp;
- int i = get_global_id(0);
- res[2*i] = 0;
- res[2*i+1] = 1;
- if (i < ny) {
- if (dwba == 0) {
- tmp = sample(qy[i], 0, r, h, dwba);
- } else {
- tmp = sample(qy[i], -q0*sin(alpha_i), r, h, dwba);
- }
- res[2*i] = tmp.x;
- res[2*i+1] = tmp.y;
- }
- if (i < nz) {
- tmp = sample(0, qz[i], r, h, dwba);
- res[2*(i+ny)] = tmp.x;
- res[2*(i+ny)+1] = tmp.y;
- }
- }
- }
-