37 static int comp1(
const void *x,
const void *y)
 
   39   return ((* (
double*) x)<(* (
double*) y)?-1:1);
 
   42 static int comp2(
const void *x,
const void *y)
 
   45   nx0=global_n*(* ((
double*)x+0));
 
   46   nx1=global_n*(* ((
double*)x+1));
 
   47   ny0=global_n*(* ((
double*)y+0));
 
   48   ny1=global_n*(* ((
double*)y+1));
 
   62 static int comp3(
const void *x,
const void *y)
 
   64   int nx0,nx1,nx2,ny0,ny1,ny2;
 
   65   nx0=global_n*(* ((
double*)x+0));
 
   66   nx1=global_n*(* ((
double*)x+1));
 
   67   nx2=global_n*(* ((
double*)x+2));
 
   68   ny0=global_n*(* ((
double*)y+0));
 
   69   ny1=global_n*(* ((
double*)y+1));
 
   70   ny2=global_n*(* ((
double*)y+2));
 
   90 void measure_time_nfft(
int d, 
int N, 
unsigned test_ndft)
 
   92   int r, M, NN[d], nn[d];
 
   93   double t, t_fft, t_ndft, t_nfft;
 
   99   printf(
"\\verb+%d+&\t",(
int)(log(N)/log(2)*d+0.5));
 
  108   nfft_init_guru(&p, d, NN, M, nn, 2,
 
  110      PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  111      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  112      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  114   p_fft=fftw_plan_dft(d, NN, p.
f_hat, p.
f, FFTW_FORWARD, FFTW_MEASURE);
 
  123       case 1: { qsort(p.
x,p.
M_total,d*
sizeof(
double),comp1); 
break; }
 
  124       case 2: { qsort(p.
x,p.
M_total,d*
sizeof(
double),comp2); 
break; }
 
  125       case 3: { qsort(p.
x,p.
M_total,d*
sizeof(
double),comp3); 
break; }
 
  128   nfft_precompute_one_psi(&p);
 
  142 t = nfft_elapsed_seconds(t1,t0);
 
  148   printf(
"\\verb+%.1e+ &\t",t_fft);
 
  159           nfft_trafo_direct(&p);
 
  161 t = nfft_elapsed_seconds(t1,t0);
 
  166       printf(
"\\verb+%.1e+ &\t",t_ndft);
 
  170     printf(
"\\verb+*+\t&\t");
 
  181     case 1: { nfft_trafo_1d(&p); 
break; }
 
  182     case 2: { nfft_trafo_2d(&p); 
break; }
 
  183     case 3: { nfft_trafo_3d(&p); 
break; }
 
  187 t = nfft_elapsed_seconds(t1,t0);
 
  193   printf(
"\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n",t_nfft,t_nfft/t_fft);
 
  195   fftw_destroy_plan(p_fft);
 
  199 void measure_time_nfft_XXX2(
int d, 
int N, 
unsigned test_ndft)
 
  201   int r, M, NN[d], nn[d];
 
  202   double t, t_fft, t_ndft, t_nfft;
 
  208   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  217   nfft_init_guru(&p, d, NN, M, nn, 2,
 
  220      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  221      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  222      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  224   p_fft=fftw_plan_dft(d, NN, p.
f_hat, p.
f, FFTW_FORWARD, FFTW_MEASURE);
 
  226   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
M_total*
sizeof(
double _Complex));
 
  231   qsort(p.
x,p.
M_total,d*
sizeof(
double),comp1);
 
  234   nfft_precompute_one_psi(&p);
 
  248 t = nfft_elapsed_seconds(t1,t0);
 
  253   printf(
"%.1e\t",t_fft);
 
  265           nfft_trafo_direct(&p);
 
  267 t = nfft_elapsed_seconds(t1,t0);
 
  271       printf(
"%.1e\t",t_ndft);
 
  286 t = nfft_elapsed_seconds(t1,t0);
 
  290   printf(
"%.1e\t",t_nfft);
 
  292     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  303 t = nfft_elapsed_seconds(t1,t0);
 
  307   printf(
"%.1e\t",t_nfft);
 
  309     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  314   fftw_destroy_plan(p_fft);
 
  318 void measure_time_nfft_XXX3(
int d, 
int N, 
unsigned test_ndft)
 
  320   int r, M, NN[d], nn[d];
 
  321   double t, t_fft, t_ndft, t_nfft;
 
  327   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  336   nfft_init_guru(&p, d, NN, M, nn, 2,
 
  339      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  340      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  341      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  343   p_fft=fftw_plan_dft(d, NN, p.
f, p.
f_hat, FFTW_BACKWARD, FFTW_MEASURE);
 
  345   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
N_total*
sizeof(
double _Complex));
 
  350   qsort(p.
x,p.
M_total,d*
sizeof(
double),comp1);
 
  353   nfft_precompute_one_psi(&p);
 
  367 t = nfft_elapsed_seconds(t1,t0);
 
  372   printf(
"%.1e\t",t_fft);
 
  384           nfft_adjoint_direct(&p);
 
  386 t = nfft_elapsed_seconds(t1,t0);
 
  390       printf(
"%.1e\t",t_ndft);
 
  405 t = nfft_elapsed_seconds(t1,t0);
 
  409   printf(
"%.1e\t",t_nfft);
 
  411     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  422 t = nfft_elapsed_seconds(t1,t0);
 
  426   printf(
"%.1e\t",t_nfft);
 
  428     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  433   fftw_destroy_plan(p_fft);
 
  440 void measure_time_nfft_XXX4(
int d, 
int N, 
unsigned test_ndft)
 
  442   int r, M, NN[d], nn[d];
 
  443   double t, t_fft, t_ndft, t_nfft;
 
  449   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  458   nfft_init_guru(&p, d, NN, M, nn, 4,
 
  461      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  462      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  463      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  465   p_fft=fftw_plan_dft(d, NN, p.
f_hat, p.
f, FFTW_FORWARD, FFTW_MEASURE);
 
  467   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
M_total*
sizeof(
double _Complex));
 
  478   nfft_precompute_one_psi(&p);
 
  492 t = nfft_elapsed_seconds(t1,t0);
 
  497   printf(
"%.1e\t",t_fft);
 
  512           nfft_trafo_direct(&p);
 
  514 t = nfft_elapsed_seconds(t1,t0);
 
  518       printf(
"%.1e\t",t_ndft);
 
  536 t = nfft_elapsed_seconds(t1,t0);
 
  540   printf(
"%.1e\t",t_nfft);
 
  542     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  555 t = nfft_elapsed_seconds(t1,t0);
 
  559   printf(
"%.1e\t",t_nfft);
 
  561     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  568   fftw_destroy_plan(p_fft);
 
  573 void measure_time_nfft_XXX5(
int d, 
int N, 
unsigned test_ndft)
 
  575   int r, M, NN[d], nn[d];
 
  576   double t, t_fft, t_ndft, t_nfft;
 
  582   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  591   nfft_init_guru(&p, d, NN, M, nn, 4,
 
  594      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  595      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  596      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  598   p_fft=fftw_plan_dft(d, NN, p.
f, p.
f_hat, FFTW_FORWARD, FFTW_MEASURE);
 
  600   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
N_total*
sizeof(
double _Complex));
 
  607   nfft_precompute_one_psi(&p);
 
  621 t = nfft_elapsed_seconds(t1,t0);
 
  626   printf(
"%.1e\t",t_fft);
 
  641           nfft_adjoint_direct(&p);
 
  643 t = nfft_elapsed_seconds(t1,t0);
 
  647       printf(
"%.1e\t",t_ndft);
 
  665 t = nfft_elapsed_seconds(t1,t0);
 
  669   printf(
"%.1e\t",t_nfft);
 
  671     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  684 t = nfft_elapsed_seconds(t1,t0);
 
  688   printf(
"%.1e\t",t_nfft);
 
  690     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  697   fftw_destroy_plan(p_fft);
 
  702 void measure_time_nfft_XXX6(
int d, 
int N, 
unsigned test_ndft)
 
  704   int r, M, NN[d], nn[d];
 
  705   double t, t_fft, t_ndft, t_nfft;
 
  711   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  720   nfft_init_guru(&p, d, NN, M, nn, 2,
 
  723      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  724      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  725      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  727   p_fft=fftw_plan_dft(d, NN, p.
f_hat, p.
f, FFTW_FORWARD, FFTW_MEASURE);
 
  729   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
M_total*
sizeof(
double _Complex));
 
  737   nfft_precompute_one_psi(&p);
 
  751 t = nfft_elapsed_seconds(t1,t0);
 
  756   printf(
"%.1e\t",t_fft);
 
  771           nfft_trafo_direct(&p);
 
  773 t = nfft_elapsed_seconds(t1,t0);
 
  777       printf(
"%.1e\t",t_ndft);
 
  795 t = nfft_elapsed_seconds(t1,t0);
 
  799   printf(
"%.1e\t",t_nfft);
 
  801     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  814 t = nfft_elapsed_seconds(t1,t0);
 
  818   printf(
"%.1e\t",t_nfft);
 
  820     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f, p.
M_total));
 
  827   fftw_destroy_plan(p_fft);
 
  832 void measure_time_nfft_XXX7(
int d, 
int N, 
unsigned test_ndft)
 
  834   int r, M, NN[d], nn[d];
 
  835   double t, t_fft, t_ndft, t_nfft;
 
  841   printf(
"%d\t",(
int)(log(N)/log(2)*d+0.5)); fflush(stdout);
 
  850   nfft_init_guru(&p, d, NN, M, nn, 2,
 
  853      MALLOC_F_HAT| MALLOC_X| MALLOC_F|
 
  854      FFTW_INIT| FFT_OUT_OF_PLACE,
 
  855      FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
  857   p_fft=fftw_plan_dft(d, NN, p.
f, p.
f_hat, FFTW_FORWARD, FFTW_MEASURE);
 
  859   double _Complex *swapndft=(
double _Complex*)
nfft_malloc(p.
N_total*
sizeof(
double _Complex));
 
  866   nfft_precompute_one_psi(&p);
 
  880 t = nfft_elapsed_seconds(t1,t0);
 
  885   printf(
"%.1e\t",t_fft);
 
  900           nfft_adjoint_direct(&p);
 
  902 t = nfft_elapsed_seconds(t1,t0);
 
  906       printf(
"%.1e\t",t_ndft);
 
  924 t = nfft_elapsed_seconds(t1,t0);
 
  928   printf(
"%.1e\t",t_nfft);
 
  930     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  943 t = nfft_elapsed_seconds(t1,t0);
 
  947   printf(
"%.1e\t",t_nfft);
 
  949     printf(
"(%.1e)\t",X(error_l_2_complex)(swapndft, p.
f_hat, p.
N_total));
 
  956   fftw_destroy_plan(p_fft);
 
  970     measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);
 
  971     measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);
 
  975     measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);
 
  976     measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);
 
  989     measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);
 
  990     measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);
 
  994     measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);
 
  995     measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);
 
 1006     measure_time_nfft_XXX2(1,(1U<< (logIN)),1);
 
 1007     measure_time_nfft_XXX3(1,(1U<< (logIN)),1);
 
 1011     measure_time_nfft_XXX2(1,(1U<< (logIN)),0);
 
 1012     measure_time_nfft_XXX3(1,(1U<< (logIN)),0);
 
 1023   printf(
"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
 
 1024   printf(
"\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n");
 
 1030   measure_time_nfft(d,(1U<< (logIN/d)),1);
 
 1032   measure_time_nfft(d,(1U<< (logIN/d)),0);
 
 1037   printf(
"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
 
 1038   printf(
"\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n");
 
 1044   measure_time_nfft(d,(1U<< (logIN/d)),1);
 
 1046   measure_time_nfft(d,(1U<< (logIN/d)),0);
 
 1051   printf(
"\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n");
 
 1057   measure_time_nfft(d,(1U<< (logIN/d)),1);
 
 1059   measure_time_nfft(d,(1U<< (logIN/d)),0);