00001 #ifndef solver_h_inc
00002 #define solver_h_inc
00003
00004 #include <complex.h>
00005 #include "nfft3.h"
00006
00010 #define LANDWEBER (1U<< 0)
00011 #define STEEPEST_DESCENT (1U<< 1)
00012 #define CGNR (1U<< 2)
00013 #define CGNE (1U<< 3)
00014 #define NORMS_FOR_LANDWEBER (1U<< 4)
00015 #define PRECOMPUTE_WEIGHT (1U<< 5)
00016 #define PRECOMPUTE_DAMP (1U<< 6)
00017 #define REGULARIZE_CGNR (1U<< 7)
00018 #define REGULARIZE_CGNR_R_HAT (1U<< 8)
00019
00020 typedef struct infft_plan_
00021 {
00022 nfft_plan *mv;
00023 unsigned flags;
00025 double *w;
00026 double *w_hat;
00027 double *r_hat;
00028 double lambda;
00030
00031 complex *y;
00033
00034 complex *f_hat_iter;
00036
00037 complex *r_iter;
00038 complex *z_hat_iter;
00039 complex *p_hat_iter;
00040 complex *v_iter;
00042
00043 double alpha_iter;
00044 double beta_iter;
00046
00047 double dot_r_iter;
00048 double dot_r_iter_old;
00049 double dot_z_hat_iter;
00050 double dot_z_hat_iter_old;
00051 double dot_p_hat_iter;
00052 double dot_v_iter;
00053 } infft_plan;
00054
00057 void infft_init(infft_plan *ths, nfft_plan *mv);
00058
00061 void infft_init_specific(infft_plan *ths, nfft_plan *mv, int infft_flags);
00062
00065 void infft_before_loop(infft_plan *ths);
00066
00069 void infft_loop_one_step(infft_plan *ths);
00070
00073 void infft_finalize(infft_plan *ths);
00077 #endif