27 #define NFFT_PRECISION_DOUBLE
88 static void simple_test_solver_nfft_1d(
int N,
int M,
int iter)
92 SOLVER(plan_complex) ip;
93 const
char *error_str;
96 NFFT(init_1d)(&p, N, M);
99 NFFT(vrand_shifted_unit_double)(p.x, p.M_total);
102 if (p.flags & PRE_ONE_PSI)
103 NFFT(precompute_one_psi)(&p);
106 SOLVER(init_complex)(&ip, (NFFT(mv_plan_complex)*) (&p));
109 NFFT(vrand_unit_complex)(ip.y, p.M_total);
110 NFFT(vpr_complex)(ip.y, p.M_total, "Given data, vector y");
113 for (k = 0; k < p.N_total; k++)
114 ip.f_hat_iter[k] = NFFT_K(0.0);
116 NFFT(vpr_complex)(ip.f_hat_iter, p.N_total,
117 "Initial guess, vector f_hat_iter");
120 error_str = NFFT(check)(&p);
123 printf(
"Error in nfft module: %s\n", error_str);
127 NFFT_CSWAP(ip.f_hat_iter, p.f_hat);
129 NFFT(vpr_complex)(p.f, p.M_total,
"Data fit, vector f");
130 NFFT_CSWAP(ip.f_hat_iter, p.f_hat);
132 SOLVER(before_loop_complex)(&ip);
133 printf(
"\n Residual r=%" NFFT__FES__
"\n", ip.dot_r_iter);
135 for (l = 0; l < iter; l++)
137 printf(
"\n********** Iteration l=%d **********\n", l);
138 SOLVER(loop_one_step_complex)(&ip);
139 NFFT(vpr_complex)(ip.f_hat_iter, p.N_total,
140 "Approximate solution, vector f_hat_iter");
142 NFFT_CSWAP(ip.f_hat_iter, p.f_hat);
144 NFFT(vpr_complex)(p.f, p.M_total,
"Data fit, vector f");
145 NFFT_CSWAP(ip.f_hat_iter, p.f_hat);
147 printf(
"\n Residual r=%" NFFT__FES__
"\n", ip.dot_r_iter);
150 SOLVER(finalize_complex)(&ip);
157 printf(
"\n Computing a one dimensional inverse nfft\n");
159 simple_test_solver_nfft_1d(16, 8, 9);