void ind_sort(int *ind_list, double *vals, int len) { int pivot; pivot=partition(ind_list, vals, len); if (pivot>=2) ind_sort(ind_list, vals, pivot); if (pivot <= len - 3) ind_sort(ind_list+pivot+1, vals+pivot+1, len-pivot-1); }
void isw_beams_preproc(ParamCoLoRe *par) { //Sort radii in ascending order int ir; flouble *r0_i=my_malloc(par->pd_map->nr*sizeof(flouble)); flouble *rf_i=my_malloc(par->pd_map->nr*sizeof(flouble)); memcpy(r0_i,par->pd_map->r0,par->pd_map->nr*sizeof(flouble)); memcpy(rf_i,par->pd_map->rf,par->pd_map->nr*sizeof(flouble)); int *i_sorted=ind_sort(par->pd_map->nr,par->pd_map->r0); for(ir=0;ir<par->pd_map->nr;ir++) { par->pd_map->r0[ir]=r0_i[i_sorted[ir]]; par->pd_map->rf[ir]=rf_i[i_sorted[ir]]; } free(r0_i); free(rf_i); free(i_sorted); //Zero all data and clear #ifdef _HAVE_OMP #pragma omp parallel default(none) \ shared(par) #endif //_HAVE_OMP { long ipp; #ifdef _HAVE_OMP #pragma omp for #endif //_HAVE_OMP for(ipp=0;ipp<par->pd_map->num_pix*par->pd_map->nr;ipp++) { par->pd_map->data[ipp]=0; par->pd_map->nadd[ipp]=1; } //end omp for } //end omp parallel return; }