28 #define CSWAP(x,y) {double _Complex * NFFT_SWAP_temp__; \ 29 NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;} 31 void simple_test_nnfft_1d(
void)
40 nnfft_init(&my_plan, 1, 3, 19, N);
45 my_plan.
x[j]=((double)rand())/((
double)RAND_MAX)-0.5;
50 my_plan.
v[j]=((double)rand())/((
double)RAND_MAX)-0.5;
66 nnfft_precompute_one_psi(&my_plan);
71 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
73 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");
76 nnfft_trafo_direct(&my_plan);
84 nnfft_finalize(&my_plan);
87 static
void simple_test_adjoint_nnfft_1d(
void)
96 nnfft_init(&my_plan, 1, 20, 33, N);
101 my_plan.
x[j]=((double)rand())/((
double)RAND_MAX)-0.5;
106 my_plan.
v[j]=((double)rand())/((
double)RAND_MAX)-0.5;
111 nnfft_precompute_psi(&my_plan);
125 my_plan.
f[j] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
130 nnfft_adjoint_direct(&my_plan);
131 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");
134 nnfft_adjoint(&my_plan);
135 nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");
138 nnfft_finalize(&my_plan);
141 static
void simple_test_nnfft_2d(
void)
151 nnfft_init(&my_plan, 2,12*14,19, N);
156 my_plan.
x[2*j]=((double)rand())/((
double)RAND_MAX)-0.5;
157 my_plan.
x[2*j+1]=((double)rand())/((
double)RAND_MAX)-0.5;
163 my_plan.
v[2*j]=((double)rand())/((
double)RAND_MAX)-0.5;
164 my_plan.
v[2*j+1]=((double)rand())/((
double)RAND_MAX)-0.5;
169 nnfft_precompute_psi(&my_plan);
183 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
186 "given Fourier coefficients, vector f_hat (first 12 entries)");
189 nnfft_trafo_direct(&my_plan);
197 nnfft_finalize(&my_plan);
200 static
void simple_test_innfft_1d(
void)
207 nnfft_init(&my_plan,1 ,8 ,8 ,&N);
214 my_plan.
x[j]=((
double)rand())/((double)RAND_MAX)-0.5;
218 my_plan.
v[k]=((
double)rand())/((
double)RAND_MAX)-0.5;
222 nnfft_precompute_psi(&my_plan);
233 my_iplan.
y[j] = ((
double)rand())/((double)RAND_MAX);
242 "approximate solution, vector f_hat_iter");
245 solver_before_loop_complex(&my_iplan);
249 printf(
"iteration l=%d\n",l);
250 solver_loop_one_step_complex(&my_iplan);
252 "approximate solution, vector f_hat_iter");
260 solver_finalize_complex(&my_iplan);
261 nnfft_finalize(&my_plan);
264 static void measure_time_nnfft_1d(
void)
272 for(my_N=16; my_N<=16384; my_N*=2)
274 nnfft_init(&my_plan,1,my_N,my_N,&N);
277 my_plan.
x[j]=((
double)rand())/((double)RAND_MAX)-0.5;
280 my_plan.
v[j]=((
double)rand())/((
double)RAND_MAX)-0.5;
283 nnfft_precompute_psi(&my_plan);
292 my_plan.
f_hat[k] = ((
double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((
double)RAND_MAX);
294 t0 = nfft_clock_gettime_seconds();
295 nnfft_trafo_direct(&my_plan);
296 t1 = nfft_clock_gettime_seconds();
298 printf("t_nndft=%e,\t",t);
300 t0 = nfft_clock_gettime_seconds();
302 t1 = nfft_clock_gettime_seconds();
304 printf("t_nnfft=%e\t",t);
306 printf("(N=M=%d)\n",my_N);
308 nnfft_finalize(&my_plan);
315 printf(
"1) computing a one dimensional nndft, nnfft SUSE\n\n");
316 simple_test_nnfft_1d();
fftw_complex * f_hat
Fourier coefficients.
void nnfft_precompute_full_psi(nnfft_plan *ths_plan)
computes all entries of B explicitly
unsigned nnfft_flags
flags for precomputation, malloc
double * v
nodes (in fourier domain)
void nnfft_trafo(nnfft_plan *ths_plan)
user routines
void nnfft_precompute_phi_hut(nnfft_plan *ths_plan)
initialisation of direct transform
void nfft_vpr_complex(fftw_complex *x, const NFFT_INT n, const char *text)
Print complex vector to standard output.
NFFT_INT M_total
Total number of samples.
data structure for an NNFFT (nonequispaced in time and frequency fast Fourier transform) plan with do...
double * x
nodes (in time/spatial domain)
void nnfft_precompute_lin_psi(nnfft_plan *ths_plan)
create a lookup table
fftw_complex * y
right hand side, samples
NFFT_INT N_total
Total number of Fourier coefficients.
data structure for an inverse NFFT plan with double precision
#define CSWAP(x, y)
Swap two vectors.
fftw_complex * f_hat_iter
iterative solution