NFFT Logo 3.0 API Reference
Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals

fpt/simple_test.c

00001 #include <stdio.h>
00002 #include <math.h>
00003 #include <string.h>
00004 #include <stdlib.h>
00005 #include "util.h"
00006 #include "nfft3.h"
00007 
00008 void simple_test_nfft_1d()
00009 {
00010   int j,k;                              
00011   nfft_plan my_plan;                    
00013   int N[1],n[1];
00014   N[0]=14; n[0]=32;
00015 
00017  nfft_init_guru(&my_plan, 1, N, 19, n, 6,
00018                  PRE_PHI_HUT| PRE_LIN_PSI| MALLOC_X| MALLOC_F_HAT| MALLOC_F|
00019      FFTW_INIT| FFT_OUT_OF_PLACE,
00020      FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
00021 
00023   for(j=0;j<my_plan.M_total;j++)
00024     {
00025       my_plan.x[j]=((double)rand())/RAND_MAX-0.5;
00026     }
00027 
00029   if(my_plan.nfft_flags & PRE_ONE_PSI)
00030       nfft_precompute_one_psi(&my_plan);
00031 
00033   for(k=0;k<my_plan.N_total;k++)
00034     my_plan.f_hat[k] = ((double)rand())/RAND_MAX + I* ((double)rand())/RAND_MAX;
00035 
00036   nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat"); 
00037 
00039   ndft_trafo(&my_plan);
00040   nfft_vpr_complex(my_plan.f,my_plan.M_total,"ndft, vector f"); 
00041 
00043   nfft_trafo(&my_plan);
00044   nfft_vpr_complex(my_plan.f,my_plan.M_total,"nfft, vector f");
00045 
00047   ndft_adjoint(&my_plan);
00048   nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint ndft, vector f_hat");
00049 
00051   nfft_adjoint(&my_plan);
00052   nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nfft, vector f_hat");
00053 
00055   nfft_finalize(&my_plan);
00056 }
00057 
00058 void simple_test_nfft_2d()
00059 {
00060   int j,k;                              
00061   nfft_plan my_plan;                    
00063   int N[2],n[2];
00064   N[0]=10; n[0]=32;
00065   N[1]=10; n[1]=64;
00066 
00068   //nfft_init_2d(&my_plan,12,12,19);
00069   nfft_init_guru(&my_plan, 2, N, 19, n, 4,
00070      PRE_PHI_HUT| PRE_LIN_PSI| MALLOC_X| MALLOC_F_HAT| MALLOC_F|
00071      FFTW_INIT, FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
00072 
00074   for(j=0;j<my_plan.M_total;j++)
00075     {
00076       my_plan.x[2*j]=((double)rand())/RAND_MAX-0.5;
00077       my_plan.x[2*j+1]=((double)rand())/RAND_MAX-0.5;
00078     }
00079 
00081   if(my_plan.nfft_flags & PRE_ONE_PSI)
00082       nfft_precompute_one_psi(&my_plan);
00083 
00085   for(k=0;k<my_plan.N_total;k++)
00086     my_plan.f_hat[k] = ((double)rand())/RAND_MAX + I* ((double)rand())/RAND_MAX;
00087 
00088   nfft_vpr_complex(my_plan.f_hat,12,
00089   "given Fourier coefficients, vector f_hat (first 12 entries)");
00090 
00092   ndft_trafo(&my_plan);
00093   nfft_vpr_complex(my_plan.f,my_plan.M_total,"ndft, vector f"); 
00094 
00096   nfft_trafo(&my_plan);
00097   nfft_vpr_complex(my_plan.f,my_plan.M_total,"nfft, vector f");
00098 
00100   ndft_adjoint(&my_plan);
00101   nfft_vpr_complex(my_plan.f_hat,12,"adjoint ndft, vector f_hat (first 12 entries)");
00102 
00104   nfft_adjoint(&my_plan);
00105   nfft_vpr_complex(my_plan.f_hat,12,"adjoint nfft, vector f_hat (first 12 entries)"); 
00106 
00108   nfft_finalize(&my_plan);
00109 }
00110 
00111 void simple_test_nfft_2d_huge()
00112 {
00113   int j,k;                              
00114   nfft_plan my_plan;                    
00116   int N[2],n[2];
00117   N[0]=2050; n[0]=4096;
00118   N[1]=2050; n[1]=4096;
00119 
00122   nfft_init_guru(&my_plan, 2, N, 10, n, 
00123      6, PRE_PHI_HUT| PRE_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |
00124      FFTW_INIT| FFT_OUT_OF_PLACE,
00125      FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
00126 
00128   for(j=0;j<my_plan.M_total;j++)
00129     {
00130       my_plan.x[2*j]=((double)rand())/RAND_MAX-0.5;
00131       my_plan.x[2*j+1]=((double)rand())/RAND_MAX-0.5;
00132     }
00133 
00135   if(my_plan.nfft_flags & PRE_ONE_PSI)
00136       nfft_precompute_one_psi(&my_plan);
00137 
00139   for(k=0;k<my_plan.N_total;k++)
00140     my_plan.f_hat[k] = ((double)rand())/RAND_MAX + I* ((double)rand())/RAND_MAX;
00141 
00142   nfft_vpr_complex(my_plan.f_hat,12,
00143   "given Fourier coefficients, vector f_hat (first 12 entries)");
00144 
00146   ndft_trafo(&my_plan);
00147   nfft_vpr_complex(my_plan.f,my_plan.M_total,"ndft, vector f"); 
00148 
00150   nfft_trafo(&my_plan);
00151   nfft_vpr_complex(my_plan.f,my_plan.M_total,"nfft, vector f");
00152 
00154   ndft_adjoint(&my_plan);
00155   nfft_vpr_complex(my_plan.f_hat,12,"adjoint ndft, vector f_hat (first 12 entries)");
00156 
00158   nfft_adjoint(&my_plan);
00159   nfft_vpr_complex(my_plan.f_hat,12,"adjoint nfft, vector f_hat (first 12 entries)"); 
00160 
00162   nfft_finalize(&my_plan);
00163 }
00164 
00165 
00166 
00167 void measure_time_nfft_1d()
00168 {
00169   int j,k;                              
00170   nfft_plan my_plan;                    
00171   int my_N;
00172   double t;
00173 
00174   for(my_N=16; my_N<=1024*1024; my_N*=2)
00175     {
00176       nfft_init_1d(&my_plan,my_N,my_N);
00177 
00178       for(j=0;j<my_plan.M_total;j++)
00179   my_plan.x[j]=((double)rand())/RAND_MAX-0.5;
00180 
00181       if(my_plan.nfft_flags & PRE_ONE_PSI)
00182         nfft_precompute_one_psi(&my_plan);
00183   
00184       for(k=0;k<my_plan.N_total;k++)
00185   my_plan.f_hat[k]=((double)rand())/RAND_MAX + I*((double)rand())/RAND_MAX;
00186 
00187       if(my_N<=8192)
00188   {
00189     t=nfft_second();
00190     ndft_trafo(&my_plan);
00191     t=nfft_second()-t;
00192     printf("t_ndft=%e,\t",t);
00193   }
00194       else
00195   printf("t_ndft=nan\t");
00196 
00197       t=nfft_second();
00198       nfft_trafo(&my_plan);
00199       t=nfft_second()-t;
00200       printf("t_nfft=%e\t",t);
00201       
00202       printf("(N=M_total=%d)\n",my_N);
00203 
00204       nfft_finalize(&my_plan);  
00205     }
00206 } 
00207 
00208 void simple_test_infft_1d()
00209 {
00210   int j,k,l;                            
00211   nfft_plan my_plan;                    
00212   infft_plan my_iplan;                  
00215   nfft_init_1d(&my_plan, 8, 4);
00216 
00218   infft_init(&my_iplan,&my_plan);
00219 
00221   nfft_vrand_shifted_unit_double(my_plan.x,my_plan.M_total);
00222   
00224   if(my_plan.nfft_flags & PRE_ONE_PSI)
00225     nfft_precompute_one_psi(&my_plan);
00226 
00228   nfft_vrand_unit_complex(my_iplan.y,my_plan.M_total);
00229 
00230   nfft_vpr_complex(my_iplan.y,my_plan.M_total,"given data, vector y");
00231 
00233   for(k=0;k<my_plan.N_total;k++)
00234       my_iplan.f_hat_iter[k]=0; 
00235 
00236   nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
00237   "approximate solution, vector f_hat_iter");
00238 
00240   infft_before_loop(&my_iplan);
00241   for(l=0;l<3;l++)
00242     {
00243       printf("iteration l=%d\n",l);
00244       infft_loop_one_step(&my_iplan);
00245       nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
00246       "approximate solution, vector f_hat_iter");
00247       
00248       NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
00249       nfft_trafo(&my_plan);
00250       nfft_vpr_complex(my_plan.f,my_plan.M_total,"fitting the data, vector f");
00251       NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
00252     }
00253   
00254   infft_finalize(&my_iplan);  
00255   nfft_finalize(&my_plan);  
00256 }
00257 
00258 int main()
00259 {
00260   int l,m;
00261 
00262 printf("%d, %d\n",sizeof(int), sizeof(double));
00263 exit(-1);
00264 
00265   system("clear");
00266   printf("1) computing an one dimensional ndft, nfft and an adjoint nfft\n\n");
00267   simple_test_nfft_1d();
00268 
00269   getc(stdin);
00270 
00271   system("clear"); 
00272   printf("2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n");
00273   simple_test_nfft_2d();
00274 /*
00275   getc(stdin);
00276 
00277   system("clear"); 
00278   printf("3) computing an one dimensional infft\n\n");
00279   simple_test_infft_1d();
00280 
00281   getc(stdin);
00282     
00283   system("clear"); 
00284   printf("3) computing times for one dimensional nfft\n\n");
00285   measure_time_nfft_1d();
00286 */
00287   return 1;
00288 }

Generated on 1 Nov 2006 by Doxygen 1.4.4