32 void simple_test_nnfft_1d(
void)
41 nnfft_init(&my_plan, 1, 3, 19, N);
46 my_plan.
x[j]=((double)rand())/((
double)RAND_MAX)-0.5;
51 my_plan.
v[j]=((double)rand())/((
double)RAND_MAX)-0.5;
56 nnfft_precompute_psi(&my_plan);
70 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
72 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");
75 nnfft_trafo_direct(&my_plan);
79 nnfft_trafo(&my_plan);
83 nnfft_finalize(&my_plan);
86 static
void simple_test_adjoint_nnfft_1d(
void)
95 nnfft_init(&my_plan, 1, 20, 33, N);
100 my_plan.
x[j]=((double)rand())/((
double)RAND_MAX)-0.5;
105 my_plan.
v[j]=((double)rand())/((
double)RAND_MAX)-0.5;
110 nnfft_precompute_psi(&my_plan);
124 my_plan.
f[j] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
129 nnfft_adjoint_direct(&my_plan);
130 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");
133 nnfft_adjoint(&my_plan);
134 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");
137 nnfft_finalize(&my_plan);
140 static
void simple_test_nnfft_2d(
void)
150 nnfft_init(&my_plan, 2,12*14,19, N);
155 my_plan.
x[2*j]=((double)rand())/((
double)RAND_MAX)-0.5;
156 my_plan.
x[2*j+1]=((double)rand())/((
double)RAND_MAX)-0.5;
162 my_plan.
v[2*j]=((double)rand())/((
double)RAND_MAX)-0.5;
163 my_plan.
v[2*j+1]=((double)rand())/((
double)RAND_MAX)-0.5;
168 nnfft_precompute_psi(&my_plan);
182 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
185 "given Fourier coefficients, vector f_hat (first 12 entries)");
188 nnfft_trafo_direct(&my_plan);
192 nnfft_trafo(&my_plan);
196 nnfft_finalize(&my_plan);
199 static
void simple_test_innfft_1d(
void)
206 nnfft_init(&my_plan,1 ,8 ,8 ,&N);
213 my_plan.
x[j]=((
double)rand())/((double)RAND_MAX)-0.5;
217 my_plan.
v[k]=((
double)rand())/((
double)RAND_MAX)-0.5;
221 nnfft_precompute_psi(&my_plan);
232 my_iplan.
y[j] = ((
double)rand())/((double)RAND_MAX);
241 "approximate solution, vector f_hat_iter");
244 solver_before_loop_complex(&my_iplan);
248 printf(
"iteration l=%d\n",l);
251 "approximate solution, vector f_hat_iter");
260 nnfft_finalize(&my_plan);
263 static void measure_time_nnfft_1d(
void)
271 for(my_N=16; my_N<=16384; my_N*=2)
273 nnfft_init(&my_plan,1,my_N,my_N,&N);
276 my_plan.
x[j]=((
double)rand())/((double)RAND_MAX)-0.5;
279 my_plan.
v[j]=((
double)rand())/((
double)RAND_MAX)-0.5;
282 nnfft_precompute_psi(&my_plan);
291 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
294 nnfft_trafo_direct(&my_plan);
296 t = nfft_elapsed_seconds(t1,t0);
297 printf("t_nndft=%e,\t",t);
300 nnfft_trafo(&my_plan);
302 t = nfft_elapsed_seconds(t1,t0);
303 printf("t_nnfft=%e\t",t);
305 printf("(N=M=%d)\n",my_N);
307 nnfft_finalize(&my_plan);
314 printf(
"1) computing a one dimensional nndft, nnfft\n\n");
315 simple_test_nnfft_1d();
320 printf(
"1a) computing a one dimensional adjoint nndft, nnfft\n\n");
321 simple_test_adjoint_nnfft_1d();
326 printf(
"2) computing a two dimensional nndft, nnfft\n\n");
327 simple_test_nnfft_2d();
332 printf(
"3) computing a one dimensional innfft\n\n");
333 simple_test_innfft_1d();
338 printf(
"4) computing times for one dimensional nnfft\n\n");
339 measure_time_nnfft_1d();