int complete_mes(char *mes, int size) { int cl = 0, headers = 0, len = 0; char *tmp = NULL; cl = get_cl(mes); #ifdef DEBUG printf("CL: %i\n", cl); #endif if (cl < 0){ if (verbose > 0) printf("missing CL header; waiting for more bytes...\n"); return 0; } tmp = get_body(mes); #ifdef DEBUG printf("body: '%s'\n", tmp); #endif headers = tmp - mes; #ifdef DEBUG printf("length: %i, headers: %i\n", size, headers); #endif len = headers + cl; if (len == size) { if (verbose > 0) printf("message is complete\n"); return 1; } else if (len > size) { if (verbose > 0) printf("waiting for more bytes...\n"); return 0; } else { /* we received more then the sender claims to sent * for now we treat this as a complete message * FIXME: should we store the extra bytes in a buffer and * truncate the message at the calculated length !? */ if (verbose > 0) printf("received too much bytes...\n"); return 1; } }
int create_basis_late(int size, double max, double *vec){ int i,j,n; double c,x,y,z,w; //basis_late = (double **)create_array(size,pmax_late+1); basis_late_flat = (double*) malloc(size * (pmax_late+1) * sizeof *basis_late_flat); double (*restrict basis_late)[pmax_late+1] = (double (*restrict)[pmax_late+1]) basis_late_flat; if(eflag_order_late<4){ basis_functions_bi(basis_late_flat, size, pmax_late, max, vec); }else if(eflag_order_late==4){ double **basis_temp = (double **)create_array(size,pmax_late-1); basis_functions_fourier(basis_temp, size, pmax_late-2, max, vec); for (i=0;i<size;i++){ for (j=0;j<pmax_late-1;j++){ basis_late[i][j] = basis_temp[i][j]; } } destroy_array(basis_temp); basis_late[0][pmax_late-1] = 0.0; basis_late[0][pmax_late] = 0.0; for (i=1;i<size;i++){ x = vec[i]*(vec[i]+1e0)/(max*(max+1e0)); y = (2e0*vec[i]+1e0)/(2e0*max+1e0); z = sqrt(x); w = pow(y,1e0/6e0); basis_late[i][pmax_late-1] = w/z; basis_late[i][pmax_late] = w*z; } }else if(eflag_order_late==5){ double **basis_temp = (double **)create_array(size,pmax_late-4); basis_functions_fourier(basis_temp, size, pmax_late-5, max, vec); for (i=0;i<size;i++){ for (j=0;j<pmax_late-4;j++){ basis_late[i][j] = basis_temp[i][j]; } } destroy_array(basis_temp); basis_late[0][pmax_late-4] = t_wgt[0]; basis_late[0][pmax_late-3] = 0.0; basis_late[0][pmax_late-2] = 0.0; basis_late[0][pmax_late-1] = 0.0; basis_late[0][pmax_late] = 0.0; for (i=1;i<size;i++){ x = vec[i]*(vec[i]+1.0)/(max*(max+1e0)); y = (2e0*vec[i]+1.0)/(2e0*max+1.0); z = sqrt(x); w = pow(y,1.0/6e0); basis_late[i][pmax_late-4] = t_wgt[i]; basis_late[i][pmax_late-3] = w/z; basis_late[i][pmax_late-2] = w*z; basis_late[i][pmax_late-1] = t_wgt[i]*w/z; basis_late[i][pmax_late] = t_wgt[i]*w*z; } }else if(eflag_order_late==6){ double **basis_temp = (double **)create_array(size,pmax_late-7); basis_functions_fourier(basis_temp, size, pmax_late-8, max, vec); for (i=0;i<size;i++){ for (j=0;j<pmax_late-7;j++){ basis_late[i][j] = basis_temp[i][j]; } } destroy_array(basis_temp); basis_late[0][pmax_late-7] = 0.0; basis_late[0][pmax_late-6] = 0.0; basis_late[0][pmax_late-5] = 0.0; basis_late[0][pmax_late-4] = 0.0; basis_late[0][pmax_late-3] = 0.0; basis_late[0][pmax_late-2] = 0.0; basis_late[0][pmax_late-1] = 0.0; basis_late[0][pmax_late] = 0.0; for (i=1;i<size;i++){ x = vec[i]*(vec[i]+1.0)/(max*(max+1e0)); y = (2e0*vec[i]+1.0)/(2e0*max+1.0); z = sqrt(x); w = pow(y,1.0/6e0); c = sqrt(get_cl(i)+get_noise(i)/(get_beam(i)*get_beam(i))); if(c!=0.0)c = w/c; basis_late[i][pmax_late-7] = w/z; basis_late[i][pmax_late-6] = w*z; basis_late[i][pmax_late-5] = c; basis_late[i][pmax_late-4] = c*x; basis_late[i][pmax_late-3] = c*get_lens_tt(i); basis_late[i][pmax_late-2] = c*get_lens_tp(i); basis_late[i][pmax_late-1] = c*x*get_lens_tt(i); basis_late[i][pmax_late] = c*x*get_lens_tp(i); } }else if(eflag_order_late==7){ double **basis_temp = (double **)create_array(size,pmax_late-1); basis_functions_bi(&basis_temp[0][0], size, pmax_late-2, max, vec); for (i=0;i<size;i++){ for (j=0;j<pmax_late-1;j++){ basis_late[i][j] = basis_temp[i][j]; } } destroy_array(basis_temp); basis_late[0][pmax_late-1] = 0.0; basis_late[0][pmax_late] = 0.0; for (i=1;i<size;i++){ x = vec[i]*(vec[i]+1e0)/(max*(max+1e0)); y = (2e0*vec[i]+1e0)/(2e0*max+1e0); z = sqrt(x); w = pow(y,1e0/6e0); basis_late[i][pmax_late-1] = w/z; basis_late[i][pmax_late] = w*z; } }else if(eflag_order_late==8){ double min = 2e0; basis_functions_sinlog(basis_late_flat, size, pmax_late, min, max, vec); }else if(eflag_order_late==9){ double **basis_temp = (double **)create_array(size,pmax_late-1); basis_functions_legendre(basis_temp, size, pmax_late-2, max, vec); for (i=0;i<size;i++){ for (j=0;j<pmax_late-1;j++){ basis_late[i][j] = basis_temp[i][j]; } } destroy_array(basis_temp); basis_late[0][pmax_late-1] = 0.0; basis_late[0][pmax_late] = 0.0; for (i=1;i<size;i++){ x = vec[i]*(vec[i]+1e0)/(max*(max+1e0)); y = (2e0*vec[i]+1e0)/(2e0*max+1e0); z = sqrt(x); w = pow(y,1e0/6e0); basis_late[i][pmax_late-1] = w/z; basis_late[i][pmax_late] = w*z; } } // JB offload basis_late_flat /* int basis_late_flat_size = size * (pmax_late+1); int offload_target; MPI_Comm_rank(MPI_COMM_WORLD, &offload_target); #pragma offload_transfer target(mic:offload_target) in(basis_late_flat[0:basis_late_flat_size] : ALLOC RETAIN) */ return 0; }