#line 50 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #include "gmtMirrors.h" #line 2893 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __device__ rtd bending_modes_surface(vector *v, const int N_mode, rtd *b, double *BM, const int BM_N_SAMPLE, const double BM_radius) { int ndx; rtd scale, S, s, t, fs, ft, onemt, onems; rtd *z; scale = 0.5/BM_radius; s = (scale*v->x + 0.5)*(BM_N_SAMPLE-1); t = (scale*v->y + 0.5)*(BM_N_SAMPLE-1); #line 2863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (s<0) { s=0.0; } fs = floorf(s); if (t<0) { t=0.0; } ft = floorf(t); ndx = __float2int_rd( ft + fs*BM_N_SAMPLE ); if (s==(BM_N_SAMPLE-1)) { fs -= 1; ndx -= BM_N_SAMPLE; } if (t==(BM_N_SAMPLE-1)) { ft -= 1; ndx -= 1; } s -= fs; t -= ft; onemt = 1 - t; onems = 1 - s; #line 2904 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" z = BM; S = ( ( z[ndx]*onemt + z[ndx+1]*t )*onems + ( z[ndx+BM_N_SAMPLE]*onemt + z[ndx+BM_N_SAMPLE+1]*t )*s ); return -S; } #line 2912 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __device__ rtd partial_x_bending_modes_surface(vector *v, const int N_mode, rtd *b, double *BM, const int BM_N_SAMPLE, const double BM_radius) { int ndx, ndx_a, ndx_b; rtd scale, S, S_, s, t, fs, ft, onemt, onems, s_a, s_b, onems_a, onems_b, h; rtd *z; scale = 0.5/BM_radius; s = (scale*v->x + 0.5)*(BM_N_SAMPLE-1) + 1; t = (scale*v->y + 0.5)*(BM_N_SAMPLE-1); #line 2863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (s<0) { s=0.0; } fs = floorf(s); if (t<0) { t=0.0; } ft = floorf(t); ndx = __float2int_rd( ft + fs*BM_N_SAMPLE ); if (s==(BM_N_SAMPLE-1)) { fs -= 1; ndx -= BM_N_SAMPLE; } if (t==(BM_N_SAMPLE-1)) { ft -= 1; ndx -= 1; } s -= fs; t -= ft; onemt = 1 - t; onems = 1 - s; #line 2924 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" ndx_a = ndx; s_a = s; onems_a = onems; s = (scale*v->x + 0.5)*(BM_N_SAMPLE-1) - 1; t = (scale*v->y + 0.5)*(BM_N_SAMPLE-1); #line 2863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (s<0) { s=0.0; } fs = floorf(s); if (t<0) { t=0.0; } ft = floorf(t); ndx = __float2int_rd( ft + fs*BM_N_SAMPLE ); if (s==(BM_N_SAMPLE-1)) { fs -= 1; ndx -= BM_N_SAMPLE; } if (t==(BM_N_SAMPLE-1)) { ft -= 1; ndx -= 1; } s -= fs; t -= ft; onemt = 1 - t; onems = 1 - s; #line 2930 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" ndx_b = ndx; s_b = s; onems_b = onems; h = BM_radius*2/(BM_N_SAMPLE-1); z = BM; S_ = ( ( z[ndx_a]*onemt + z[ndx_a+1]*t )*onems_a + ( z[ndx_a+BM_N_SAMPLE]*onemt + z[ndx_a+BM_N_SAMPLE+1]*t )*s_a ); S_ -= ( ( z[ndx_b]*onemt + z[ndx_b+1]*t )*onems_b + ( z[ndx_b+BM_N_SAMPLE]*onemt + z[ndx_b+BM_N_SAMPLE+1]*t )*s_b ); S_ /= 2*h; S = S_; return -S; } #line 2946 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __device__ rtd partial_y_bending_modes_surface(vector *v, const int N_mode, rtd *b, double *BM, const int BM_N_SAMPLE, const double BM_radius) { int ndx, ndx_a, ndx_b; rtd scale, S, S_, s, t, fs, ft, onemt, onems, t_a, t_b, onemt_a, onemt_b, h; rtd *z; scale = 0.5/BM_radius; s = (scale*v->x + 0.5)*(BM_N_SAMPLE-1); t = (scale*v->y + 0.5)*(BM_N_SAMPLE-1) + 1; #line 2863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (s<0) { s=0.0; } fs = floorf(s); if (t<0) { t=0.0; } ft = floorf(t); ndx = __float2int_rd( ft + fs*BM_N_SAMPLE ); if (s==(BM_N_SAMPLE-1)) { fs -= 1; ndx -= BM_N_SAMPLE; } if (t==(BM_N_SAMPLE-1)) { ft -= 1; ndx -= 1; } s -= fs; t -= ft; onemt = 1 - t; onems = 1 - s; #line 2958 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" ndx_a = ndx; t_a = t; onemt_a = onemt; s = (scale*v->x + 0.5)*(BM_N_SAMPLE-1); t = (scale*v->y + 0.5)*(BM_N_SAMPLE-1) - 1; #line 2863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (s<0) { s=0.0; } fs = floorf(s); if (t<0) { t=0.0; } ft = floorf(t); ndx = __float2int_rd( ft + fs*BM_N_SAMPLE ); if (s==(BM_N_SAMPLE-1)) { fs -= 1; ndx -= BM_N_SAMPLE; } if (t==(BM_N_SAMPLE-1)) { ft -= 1; ndx -= 1; } s -= fs; t -= ft; onemt = 1 - t; onems = 1 - s; #line 2964 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" ndx_b = ndx; t_b = t; onemt_b = onemt; h = BM_radius*2/(BM_N_SAMPLE-1); z = BM; S_ = ( ( z[ndx_a]*onemt_a + z[ndx_a+1]*t_a )*onems + ( z[ndx_a+BM_N_SAMPLE]*onemt_a + z[ndx_a+BM_N_SAMPLE+1]*t_a )*s ); S_ -= ( ( z[ndx_b]*onemt_b + z[ndx_b+1]*t_b )*onems + ( z[ndx_b+BM_N_SAMPLE]*onemt_b + z[ndx_b+BM_N_SAMPLE+1]*t_b )*s ); S_ /= 2*h; S = S_; return -S; } #line 2980 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __device__ rtd partial_z_bending_modes_surface(void) { return 0.0; } #line 56 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 922 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void m1_trace_chief_kernel(char *mask, ray *d__ray, int N_RAY, rtd *d__conic_R, vector *d__conic_origin, const rtd Fk, const rtd Fc, vector *d__conic_self_origin, rtd *d__rigid_body_R, vector *d__rigid_body_origin, rtd *d__motion_R, vector *d__motion_origin) { int j, ij, iCoordSys, iSource; rtd x1, y1, s0, k, l, m; rtd s1, S, K, L ,M, dSds; rtd G2, a; vector d__origin, xyz, klm, xyz_GS, klm_GS; iSource = blockIdx.z; ij = iSource*N_RAY; iCoordSys = 0; d__origin = d__conic_self_origin[iCoordSys]; #line 1002 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID BODY >>> forward_transform(&xyz_GS, &(d__ray[ij].coordinates), d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); forward_transform_centered(&klm_GS, &(d__ray[ij].directions), d__rigid_body_R+iCoordSys*9); #line 943 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 1089 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // CONIC >>> backward_transform_centered(&xyz, &xyz_GS, d__conic_R+iCoordSys*9); backward_transform_centered(&klm, &klm_GS, d__conic_R+iCoordSys*9); #line 944 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 1379 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k = klm.x; l = klm.y; m = klm.z; if (m==0) { return; } s0 = -xyz.z/m; x1 = xyz.x + k*s0; y1 = xyz.y + l*s0; d__ray[ij].optical_path_length = s0; s0 = s1 = 0; for (j=0; j0) { d__origin = d__conic_self_origin[iCoordSys]; #line 1002 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID BODY >>> forward_transform(&xyz_GS, &(d__ray[ij].coordinates), d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); forward_transform_centered(&klm_GS, &(d__ray[ij].directions), d__rigid_body_R+iCoordSys*9); #line 1009 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION >>> forward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); forward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 844 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 1016 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // APERTURE >>> forward_transform(&xyz, &xyz_GS, d__aperture_R+iCoordSys*9, d__aperture_origin+iCoordSys); forward_transform_centered(&klm, &klm_GS, d__aperture_R+iCoordSys*9); x = xyz.x; y = xyz.y; z = xyz.z; k = klm.x; l = klm.y; m = klm.z; #line 1154 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (m==0) { return; } s0 = -z/m; x1 = x + k*s0; y1 = y + l*s0; #line 1032 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" rho2 = x1*x1 + y1*y1; if ( (iCoordSys==6) && (rho2>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S = conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); #line 1334 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); #line 1241 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S += zernike_surface(&xyz, &d__origin, max_n, d__a + iCoordSys*n_mode, R); #line 1338 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_zernike_surface(&xyz, &d__origin, max_n, d__cx + iCoordSys*b_n_mode, R); L += partial_y_zernike_surface(&xyz, &d__origin, max_n, d__cy + iCoordSys*b_n_mode, R); M += partial_z_zernike_surface(); #line 1178 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dSds = K*k + L*l + M*m; if (dSds==0) { break; } s1 = s0 - S/dSds; if (abs(s1-s0)>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_zernike_surface(&xyz, &d__origin, max_n, d__cx + iCoordSys*b_n_mode, R); L += partial_y_zernike_surface(&xyz, &d__origin, max_n, d__cy + iCoordSys*b_n_mode, R); M += partial_z_zernike_surface(); #line 1187 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_length += s1; d__ray[ij].n_iteration = j; break; } s0 = s1; } #line 1096 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" G2 = K*K + L*L + M*M; a = k*K + l*L + m*M; a *= -2.0/G2; klm.x += a*K; klm.y += a*L; klm.z += a*M; #line 1058 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" klm_GS.x = klm.x; klm_GS.y = klm.y; klm_GS.z = klm.z; xyz_GS.x = xyz.x; xyz_GS.y = xyz.y; xyz_GS.z = xyz.z; #line 1121 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION <<< backward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); backward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 1128 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform(&(d__ray[ij].coordinates), &xyz_GS, d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); backward_transform_centered(&(d__ray[ij].directions), &klm_GS, d__rigid_body_R+iCoordSys*9); #line 852 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_difference += d__ray[ij].optical_path_length - d__chief_ray[iSource].optical_path_length; d__ray[ij].throughput *= reflectivity[iCoordSys]; return; } } } } } #line 863 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void m1_bm_trace_kernel(char *mask, ray *d__ray, int N_RAY, rtd inner2, rtd outer2, rtd *d__aperture_R, vector *d__aperture_origin, rtd *d__conic_R, vector *d__conic_origin, rtd *d__Fk, rtd *d__Fc, vector *d__conic_self_origin, rtd *d__rigid_body_R, vector *d__rigid_body_origin, rtd *d__motion_R, vector *d__motion_origin, const int N_mode, rtd *b, double *BM, const int BM_N_SAMPLE, const double BM_radius, ray *d__chief_ray, int *d__piston_mask, char *d__valid_segments, float *reflectivity) { int i, j, ij, iCoordSys, iSource; rtd rho2; rtd x, y, z, x1, y1, s0, k, l, m; rtd s1, S, K, L ,M, dSds; rtd G2, a; rtd Fc, Fk; vector d__origin, xyz, klm, xyz_GS, klm_GS, Snormal; i = blockIdx.x * blockDim.x + threadIdx.x; j = threadIdx.y; // iCoordSys = blockIdx.y; ij = j * gridDim.x * blockDim.x + i; iSource = blockIdx.z; j = ij; ij += iSource*N_RAY; if ( ( j0) { d__origin = d__conic_self_origin[iCoordSys]; #line 1002 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID BODY >>> forward_transform(&xyz_GS, &(d__ray[ij].coordinates), d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); forward_transform_centered(&klm_GS, &(d__ray[ij].directions), d__rigid_body_R+iCoordSys*9); #line 1009 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION >>> forward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); forward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 903 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 1016 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // APERTURE >>> forward_transform(&xyz, &xyz_GS, d__aperture_R+iCoordSys*9, d__aperture_origin+iCoordSys); forward_transform_centered(&klm, &klm_GS, d__aperture_R+iCoordSys*9); x = xyz.x; y = xyz.y; z = xyz.z; k = klm.x; l = klm.y; m = klm.z; #line 1154 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (m==0) { return; } s0 = -z/m; x1 = x + k*s0; y1 = y + l*s0; #line 1032 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" rho2 = x1*x1 + y1*y1; if ( (iCoordSys==6) && (rho2>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S = conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); #line 1355 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); #line 1249 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S += bending_modes_surface(&xyz, N_mode, b + iCoordSys*N_mode, BM + iCoordSys*BM_N_SAMPLE*BM_N_SAMPLE, BM_N_SAMPLE, BM_radius); #line 1359 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_bending_modes_surface(&xyz, N_mode, b + iCoordSys*N_mode, BM + iCoordSys*BM_N_SAMPLE*BM_N_SAMPLE, BM_N_SAMPLE, BM_radius); L += partial_y_bending_modes_surface(&xyz, N_mode, b + iCoordSys*N_mode, BM + iCoordSys*BM_N_SAMPLE*BM_N_SAMPLE, BM_N_SAMPLE, BM_radius); M += partial_z_bending_modes_surface(); #line 1211 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dSds = K*k + L*l + M*m; if (dSds==0) { break; } s1 = s0 - S/dSds; if (abs(s1-s0)>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_bending_modes_surface(&xyz, N_mode, b + iCoordSys*N_mode, BM + iCoordSys*BM_N_SAMPLE*BM_N_SAMPLE, BM_N_SAMPLE, BM_radius); L += partial_y_bending_modes_surface(&xyz, N_mode, b + iCoordSys*N_mode, BM + iCoordSys*BM_N_SAMPLE*BM_N_SAMPLE, BM_N_SAMPLE, BM_radius); M += partial_z_bending_modes_surface(); #line 1220 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_length += s1; d__ray[ij].n_iteration = j; break; } s0 = s1; } #line 1096 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" G2 = K*K + L*L + M*M; a = k*K + l*L + m*M; a *= -2.0/G2; klm.x += a*K; klm.y += a*L; klm.z += a*M; #line 1077 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" klm_GS.x = klm.x; klm_GS.y = klm.y; klm_GS.z = klm.z; xyz_GS.x = xyz.x; xyz_GS.y = xyz.y; xyz_GS.z = xyz.z; #line 1121 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION <<< backward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); backward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 1128 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform(&(d__ray[ij].coordinates), &xyz_GS, d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); backward_transform_centered(&(d__ray[ij].directions), &klm_GS, d__rigid_body_R+iCoordSys*9); #line 911 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_difference += d__ray[ij].optical_path_length - d__chief_ray[iSource].optical_path_length; d__ray[ij].throughput *= reflectivity[iCoordSys]; return; } } } } } #line 1562 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void m1_trace_all_kernel(char *mask, ray *d__ray, int N_RAY, rtd inner2, rtd outer2, rtd *d__aperture_R, vector *d__aperture_origin, rtd *d__conic_R, vector *d__conic_origin, rtd *d__Fk, rtd *d__Fc, vector *d__conic_self_origin, rtd *d__rigid_body_R, vector *d__rigid_body_origin, rtd *d__motion_R, vector *d__motion_origin, int max_n, int n_mode, rtd *d__a, rtd *d__cx, rtd *d__cy, rtd R, ray *d__chief_ray, int *d__piston_mask, char *d__valid_segments, float *reflectivity) { int i, j, ij, iCoordSys, iSource, b_n_mode; rtd rho2; rtd x, y, z, x1, y1, s0, k, l, m; rtd s1, S, K, L ,M, dSds; rtd G2, a; rtd Fc, Fk; vector d__origin, xyz, klm, xyz_GS, klm_GS, Snormal; i = blockIdx.x * blockDim.x + threadIdx.x; j = threadIdx.y; // iCoordSys = blockIdx.y; ij = j * gridDim.x * blockDim.x + i; iSource = blockIdx.z; j = ij; ij += iSource*N_RAY; b_n_mode = max_n*(max_n+1)*0.5; if ( ( j0) { d__origin = d__conic_self_origin[iCoordSys]; #line 1002 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID BODY >>> forward_transform(&xyz_GS, &(d__ray[ij].coordinates), d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); forward_transform_centered(&klm_GS, &(d__ray[ij].directions), d__rigid_body_R+iCoordSys*9); #line 1009 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION >>> forward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); forward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 1603 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" { mask[ij] = 1; d__piston_mask[ij] = iCoordSys + 1; #line 1050 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" klm.x = klm_GS.x; klm.y = klm_GS.y; klm.z = klm_GS.z; xyz.x = xyz_GS.x; xyz.y = xyz_GS.y; xyz.z = xyz_GS.z; #line 1163 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k = klm.x; l = klm.y; m = klm.z; if (m==0) { return; } s0 = -xyz.z/m; x1 = xyz.x + k*s0; y1 = xyz.y + l*s0; d__ray[ij].optical_path_length = s0; s0 = s1 = 0; for (j=0; j>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S = conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); #line 1334 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); #line 1241 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); S += zernike_surface(&xyz, &d__origin, max_n, d__a + iCoordSys*n_mode, R); #line 1338 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_zernike_surface(&xyz, &d__origin, max_n, d__cx + iCoordSys*b_n_mode, R); L += partial_y_zernike_surface(&xyz, &d__origin, max_n, d__cy + iCoordSys*b_n_mode, R); M += partial_z_zernike_surface(); #line 1178 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dSds = K*k + L*l + M*m; if (dSds==0) { break; } s1 = s0 - S/dSds; if (abs(s1-s0)>> backward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); K = partial_x_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); L = partial_y_conic_surface(&xyz, &d__origin, Fk, Fc, 0, &(xyz.x)); M = partial_z_conic_surface(); // CONIC <<< forward_transform_centered(&xyz, &xyz, d__conic_R+iCoordSys*9); Snormal.x = K; Snormal.y = L; Snormal.z = M; forward_transform_centered(&Snormal, &Snormal, d__conic_R+iCoordSys*9); K = Snormal.x; L = Snormal.y; M = Snormal.z; K += partial_x_zernike_surface(&xyz, &d__origin, max_n, d__cx + iCoordSys*b_n_mode, R); L += partial_y_zernike_surface(&xyz, &d__origin, max_n, d__cy + iCoordSys*b_n_mode, R); M += partial_z_zernike_surface(); #line 1187 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_length += s1; d__ray[ij].n_iteration = j; break; } s0 = s1; } #line 1096 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" G2 = K*K + L*L + M*M; a = k*K + l*L + m*M; a *= -2.0/G2; klm.x += a*K; klm.y += a*L; klm.z += a*M; #line 1058 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" klm_GS.x = klm.x; klm_GS.y = klm.y; klm_GS.z = klm.z; xyz_GS.x = xyz.x; xyz_GS.y = xyz.y; xyz_GS.z = xyz.z; #line 1121 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION <<< backward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); backward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 1128 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform(&(d__ray[ij].coordinates), &xyz_GS, d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); backward_transform_centered(&(d__ray[ij].directions), &klm_GS, d__rigid_body_R+iCoordSys*9); #line 1608 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" d__ray[ij].optical_path_difference += d__ray[ij].optical_path_length - d__chief_ray[iSource].optical_path_length; d__ray[ij].throughput *= reflectivity[iCoordSys]; return; } } } } } #line 669 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void m1_blocking_kernel(char *mask, ray *d__ray, int N_RAY, rtd inner2, rtd outer2, rtd *d__aperture_R, vector *d__aperture_origin, rtd *d__rigid_body_R, vector *d__rigid_body_origin, rtd *d__motion_R, vector *d__motion_origin) { int i, j, ij, iCoordSys, iSource; rtd rho2; rtd x, y, z, x1, y1, s0, k, l, m; vector xyz, klm, xyz_GS, klm_GS; i = blockIdx.x * blockDim.x + threadIdx.x; j = threadIdx.y; // iCoordSys = blockIdx.y; ij = j * gridDim.x * blockDim.x + i; iSource = blockIdx.z; j = ij; ij += iSource*N_RAY; if ( ( j>> forward_transform(&xyz_GS, &(d__ray[ij].coordinates), d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); forward_transform_centered(&klm_GS, &(d__ray[ij].directions), d__rigid_body_R+iCoordSys*9); #line 1009 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // MOTION >>> forward_transform(&xyz_GS, &xyz_GS, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); forward_transform_centered(&klm_GS, &klm_GS, d__motion_R+iCoordSys*9); #line 695 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 1016 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // APERTURE >>> forward_transform(&xyz, &xyz_GS, d__aperture_R+iCoordSys*9, d__aperture_origin+iCoordSys); forward_transform_centered(&klm, &klm_GS, d__aperture_R+iCoordSys*9); x = xyz.x; y = xyz.y; z = xyz.z; k = klm.x; l = klm.y; m = klm.z; #line 1154 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" if (m==0) { return; } s0 = -z/m; x1 = x + k*s0; y1 = y + l*s0; #line 1032 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" rho2 = x1*x1 + y1*y1; if ( (iCoordSys==6) && (rho2>> forward_transform(&v, &v, d__rigid_body_R+iCoordSys*9, d__rigid_body_origin+iCoordSys); // MOTION >>> forward_transform(&v, &v, d__motion_R+iCoordSys*9, d__motion_origin+iCoordSys); x[i] = v.x; y[i] = v.y; z[i] = v.z; } } #line 2665 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void nearest_neighbor_kernel(rtd *BMi, rtd *partial_x_BMi, rtd *partial_y_BMi, const int NI, const rtd di, double *x_BM, double *y_BM, double *BM, const int BM_N_SAMPLE, const double BM_radius, const int k_mode) { int i, j, k, k_BM, t, o, t_E, t_N, t_W, t_S; rtd xi, yi, rho_t, rho_k, rhoi, h, xi_E, yi_N, xi_W, yi_S, rho_k_E, rho_k_N, rho_k_W, rho_k_S, rho_t_E, rho_t_N, rho_t_W, rho_t_S; i = blockIdx.x * blockDim.x + threadIdx.x; j = blockIdx.y * blockDim.y + threadIdx.y; if ( (i>> forward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_cam*9, d__rigid_body_origin+iCoordSys_cam); // MOTION >>> forward_transform(v+k, v+k, d__motion_R+iCoordSys_cam*9, d__motion_origin+iCoordSys_cam); #line 3828 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k += N_OUT_SEGMENT; offset_angle = (3.0-2.0*i)/6.0 - a; #line 3843 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" sincospi( offset_angle, &(v[k].y), &(v[k].x) ); v[k].x *= R; v[k].y *= R; v[k].z = height; #line 3849 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" v[k].z *= (j==0) ? 1 : -1; // MOTION <<< backward_transform(v+k, v+k, d__motion_R+iCoordSys_laser*9, d__motion_origin+iCoordSys_laser); // RIGID_BODY <<< backward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_laser*9, d__rigid_body_origin+iCoordSys_laser); // RIGID BODY >>> forward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_cam*9, d__rigid_body_origin+iCoordSys_cam); // MOTION >>> forward_transform(v+k, v+k, d__motion_R+iCoordSys_cam*9, d__motion_origin+iCoordSys_cam); #line 3817 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __syncthreads(); #line 3833 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" iCoordSys_laser = i; iCoordSys_cam = (i+1)%N_OUT_SEGMENT; k = 2*N_OUT_SEGMENT + i + 24*j; offset_angle = -1.0/6.0 + a; #line 3843 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" sincospi( offset_angle, &(v[k].y), &(v[k].x) ); v[k].x *= R; v[k].y *= R; v[k].z = height; #line 3849 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" v[k].z *= (j==0) ? 1 : -1; // MOTION <<< backward_transform(v+k, v+k, d__motion_R+iCoordSys_laser*9, d__motion_origin+iCoordSys_laser); // RIGID_BODY <<< backward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_laser*9, d__rigid_body_origin+iCoordSys_laser); // RIGID BODY >>> forward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_cam*9, d__rigid_body_origin+iCoordSys_cam); // MOTION >>> forward_transform(v+k, v+k, d__motion_R+iCoordSys_cam*9, d__motion_origin+iCoordSys_cam); #line 3838 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k += 6; offset_angle = -1.0/6.0 - a; #line 3843 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" sincospi( offset_angle, &(v[k].y), &(v[k].x) ); v[k].x *= R; v[k].y *= R; v[k].z = height; #line 3849 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" v[k].z *= (j==0) ? 1 : -1; // MOTION <<< backward_transform(v+k, v+k, d__motion_R+iCoordSys_laser*9, d__motion_origin+iCoordSys_laser); // RIGID_BODY <<< backward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_laser*9, d__rigid_body_origin+iCoordSys_laser); // RIGID BODY >>> forward_transform(v+k, v+k, d__rigid_body_R+iCoordSys_cam*9, d__rigid_body_origin+iCoordSys_cam); // MOTION >>> forward_transform(v+k, v+k, d__motion_R+iCoordSys_cam*9, d__motion_origin+iCoordSys_cam); #line 3819 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } } #line 3868 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void laser_coordinates_to_GCS(vector *v0, vector *v, const int N_OUT_SEGMENT, rtd *d__rigid_body_R, vector *d__rigid_body_origin) { int i, j, k; i = threadIdx.x; j = threadIdx.y; if (i>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // MOTION <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_laser*9); // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_cam*9); // MOTION >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_cam*9); #line 4067 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k += N_OUT_SEGMENT; #line 4080 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_cam+k, d__rigid_body_R+iCoordSys_cam*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // MOTION <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_laser*9); // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_cam*9); // MOTION >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_cam*9); #line 4069 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __syncthreads(); iCoordSys_laser = i; iCoordSys_cam = (i+1)%N_OUT_SEGMENT; k = 2*N_OUT_SEGMENT + i + j; #line 4080 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_cam+k, d__rigid_body_R+iCoordSys_cam*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // MOTION <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_laser*9); // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_cam*9); // MOTION >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_cam*9); #line 4074 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" k += N_OUT_SEGMENT; #line 4080 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_cam+k, d__rigid_body_R+iCoordSys_cam*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // MOTION <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_laser*9); // RIGID_BODY <<< backward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_laser*9); // RIGID BODY >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__rigid_body_R+iCoordSys_cam*9); // MOTION >>> forward_transform_centered(d__k_laser+k, d__k_laser+k, d__motion_R+iCoordSys_cam*9); #line 4076 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } } #line 4152 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void laser_camera_intersection(rtd *x, rtd *y, rtd *d, vector *B, vector *A, vector *k_cam, vector *k_laser, vector *uP, vector *vP, const int N_OUT_SEGMENT) { int i, j, i_cam, i_laser; rtd t; vector w, Ilp; i = threadIdx.x; j = 24*threadIdx.y; if (iR) d__ray[k].v = 0; } } #line 2398 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void surface_update(double *BMS, const int N_mode, rtd *b, double *BM, int N_SAMPLE) { int i, j, k, kz, l, k_mode, o; rtd *z; i = blockIdx.x * blockDim.x + threadIdx.x; j = blockIdx.y * blockDim.y + threadIdx.y; l = blockIdx.z; if ( (ibending_modes: freeing memory!\n"); free( b ); HANDLE_ERROR( cudaFree( d__b ) ); HANDLE_ERROR( cudaFree( d__BM_buffer ) ); HANDLE_ERROR( cudaFree( d__BMS ) ); } #line 2385 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::update(rtd *b) { int n_byte = sizeof(rtd)*n_mode*N; HANDLE_ERROR( cudaMemcpy( d__b, b, n_byte, cudaMemcpyHostToDevice ) ); dim3 blockDim(N_THREAD,N_THREAD); dim3 gridDim(BM_N_SAMPLE/N_THREAD+1,BM_N_SAMPLE/N_THREAD+1,N); surface_update <<< gridDim, blockDim >>> (d__BMS, n_mode, d__b, d__BM, BM_N_SAMPLE); } #line 2429 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::load(void) { FILE * pFile; long lSize; double * buffer; size_t result; char path[256]; sprintf(path, "%sgmtMirrors/bendingModes.bin",getenv("CEOPATH")); INFO("@(CEO)>bending_modes: loading bending modes from %s\n",path); pFile = fopen ( path , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile)/sizeof(double); rewind (pFile); // fprintf(stdout,"lSize=%ld\n",lSize); // allocate memory to contain the whole file: buffer = (double*) malloc (lSize*sizeof(double)); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,sizeof(double),lSize,pFile); // fprintf(stdout,"result=%ld\n",result); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ BM_radius = 4.181; BM_N_SAMPLE = 27685; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__x_BM = d__BM_buffer; d__y_BM = d__BM_buffer + BM_N_SAMPLE; d__BM = d__BM_buffer + BM_N_SAMPLE*2; // terminate fclose (pFile); free (buffer); } #line 2483 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::load_reg(void) { FILE * pFile; long lSize; double * buffer; size_t result; char path[256]; sprintf(path, "%sgmtMirrors/bendingModesReg.bin",getenv("CEOPATH")); INFO("@(CEO)>bending_modes: loading bending modes from %s\n",path); pFile = fopen ( path , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile)/sizeof(double); rewind (pFile); // fprintf(stdout,"lSize=%ld\n",lSize); // allocate memory to contain the whole file: buffer = (double*) malloc (lSize*sizeof(double)); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,sizeof(double),lSize,pFile); // fprintf(stdout,"result=%ld\n",result); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ BM_radius = 0.5*8.462;//4.181; BM_N_SAMPLE = 169; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; // terminate fclose (pFile); free (buffer); } #line 2535 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::load_polish(void) { FILE * pFile; long lSize; double * buffer; size_t result; char path[256]; sprintf(path, "%sgmtMirrors/polishingMap.bin",getenv("CEOPATH")); INFO("@(CEO)>bending_modes: loading bending modes from %s\n",path); pFile = fopen ( path , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile)/sizeof(double); rewind (pFile); // fprintf(stdout,"lSize=%ld\n",lSize); // allocate memory to contain the whole file: buffer = (double*) malloc (lSize*sizeof(double)); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,sizeof(double),lSize,pFile); // fprintf(stdout,"result=%ld\n",result); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ BM_radius = 0.5*8.52; BM_N_SAMPLE = 483; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; // terminate fclose (pFile); free (buffer); } #line 2587 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::load_KL(void) { FILE * pFile; long lSize; double * buffer; size_t result; char path[256]; sprintf(path, "%sgmtMirrors/KarhunenLoeveModes.bin",getenv("CEOPATH")); INFO("@(CEO)>bending_modes: loading bending modes from %s\n",path); pFile = fopen ( path , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile)/sizeof(double); rewind (pFile); // fprintf(stdout,"lSize=%ld\n",lSize); // allocate memory to contain the whole file: buffer = (double*) malloc (lSize*sizeof(double)); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,sizeof(double),lSize,pFile); // fprintf(stdout,"result=%ld\n",result); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ BM_radius = 0.5*1.0425*1.1;//4.25; BM_N_SAMPLE = 256; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; // terminate fclose (pFile); free (buffer); } #line 2647 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::nearest_neighbor(rtd *d__BMi, rtd *d__partial_x_BMi, rtd *d__partial_y_BMi, int NI, rtd di, int k_mode) { dim3 blockDim(N_THREAD,N_THREAD); dim3 gridDim(NI/N_THREAD+1,NI/N_THREAD+1); nearest_neighbor_kernel <<< gridDim, blockDim >>> (d__BMi, d__partial_x_BMi, d__partial_y_BMi, NI, di, d__x_BM, d__y_BM, d__BM, BM_N_SAMPLE, BM_radius, k_mode); } #line 2771 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void bending_modes::bilinear(rtd *d__BMi, rtd *d__partial_x_BMi, rtd *d__partial_y_BMi, int NI, rtd di, int k_mode) { dim3 blockDim(N_THREAD,N_THREAD); dim3 gridDim(NI/N_THREAD+1,NI/N_THREAD+1); bilinear_kernel <<< gridDim, blockDim >>> (d__BMi, d__partial_x_BMi, d__partial_y_BMi, NI, di, d__BM, BM_N_SAMPLE, BM_radius, k_mode); } #line 3210 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" __global__ void modes2surface(double *BMS, const int n_mode, rtd *b, int *s2b, double *BM, const int N_MODE, const int N_SAMPLE) { int i, j, k, kz, l, k_mode, o; rtd *z; i = blockIdx.x * blockDim.x + threadIdx.x; j = blockIdx.y * blockDim.y + threadIdx.y; l = blockIdx.z; if ( (ibending_modes: freeing memory!\n"); free( b ); HANDLE_ERROR( cudaFree( d__b ) ); HANDLE_ERROR( cudaFree( d__BM_buffer ) ); HANDLE_ERROR( cudaFree( d__BMS ) ); } #line 3085 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void modes::load(void) { FILE * pFile; long lSize; double * buffer; int *s2b; size_t result; //char path[256]; // sprintf(path, "%sgmtMirrors/%s.ceo",getenv("CEOPATH"),filename); INFO("@(CEO)>modes: loading modes from %s\n",filename); pFile = fopen ( filename, "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // read modal basis info result = fread (&BM_N_SAMPLE,sizeof(int) ,1,pFile); result = fread (&BM_radius ,sizeof(double),1,pFile); result = fread (&N_SET,sizeof(int) ,1,pFile); result = fread (&N_MODE,sizeof(int) ,1,pFile); INFO("@(CEO)>modes: grid sampling and size: %d pixel, %f meter\n",BM_N_SAMPLE,BM_radius); INFO("@(CEO)>modes: number of set: %d and number of modes per set: %d\n",N_SET,N_MODE); // read surface 2 mode array s2b = (int*) malloc (N*sizeof(int)); result = fread (s2b ,sizeof(int),N,pFile); HANDLE_ERROR( cudaMalloc((void**)&d__s2b, N*sizeof(int)) ); HANDLE_ERROR( cudaMemcpy( d__s2b , s2b, N*sizeof(int), cudaMemcpyHostToDevice ) ); // allocate memory to contain the whole file: lSize = N_SET*N_MODE*BM_N_SAMPLE*BM_N_SAMPLE; buffer = (double*) malloc (lSize*sizeof(double)); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer ,sizeof(double),lSize,pFile); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ BM_radius *= 0.5; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; // terminate fclose (pFile); free(s2b); free (buffer); } #line 3145 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void modes::load(int _BM_N_SAMPLE_, double _BM_radius_, int _N_SET_, int _N_MODE_, int *s2b, double *buffer) { long lSize; BM_N_SAMPLE = _BM_N_SAMPLE_; BM_radius = _BM_radius_; N_SET = _N_SET_; N_MODE = _N_MODE_; HANDLE_ERROR( cudaMalloc((void**)&d__s2b, N*sizeof(int)) ); HANDLE_ERROR( cudaMemcpy( d__s2b , s2b, N*sizeof(int), cudaMemcpyHostToDevice ) ); lSize = N_SET*N_MODE*BM_N_SAMPLE*BM_N_SAMPLE; BM_radius *= 0.5; HANDLE_ERROR( cudaMalloc((void**)&d__BM_buffer, lSize*sizeof(double)) ); HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; } #line 3177 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void modes::reset_modes(double *buffer) { long lSize = N_SET*N_MODE*BM_N_SAMPLE*BM_N_SAMPLE; HANDLE_ERROR( cudaMemcpy( d__BM_buffer , buffer, lSize*sizeof(double), cudaMemcpyHostToDevice ) ); d__BM = d__BM_buffer; dim3 blockDim(N_THREAD,N_THREAD); dim3 gridDim(BM_N_SAMPLE/N_THREAD+1,BM_N_SAMPLE/N_THREAD+1,N); modes2surface <<< gridDim, blockDim >>> (d__BMS, n_mode, d__b, d__s2b, d__BM, N_MODE, BM_N_SAMPLE); } #line 3197 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void modes::update(rtd *b) { int n_byte = sizeof(rtd)*n_mode*N; HANDLE_ERROR( cudaMemcpy( d__b, b, n_byte, cudaMemcpyHostToDevice ) ); dim3 blockDim(N_THREAD,N_THREAD); dim3 gridDim(BM_N_SAMPLE/N_THREAD+1,BM_N_SAMPLE/N_THREAD+1,N); modes2surface <<< gridDim, blockDim >>> (d__BMS, n_mode, d__b, d__s2b, d__BM, N_MODE, BM_N_SAMPLE); } #line 256 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::setup(void) { // BS = NULL; ZS = NULL; #line 293 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" M_ID = 1; D_assembly = 25.498; D_full = 8.417; D_clear = 8.365; area = 357; area0 = 357; ri = 2.875/8.417; beta = 13.601685*PI/180.0; L = 8.710; N = 7; conic_c = 1.0/36.0; conic_k = 1-0.9982857; height = 0.0; idx_offset = 0; V = NULL; #line 261 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 310 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" int n_byte; float segment_reflectivity[7] = {1.,1.,1.,1.,1.,1.,1.}; n_byte = 7*sizeof(float); HANDLE_ERROR( cudaMalloc((void**)&d__segment_reflectivity, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__segment_reflectivity, segment_reflectivity, n_byte, cudaMemcpyHostToDevice ) ); rtd *h__conic_c; n_byte = 7*sizeof(rtd); h__conic_c = (rtd *)malloc( n_byte ); for (int k=0; k<7; k++) h__conic_c[k] = conic_c; HANDLE_ERROR( cudaMalloc((void**)&d__conic_c, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__conic_c, h__conic_c, n_byte, cudaMemcpyHostToDevice ) ); free(h__conic_c); rtd *h__conic_k; n_byte = 7*sizeof(rtd); h__conic_k = (rtd *)malloc( n_byte ); for (int k=0; k<7; k++) h__conic_k[k] = conic_k; HANDLE_ERROR( cudaMalloc((void**)&d__conic_k, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__conic_k, h__conic_k, n_byte, cudaMemcpyHostToDevice ) ); free(h__conic_k); area_fraction = 1.0; vector __v0(0.0,0.0,0.0), __v(D_full*0.5,0.0,0.0), origin[12], euler_angles[12]; rtd D_c, o, zo; int k, idx; char tag[16]; depth = conic_equation(&__v,&__v0,conic_k,conic_c, 0, &D_c); D_c = L; __v.x = L; zo = conic_equation(&__v,&__v0,conic_k,conic_c, 0, &D_c); HANDLE_ERROR( cudaMalloc((void**)&d__valid_segments, sizeof(char)*7) ); HANDLE_ERROR( cudaMemset( d__valid_segments, 1, sizeof(char)*7) ); #line 385 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" origin[N-1].x = origin[N-1].y = 0.0; origin[N-1].z = height; euler_angles[N-1].x = 0.0; euler_angles[N-1].y = (M_ID==1) ? 0.0 : PI; euler_angles[N-1].z = (idx_offset/2)*PI; for (k=0; kgmt_m1: freeing memory!\n"); #line 530 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO(" |-"); BS.cleanup(); INFO(" |-"); #line 1904 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" TT_CS.cleanup(); cublasDestroy(handle); HANDLE_ERROR( cudaFree( d__C ) ); HANDLE_ERROR( cudaFree( d__D ) ); #line 534 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO(" |-"); aperture_CS.cleanup(); INFO(" |-"); conic_CS.cleanup(); INFO(" |-"); rigid_body_CS.cleanup(); INFO(" |-"); motion_CS.cleanup(); HANDLE_ERROR( cudaFree( d__conic_origin ) ); HANDLE_ERROR( cudaFree( d__valid_segments ) ); HANDLE_ERROR( cudaFree( d__conic_c ) ); HANDLE_ERROR( cudaFree( d__conic_k ) ); HANDLE_ERROR( cudaFree( d__segment_reflectivity ) ); #line 527 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 551 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::update_conic_c(rtd *_conic_c_) { HANDLE_ERROR( cudaMemcpy( d__conic_c, _conic_c_, sizeof(rtd)*7, cudaMemcpyHostToDevice ) ); } #line 560 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::update_conic_k(rtd *_conic_k_) { HANDLE_ERROR( cudaMemcpy( d__conic_k, _conic_k_, sizeof(rtd)*7, cudaMemcpyHostToDevice ) ); } #line 569 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::update(vector _origin_, vector _euler_angles_,int idx) { #line 575 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" //fprintf(stdout,"\n\x1B[31m"); motion_CS.update( _origin_, _euler_angles_, --idx); //motion_CS.info(); #line 572 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 582 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::reset(void) { #line 588 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" vector zero; zero.x = 0.0; zero.y = 0.0; zero.z = 0.0; //fprintf(stdout,"\n\x1B[31m"); for (int k=0; kN_L/N_THREAD+1,rays->N_L/N_THREAD+1, rays->N_BUNDLE); m1_preset_kernel <<< gridDim , blockDim >>> (rays->d__ray, rays->N_RAY, rays->L, rays->N_L, 0.5*(margin+D_assembly)); } #line 640 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::blocking(bundle *rays) { #line 646 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri; V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); // printf("N_BUNDLE=%d\n",rays->N_BUNDLE); int nel = rays->N_RAY*rays->N_BUNDLE; dim3 blockDim(N_THREAD2); dim3 gridDim(nel/N_THREAD2+1); fill_ones_char <<< gridDim,blockDim >>> (V->m,nel); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); m1_blocking_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); #line 643 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 718 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::trace(bundle *rays) { rays->V.area = area0*rays->N_BUNDLE*area_fraction; dim3 blockDim, gridDim; rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri; #line 729 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" /* if (V!=NULL) { */ /* blockDim = dim3(N_THREAD,N_THREAD); */ /* gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); */ /* intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); */ /* } */ V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); blockDim = dim3(1,1); gridDim = dim3(1,1,rays->N_BUNDLE); m1_trace_chief_kernel <<< gridDim , blockDim >>> (V->m, rays->d__chief_ray, 1, conic_CS.d__R, conic_CS.d__origin, conic_k, conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); HANDLE_ERROR( cudaMemset(V->m, 0, sizeof(char)*rays->N_RAY*rays->N_BUNDLE ) ); HANDLE_ERROR( cudaMemset(rays->d__piston_mask, 0, sizeof(int)*rays->N_RAY*rays->N_BUNDLE ) ); /*if (ZS!=NULL) m1_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, ZS->max_n, ZS->n_mode, ZS->d__a, ZS->d__cx, ZS->d__cy, 0.5*D_full, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); if (BS!=NULL)*/ m1_bm_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, BS.n_mode, BS.d__b, BS.d__BMS, BS.BM_N_SAMPLE, BS.BM_radius, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); float previous_nnz = rays->V.nnz; //fprintf(stdout,"M%d previous nnz rays: %f\n",M_ID,previous_nnz); rays->V.set_filter_quiet(); //fprintf(stdout,"M%d current nnz rays: %f\n",M_ID,rays->V.nnz); if (previous_nnzN_RAY_TOTAL) rays->V.area *= rays->V.nnz/previous_nnz; //fprintf(stdout,"M%d current area: %f\n",M_ID,rays->V.area); #line 726 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 952 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::test_ray_tracing(void) { int iCoordSys; vector in, out; in.x = 8.71*cos(PI/6); in.y = 8.71*sin(PI/6); in.z = 0.0; printf("Output vector:\n"); for (iCoordSys = 0; iCoordSysV.area = area0*rays->N_BUNDLE*area_fraction; dim3 blockDim, gridDim; rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri*0; #line 1485 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" /* if (V!=NULL) { */ /* blockDim = dim3(N_THREAD,N_THREAD); */ /* gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); */ /* intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); */ /* } */ V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); blockDim = dim3(1,1); gridDim = dim3(1,1,rays->N_BUNDLE); m1_trace_chief_kernel <<< gridDim , blockDim >>> (V->m, rays->d__chief_ray, 1, conic_CS.d__R, conic_CS.d__origin, conic_k, conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); /*HANDLE_ERROR( cudaMemset(V->m, 0, sizeof(char)*rays->N_RAY*rays->N_BUNDLE ) ); HANDLE_ERROR( cudaMemset(rays->d__piston_mask, 0, sizeof(int)*rays->N_RAY*rays->N_BUNDLE ) ); */ if (ZS!=NULL) m1_trace_all_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, ZS->max_n, ZS->n_mode, ZS->d__a, ZS->d__cx, ZS->d__cy, 0.5*D_full, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); /* if (BS!=NULL) m1_bm_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, BS.n_mode, BS.d__b, BS.d__BMS, BS.BM_N_SAMPLE, BS.BM_radius, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); float previous_nnz = rays->V.nnz; //fprintf(stdout,"M%d previous nnz rays: %f\n",M_ID,previous_nnz); rays->V.set_filter_quiet(); //fprintf(stdout,"M%d current nnz rays: %f\n",M_ID,rays->V.nnz); if (previous_nnzN_RAY_TOTAL) rays->V.area *= rays->V.nnz/previous_nnz; //fprintf(stdout,"M%d current area: %f\n",M_ID,rays->V.area); */ #line 1482 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1624 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::remove(int *seg_ID, int N_ID) { #line 1631 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" int k; char valid[7]; area_fraction = (7-N_ID)/7.0; memset(valid, 1, sizeof(char)*7); for (k=0;k>> (d__x, d__y, d__z, N, idx, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); #line 1669 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1714 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::locate(float *d__x, float *d__y, float *d__z, int N, int idx) { #line 1720 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dim3 blockDim(N_THREAD,1); dim3 gridDim(N/N_THREAD+1,1); locate_kernel <<< gridDim, blockDim >>> (d__x, d__y, d__z, N, idx, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); #line 1717 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1888 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::global_tiptilt(float tip, float tilt) { #line 1910 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" double alpha, beta; alpha = 1.0; beta = 0.0; int k, k9; vector origin, euler_angles, o; origin.x = origin.y = origin.z = 0.0; euler_angles.x = tip; euler_angles.y = tilt; euler_angles.z = 0.0; TT_CS.update(origin,euler_angles,0); for (k=0;kx - o.x; o.y = rigid_body_CS.origin[k].y - TT_CS.origin->y - o.y; o.z = rigid_body_CS.origin[k].z - TT_CS.origin->z - o.z; #line 1865 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" forward_transform_centered(&o, &o, rigid_body_CS.R + k9); motion_CS.origin[k].x += o.x; motion_CS.origin[k].y += o.y; motion_CS.origin[k].z += o.z; HANDLE_ERROR( cudaMemcpy( motion_CS.d__origin+k, motion_CS.origin+k, sizeof(vector), cudaMemcpyHostToDevice ) ); /* fprintf(stdout,"#%d >> MOTION CS origins [micron] : %+.3e, %+.3e, %+.3e\n",k, motion_CS.origin[k].x*1e6, motion_CS.origin[k].y*1e6, motion_CS.origin[k].z*1e6); float r2d; r2d = 1000*3600*180.0/PI; fprintf(stdout,"#%d >> MOTION CS Euler angles [mas]: %+.3e, %+.3e, %+.3e\n",k, r2d*motion_CS.euler_angles[k].x, r2d*motion_CS.euler_angles[k].y, r2d*motion_CS.euler_angles[k].z); */ #line 1924 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1891 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1932 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m1::set_reflectivity(float *reflectivity) { #line 1938 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" int n_byte; n_byte = 7*sizeof(float); HANDLE_ERROR( cudaMemcpy( d__segment_reflectivity, reflectivity, n_byte, cudaMemcpyHostToDevice ) ); #line 1935 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 1961 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::setup(void) { // BS = NULL; ZS = NULL; #line 1988 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" M_ID = 2; D_assembly = 3.168; D_full = 1.0425*1.005; // slightly larger to always encompass M1; needed for the Zernike D_clear = 1.0415; ri = 0.0; beta = -14.777498*PI/180.0; L = 1.08774; N = 7; conic_c = -1.0/4.1639009; conic_k = 1-0.71692784; height = 20.26247614; idx_offset = 3; #line 1966 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" #line 310 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" int n_byte; float segment_reflectivity[7] = {1.,1.,1.,1.,1.,1.,1.}; n_byte = 7*sizeof(float); HANDLE_ERROR( cudaMalloc((void**)&d__segment_reflectivity, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__segment_reflectivity, segment_reflectivity, n_byte, cudaMemcpyHostToDevice ) ); rtd *h__conic_c; n_byte = 7*sizeof(rtd); h__conic_c = (rtd *)malloc( n_byte ); for (int k=0; k<7; k++) h__conic_c[k] = conic_c; HANDLE_ERROR( cudaMalloc((void**)&d__conic_c, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__conic_c, h__conic_c, n_byte, cudaMemcpyHostToDevice ) ); free(h__conic_c); rtd *h__conic_k; n_byte = 7*sizeof(rtd); h__conic_k = (rtd *)malloc( n_byte ); for (int k=0; k<7; k++) h__conic_k[k] = conic_k; HANDLE_ERROR( cudaMalloc((void**)&d__conic_k, n_byte ) ); HANDLE_ERROR( cudaMemcpy( d__conic_k, h__conic_k, n_byte, cudaMemcpyHostToDevice ) ); free(h__conic_k); area_fraction = 1.0; vector __v0(0.0,0.0,0.0), __v(D_full*0.5,0.0,0.0), origin[12], euler_angles[12]; rtd D_c, o, zo; int k, idx; char tag[16]; depth = conic_equation(&__v,&__v0,conic_k,conic_c, 0, &D_c); D_c = L; __v.x = L; zo = conic_equation(&__v,&__v0,conic_k,conic_c, 0, &D_c); HANDLE_ERROR( cudaMalloc((void**)&d__valid_segments, sizeof(char)*7) ); HANDLE_ERROR( cudaMemset( d__valid_segments, 1, sizeof(char)*7) ); #line 385 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" origin[N-1].x = origin[N-1].y = 0.0; origin[N-1].z = height; euler_angles[N-1].x = 0.0; euler_angles[N-1].y = (M_ID==1) ? 0.0 : PI; euler_angles[N-1].z = (idx_offset/2)*PI; for (k=0; kgmt_m2: freeing memory!\n"); #line 530 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO(" |-"); BS.cleanup(); INFO(" |-"); #line 1904 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" TT_CS.cleanup(); cublasDestroy(handle); HANDLE_ERROR( cudaFree( d__C ) ); HANDLE_ERROR( cudaFree( d__D ) ); #line 534 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO(" |-"); aperture_CS.cleanup(); INFO(" |-"); conic_CS.cleanup(); INFO(" |-"); rigid_body_CS.cleanup(); INFO(" |-"); motion_CS.cleanup(); HANDLE_ERROR( cudaFree( d__conic_origin ) ); HANDLE_ERROR( cudaFree( d__valid_segments ) ); HANDLE_ERROR( cudaFree( d__conic_c ) ); HANDLE_ERROR( cudaFree( d__conic_k ) ); HANDLE_ERROR( cudaFree( d__segment_reflectivity ) ); #line 2019 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2022 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::update_conic_c(rtd *_conic_c_) { HANDLE_ERROR( cudaMemcpy( d__conic_c, _conic_c_, sizeof(rtd)*7, cudaMemcpyHostToDevice ) ); } #line 2029 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::update_conic_k(rtd *_conic_k_) { HANDLE_ERROR( cudaMemcpy( d__conic_k, _conic_k_, sizeof(rtd)*7, cudaMemcpyHostToDevice ) ); } #line 2041 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::blocking(bundle *rays) { #line 646 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri; V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); // printf("N_BUNDLE=%d\n",rays->N_BUNDLE); int nel = rays->N_RAY*rays->N_BUNDLE; dim3 blockDim(N_THREAD2); dim3 gridDim(nel/N_THREAD2+1); fill_ones_char <<< gridDim,blockDim >>> (V->m,nel); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); m1_blocking_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); #line 2044 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2052 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::trace(bundle *rays) { dim3 blockDim, gridDim; rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri; #line 729 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" /* if (V!=NULL) { */ /* blockDim = dim3(N_THREAD,N_THREAD); */ /* gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); */ /* intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); */ /* } */ V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); blockDim = dim3(1,1); gridDim = dim3(1,1,rays->N_BUNDLE); m1_trace_chief_kernel <<< gridDim , blockDim >>> (V->m, rays->d__chief_ray, 1, conic_CS.d__R, conic_CS.d__origin, conic_k, conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); HANDLE_ERROR( cudaMemset(V->m, 0, sizeof(char)*rays->N_RAY*rays->N_BUNDLE ) ); HANDLE_ERROR( cudaMemset(rays->d__piston_mask, 0, sizeof(int)*rays->N_RAY*rays->N_BUNDLE ) ); /*if (ZS!=NULL) m1_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, ZS->max_n, ZS->n_mode, ZS->d__a, ZS->d__cx, ZS->d__cy, 0.5*D_full, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); if (BS!=NULL)*/ m1_bm_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, BS.n_mode, BS.d__b, BS.d__BMS, BS.BM_N_SAMPLE, BS.BM_radius, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); float previous_nnz = rays->V.nnz; //fprintf(stdout,"M%d previous nnz rays: %f\n",M_ID,previous_nnz); rays->V.set_filter_quiet(); //fprintf(stdout,"M%d current nnz rays: %f\n",M_ID,rays->V.nnz); if (previous_nnzN_RAY_TOTAL) rays->V.area *= rays->V.nnz/previous_nnz; //fprintf(stdout,"M%d current area: %f\n",M_ID,rays->V.area); #line 2059 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void gmt_m2::traceall(bundle *rays) { rays->V.area = area0*rays->N_BUNDLE*area_fraction; dim3 blockDim, gridDim; rtd R2, Rri2; R2 = D_clear*D_clear*0.25; Rri2 = R2*ri*ri*0; #line 1485 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" /* if (V!=NULL) { */ /* blockDim = dim3(N_THREAD,N_THREAD); */ /* gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); */ /* intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); */ /* } */ V = &(rays->V); // fprintf(stdout,"R2=%5.2f - Rri2=%5.2f\n",R2,Rri2); blockDim = dim3(1,1); gridDim = dim3(1,1,rays->N_BUNDLE); m1_trace_chief_kernel <<< gridDim , blockDim >>> (V->m, rays->d__chief_ray, 1, conic_CS.d__R, conic_CS.d__origin, conic_k, conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); blockDim = dim3(N_THREAD,N_THREAD); gridDim = dim3(rays->N_RAY/N_THREAD2+1,1,rays->N_BUNDLE); /*HANDLE_ERROR( cudaMemset(V->m, 0, sizeof(char)*rays->N_RAY*rays->N_BUNDLE ) ); HANDLE_ERROR( cudaMemset(rays->d__piston_mask, 0, sizeof(int)*rays->N_RAY*rays->N_BUNDLE ) ); */ if (ZS!=NULL) m1_trace_all_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, ZS->max_n, ZS->n_mode, ZS->d__a, ZS->d__cx, ZS->d__cy, 0.5*D_full, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); /* if (BS!=NULL) m1_bm_trace_kernel <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY, Rri2, R2, aperture_CS.d__R, aperture_CS.d__origin, conic_CS.d__R, conic_CS.d__origin, d__conic_k, d__conic_c, d__conic_origin, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin, BS.n_mode, BS.d__b, BS.d__BMS, BS.BM_N_SAMPLE, BS.BM_radius, rays->d__chief_ray, rays->d__piston_mask, d__valid_segments, d__segment_reflectivity); intersection <<< gridDim , blockDim >>> (V->m, rays->d__ray, rays->N_RAY); float previous_nnz = rays->V.nnz; //fprintf(stdout,"M%d previous nnz rays: %f\n",M_ID,previous_nnz); rays->V.set_filter_quiet(); //fprintf(stdout,"M%d current nnz rays: %f\n",M_ID,rays->V.nnz); if (previous_nnzN_RAY_TOTAL) rays->V.area *= rays->V.nnz/previous_nnz; //fprintf(stdout,"M%d current area: %f\n",M_ID,rays->V.area); */ #line 2068 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2073 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::update(vector _origin_, vector _euler_angles_,int idx) { #line 575 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" //fprintf(stdout,"\n\x1B[31m"); motion_CS.update( _origin_, _euler_angles_, --idx); //motion_CS.info(); #line 2076 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2081 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::reset(void) { #line 588 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" vector zero; zero.x = 0.0; zero.y = 0.0; zero.z = 0.0; //fprintf(stdout,"\n\x1B[31m"); for (int k=0; k>> (d__x, d__y, d__z, N, idx, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); #line 2115 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2123 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::locate(float *d__x, float *d__y, float *d__z, int N, int idx) { #line 1720 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dim3 blockDim(N_THREAD,1); dim3 gridDim(N/N_THREAD+1,1); locate_kernel <<< gridDim, blockDim >>> (d__x, d__y, d__z, N, idx, rigid_body_CS.d__R, rigid_body_CS.d__origin, motion_CS.d__R, motion_CS.d__origin); #line 2126 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2134 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::global_tiptilt(float tip, float tilt) { #line 1910 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" double alpha, beta; alpha = 1.0; beta = 0.0; int k, k9; vector origin, euler_angles, o; origin.x = origin.y = origin.z = 0.0; euler_angles.x = tip; euler_angles.y = tilt; euler_angles.z = 0.0; TT_CS.update(origin,euler_angles,0); for (k=0;kx - o.x; o.y = rigid_body_CS.origin[k].y - TT_CS.origin->y - o.y; o.z = rigid_body_CS.origin[k].z - TT_CS.origin->z - o.z; #line 1865 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" forward_transform_centered(&o, &o, rigid_body_CS.R + k9); motion_CS.origin[k].x += o.x; motion_CS.origin[k].y += o.y; motion_CS.origin[k].z += o.z; HANDLE_ERROR( cudaMemcpy( motion_CS.d__origin+k, motion_CS.origin+k, sizeof(vector), cudaMemcpyHostToDevice ) ); /* fprintf(stdout,"#%d >> MOTION CS origins [micron] : %+.3e, %+.3e, %+.3e\n",k, motion_CS.origin[k].x*1e6, motion_CS.origin[k].y*1e6, motion_CS.origin[k].z*1e6); float r2d; r2d = 1000*3600*180.0/PI; fprintf(stdout,"#%d >> MOTION CS Euler angles [mas]: %+.3e, %+.3e, %+.3e\n",k, r2d*motion_CS.euler_angles[k].x, r2d*motion_CS.euler_angles[k].y, r2d*motion_CS.euler_angles[k].z); */ #line 1924 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2137 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 2145 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::pointing_neutral(float tip, float tilt) { double alpha, beta, *d__C; vector origin, euler_angles; cublasHandle_t handle; coordinate_system TT_CS; origin.x = origin.y = 0.0; origin.z = height - 4390.312E-03; euler_angles.x = tip; euler_angles.y = tilt; euler_angles.z = 0.0; TT_CS.setup(origin, euler_angles); cublasCreate(&handle); alpha = 1; beta = 0; HANDLE_ERROR( cudaMalloc((void**)&d__C, sizeof(double)*9 ) ); int k, k9; for (k=0;kx - o.x; o.y = rigid_body_CS.origin[k].y - TT_CS.origin->y - o.y; o.z = rigid_body_CS.origin[k].z - TT_CS.origin->z - o.z; #line 1865 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" forward_transform_centered(&o, &o, rigid_body_CS.R + k9); motion_CS.origin[k].x += o.x; motion_CS.origin[k].y += o.y; motion_CS.origin[k].z += o.z; HANDLE_ERROR( cudaMemcpy( motion_CS.d__origin+k, motion_CS.origin+k, sizeof(vector), cudaMemcpyHostToDevice ) ); /* fprintf(stdout,"#%d >> MOTION CS origins [micron] : %+.3e, %+.3e, %+.3e\n",k, motion_CS.origin[k].x*1e6, motion_CS.origin[k].y*1e6, motion_CS.origin[k].z*1e6); float r2d; r2d = 1000*3600*180.0/PI; fprintf(stdout,"#%d >> MOTION CS Euler angles [mas]: %+.3e, %+.3e, %+.3e\n",k, r2d*motion_CS.euler_angles[k].x, r2d*motion_CS.euler_angles[k].y, r2d*motion_CS.euler_angles[k].z); */ #line 2169 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } cublasDestroy(handle); TT_CS.cleanup(); HANDLE_ERROR( cudaFree( d__C ) ); } #line 2181 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::coma_neutral(float tip, float tilt) { double alpha, beta, *d__C; vector origin, euler_angles; cublasHandle_t handle; coordinate_system TT_CS; origin.x = origin.y = 0.0; origin.z = height - 2246.410E-03; euler_angles.x = tip; euler_angles.y = tilt; euler_angles.z = 0.0; TT_CS.setup(origin, euler_angles); cublasCreate(&handle); alpha = 1; beta = 0; HANDLE_ERROR( cudaMalloc((void**)&d__C, sizeof(double)*9 ) ); int k, k9; for (k=0;kx - o.x; o.y = rigid_body_CS.origin[k].y - TT_CS.origin->y - o.y; o.z = rigid_body_CS.origin[k].z - TT_CS.origin->z - o.z; #line 1865 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" forward_transform_centered(&o, &o, rigid_body_CS.R + k9); motion_CS.origin[k].x += o.x; motion_CS.origin[k].y += o.y; motion_CS.origin[k].z += o.z; HANDLE_ERROR( cudaMemcpy( motion_CS.d__origin+k, motion_CS.origin+k, sizeof(vector), cudaMemcpyHostToDevice ) ); /* fprintf(stdout,"#%d >> MOTION CS origins [micron] : %+.3e, %+.3e, %+.3e\n",k, motion_CS.origin[k].x*1e6, motion_CS.origin[k].y*1e6, motion_CS.origin[k].z*1e6); float r2d; r2d = 1000*3600*180.0/PI; fprintf(stdout,"#%d >> MOTION CS Euler angles [mas]: %+.3e, %+.3e, %+.3e\n",k, r2d*motion_CS.euler_angles[k].x, r2d*motion_CS.euler_angles[k].y, r2d*motion_CS.euler_angles[k].z); */ #line 2205 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } cublasDestroy(handle); TT_CS.cleanup(); HANDLE_ERROR( cudaFree( d__C ) ); } #line 2218 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void gmt_m2::set_reflectivity(float *reflectivity) { #line 1938 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" int n_byte; n_byte = 7*sizeof(float); HANDLE_ERROR( cudaMemcpy( d__segment_reflectivity, reflectivity, n_byte, cudaMemcpyHostToDevice ) ); #line 2221 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 3308 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void stereoscopic_edge_sensors::setup(gmt_m1 *_mirror_) { #line 3327 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" N = 48; N_DATA = 24; n_byte = sizeof(vector)*N; n_byte_DATA = sizeof(vector)*N_DATA; #line 3335 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" alpha = 19.5; #line 3340 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" mirror = _mirror_; #line 3346 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" v0 = (vector *)malloc(n_byte); v = (vector *)malloc(n_byte); HANDLE_ERROR( cudaMalloc((void**)&d__v0, n_byte ) ); HANDLE_ERROR( cudaMalloc((void**)&d__v, n_byte ) ); #line 3361 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dv0 = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__dv0, n_byte_DATA ) ); dv = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__dv, n_byte_DATA ) ); #line 3373 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO("@(CEO)>gmt_m1: Initializing edge sensors coordinates!\n"); dim3 blockDim(6,1); dim3 gridDim(1,1); edge_sensors_read <<< gridDim, blockDim >>> (d__v0, mirror->N-1, mirror->D_full, alpha, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin, mirror->motion_CS.d__R, mirror->motion_CS.d__origin); HANDLE_ERROR( cudaMemcpy( v0, d__v0, n_byte, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemcpy( d__v, d__v0, n_byte, cudaMemcpyDeviceToDevice ) ); HANDLE_ERROR( cudaMemcpy( v, d__v, n_byte, cudaMemcpyDeviceToHost ) ); #line 3389 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" HANDLE_ERROR( cudaMemset(d__dv0, 0, n_byte_DATA ) ); edge_sensors_data_kernel <<< gridDim, blockDim >>> (d__dv, d__v, d__dv0, mirror->N-1); HANDLE_ERROR( cudaMemcpy( d__dv0, d__dv, n_byte_DATA, cudaMemcpyDeviceToDevice ) ); HANDLE_ERROR( cudaMemcpy( dv0, d__dv0, n_byte_DATA, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemset(d__dv, 0, n_byte_DATA ) ); HANDLE_ERROR( cudaMemcpy( dv, d__dv, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3311 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void stereoscopic_edge_sensors::cleanup(void) { INFO("@(CEO)>stereoscopic_edge_sensors: freeing memory!\n"); #line 3351 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" free( v0 ); free( v ); HANDLE_ERROR( cudaFree( d__v0 ) ); HANDLE_ERROR( cudaFree( d__v ) ); #line 3366 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" free( dv0 ); HANDLE_ERROR( cudaFree( d__dv0 ) ); free( dv ); HANDLE_ERROR( cudaFree( d__dv ) ); #line 3316 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void stereoscopic_edge_sensors::data(void) { #line 3506 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dim3 blockDim(6,1); dim3 gridDim(1,1); edge_sensors_read <<< gridDim, blockDim >>> (d__v, mirror->N-1, mirror->D_full, alpha, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin, mirror->motion_CS.d__R, mirror->motion_CS.d__origin); edge_sensors_data_kernel <<< gridDim, blockDim >>> (d__dv, d__v, d__dv0, mirror->N-1); HANDLE_ERROR( cudaMemcpy( dv, d__dv, sizeof(vector)*N_DATA, cudaMemcpyDeviceToHost ) ); #line 3320 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } #line 3569 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" void lateral_edge_sensors::setup(gmt_m1 *_mirror_) { N_HEIGHT = 1; height = 0.0; #line 3602 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" //N = 48; N_DATA = 24*N_HEIGHT; #line 3608 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" alpha = 19.5; #line 3617 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" mirror = _mirror_; #line 3633 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" n_byte_DATA = sizeof(vector)*N_DATA; k_cam = (vector *)malloc(n_byte_DATA); k_laser = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__k_cam, n_byte_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__k_laser, n_byte_DATA ) ); uP = (vector *)malloc(n_byte_DATA); vP = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__uP, n_byte_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__vP, n_byte_DATA ) ); x = (rtd*)malloc(sizeof(rtd)*N_DATA); y = (rtd*)malloc(sizeof(rtd)*N_DATA); d = (rtd*)malloc(sizeof(rtd)*N_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__x, sizeof(rtd)*N_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__y, sizeof(rtd)*N_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__d, sizeof(rtd)*N_DATA ) ); #line 3757 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" B = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__B, n_byte_DATA ) ); B0 = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__B0, n_byte_DATA ) ); A = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__A, n_byte_DATA ) ); A0 = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__A0, n_byte_DATA ) ); #line 3782 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO("@(CEO)>gmt_m1: Initializing edge sensors coordinates!\n"); dim3 blockDim(6,N_HEIGHT); dim3 gridDim(1,1); laser_coordinates <<< gridDim, blockDim >>> (d__A, mirror->N-1, mirror->D_full, alpha, height, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin, mirror->motion_CS.d__R, mirror->motion_CS.d__origin); HANDLE_ERROR( cudaMemcpy( A, d__A, n_byte_DATA, cudaMemcpyDeviceToHost ) ); laser_coordinates_to_GCS <<< gridDim, blockDim >>> (d__A0, d__A, mirror->N-1, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin); HANDLE_ERROR( cudaMemcpy( A0, d__A0, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3903 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" camera_coordinates <<< gridDim, blockDim >>> (d__B, d__B0, mirror->N-1, mirror->D_full, alpha, height, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin); HANDLE_ERROR( cudaMemcpy(B , d__B, n_byte_DATA, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemcpy(B0 , d__B0, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3985 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" edge_sensors_camera_vector_kernel <<< gridDim, blockDim >>> (d__k_cam, d__A, d__B, d__uP, d__vP, mirror->N-1); HANDLE_ERROR( cudaMemcpy(k_cam , d__k_cam, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3574 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void lateral_edge_sensors::setup(gmt_m1 *_mirror_, rtd _height_) { N_HEIGHT = 2; height = _height_; #line 3602 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" //N = 48; N_DATA = 24*N_HEIGHT; #line 3608 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" alpha = 19.5; #line 3617 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" mirror = _mirror_; #line 3633 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" n_byte_DATA = sizeof(vector)*N_DATA; k_cam = (vector *)malloc(n_byte_DATA); k_laser = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__k_cam, n_byte_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__k_laser, n_byte_DATA ) ); uP = (vector *)malloc(n_byte_DATA); vP = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__uP, n_byte_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__vP, n_byte_DATA ) ); x = (rtd*)malloc(sizeof(rtd)*N_DATA); y = (rtd*)malloc(sizeof(rtd)*N_DATA); d = (rtd*)malloc(sizeof(rtd)*N_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__x, sizeof(rtd)*N_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__y, sizeof(rtd)*N_DATA ) ); HANDLE_ERROR( cudaMalloc((void**)&d__d, sizeof(rtd)*N_DATA ) ); #line 3757 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" B = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__B, n_byte_DATA ) ); B0 = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__B0, n_byte_DATA ) ); A = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__A, n_byte_DATA ) ); A0 = (vector *)malloc(n_byte_DATA); HANDLE_ERROR( cudaMalloc((void**)&d__A0, n_byte_DATA ) ); #line 3782 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" INFO("@(CEO)>gmt_m1: Initializing edge sensors coordinates!\n"); dim3 blockDim(6,N_HEIGHT); dim3 gridDim(1,1); laser_coordinates <<< gridDim, blockDim >>> (d__A, mirror->N-1, mirror->D_full, alpha, height, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin, mirror->motion_CS.d__R, mirror->motion_CS.d__origin); HANDLE_ERROR( cudaMemcpy( A, d__A, n_byte_DATA, cudaMemcpyDeviceToHost ) ); laser_coordinates_to_GCS <<< gridDim, blockDim >>> (d__A0, d__A, mirror->N-1, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin); HANDLE_ERROR( cudaMemcpy( A0, d__A0, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3903 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" camera_coordinates <<< gridDim, blockDim >>> (d__B, d__B0, mirror->N-1, mirror->D_full, alpha, height, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin); HANDLE_ERROR( cudaMemcpy(B , d__B, n_byte_DATA, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemcpy(B0 , d__B0, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3985 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" edge_sensors_camera_vector_kernel <<< gridDim, blockDim >>> (d__k_cam, d__A, d__B, d__uP, d__vP, mirror->N-1); HANDLE_ERROR( cudaMemcpy(k_cam , d__k_cam, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 3580 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void lateral_edge_sensors::cleanup(void) { INFO("@(CEO)>lateral_edge_sensors: freeing memory!\n"); #line 3650 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" free( k_cam ); free( k_laser ); HANDLE_ERROR( cudaFree( d__k_cam ) ); HANDLE_ERROR( cudaFree( d__k_laser ) ); free( uP ); free( vP ); HANDLE_ERROR( cudaFree( d__uP ) ); HANDLE_ERROR( cudaFree( d__vP ) ); free( x ); free( y ); free( d ); HANDLE_ERROR( cudaFree( d__x ) ); HANDLE_ERROR( cudaFree( d__y ) ); HANDLE_ERROR( cudaFree( d__d ) ); #line 3766 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" free( A ); free( A0 ); free( B ); free( B0 ); HANDLE_ERROR( cudaFree( d__A ) ); HANDLE_ERROR( cudaFree( d__A0 ) ); HANDLE_ERROR( cudaFree( d__B ) ); HANDLE_ERROR( cudaFree( d__B0 ) ); #line 3585 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" } void lateral_edge_sensors::data(void) { #line 4042 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" dim3 blockDim(6,N_HEIGHT); dim3 gridDim(1,1); edge_sensors_laser_vector_kernel <<< gridDim, blockDim >>> (d__k_laser, d__k_cam, mirror->N-1, mirror->rigid_body_CS.d__R, mirror->motion_CS.d__R); HANDLE_ERROR( cudaMemcpy(k_laser , d__k_laser, N_DATA*sizeof(vector), cudaMemcpyDeviceToHost ) ); #line 4105 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" laser_coordinates <<< gridDim, blockDim >>> (d__A, mirror->N-1, mirror->D_full, alpha, height, mirror->rigid_body_CS.d__R, mirror->rigid_body_CS.d__origin, mirror->motion_CS.d__R, mirror->motion_CS.d__origin); int n_byte_DATA; n_byte_DATA = sizeof(vector)*N_DATA; HANDLE_ERROR( cudaMemcpy( A, d__A, n_byte_DATA, cudaMemcpyDeviceToHost ) ); #line 4138 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" laser_camera_intersection <<< gridDim, blockDim >>> (d__x, d__y, d__d, d__B, d__A, d__k_cam, d__k_laser, d__uP, d__vP, mirror->N-1); HANDLE_ERROR( cudaMemcpy( x, d__x, sizeof(rtd)*N_DATA, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemcpy( y, d__y, sizeof(rtd)*N_DATA, cudaMemcpyDeviceToHost ) ); HANDLE_ERROR( cudaMemcpy( d, d__d, sizeof(rtd)*N_DATA, cudaMemcpyDeviceToHost ) ); #line 3589 "/home/ubuntu/projects/crseo/sys/CEO/gmtMirrors/gmtMirrors.nw" }