[099e053] | 1 | __kernel void TriaxialEllipseKernel(__global const real *qx, __global const real *qy, __global real *_ptvalue, |
---|
| 2 | const real sub, const real scale, const real axisA, const real axisB, const real axisC, const real axis_phi, |
---|
| 3 | const real axis_theta, const real axis_psi, const real axisA_weight, const real axisB_weight, const real axisC_weight, |
---|
| 4 | const real psi_weight, const real phi_weight, const real theta_weight, const int total, const int size) |
---|
| 5 | { |
---|
| 6 | int i = get_global_id(0); |
---|
| 7 | if(i < total) |
---|
| 8 | { |
---|
| 9 | real q = sqrt(qx[i]*qx[i]+qy[i]*qy[i]); |
---|
| 10 | real q_x = qx[i]/q; |
---|
| 11 | real q_y = qy[i]/q; |
---|
| 12 | real pi = 4.0*atan(1.0); |
---|
| 13 | real answer=0; |
---|
| 14 | |
---|
| 15 | //convert angle degree to radian |
---|
| 16 | real theta = axis_theta*pi/180.0; |
---|
| 17 | real phi = axis_phi*pi/180.0; |
---|
| 18 | real psi = axis_psi*pi/180.0; |
---|
| 19 | real cos_val = cos(theta)*cos(phi)*q_x + sin(theta)*q_y; |
---|
| 20 | |
---|
| 21 | // calculate the axis of the ellipse wrt q-coord. |
---|
| 22 | real cos_nu = (-cos(phi)*sin(psi)*sin(theta)+sin(phi)*cos(psi))*q_x + sin(psi)*cos(theta)*q_y; |
---|
| 23 | real cos_mu = (-sin(theta)*cos(psi)*cos(phi)-sin(psi)*sin(phi))*q_x + cos(theta)*cos(psi)*q_y; |
---|
| 24 | real t = q*sqrt(axisA*axisA*cos_nu*cos_nu+axisB*axisB*cos_mu*cos_mu+axisC*axisC*cos_val*cos_val); |
---|
| 25 | |
---|
| 26 | if (t==0.0){ |
---|
| 27 | answer = 1.0; |
---|
| 28 | } |
---|
| 29 | else{ |
---|
| 30 | answer = 3.0*(sin(t)-t*cos(t))/(t*t*t); |
---|
| 31 | } |
---|
| 32 | answer*=answer*sub*sub*4.0*pi/3.0*axisA*axisB*axisC*1.0e8*scale; |
---|
| 33 | |
---|
[a42fec0] | 34 | _ptvalue[i] += axisA_weight*axisB_weight*axisC_weight*theta_weight*phi_weight*psi_weight*answer*axisA*axisB*axisC; |
---|
[099e053] | 35 | // if (size>1) |
---|
| 36 | // _ptvalue[i] *= fabs(cos(theta*pi/180.0)); |
---|
| 37 | |
---|
| 38 | } |
---|
| 39 | } |
---|
| 40 | |
---|
| 41 | |
---|
| 42 | |
---|
| 43 | |
---|