00001
00004 #ifndef SOLVER_ADJOINT_H
00005 #define SOLVER_ADJOINT_H
00006
00008 #include "nfft3.h"
00009
00010
00011
00012
00013
00014 \
00015 #define MACRO_SOLVER_ADJOINT_PLAN(MV, FLT, FLT_TYPE) \
00016 \
00017 \
00018 typedef struct \
00019 { \
00020 MV ## _plan *mv; \
00021 unsigned flags; \
00022 \
00023 double *w; \
00024 double *w_hat; \
00025 \
00026 FLT_TYPE *y_hat; \
00027 \
00028 FLT_TYPE *f_iter; \
00029 FLT_TYPE *r_hat_iter; \
00030 FLT_TYPE *z_iter; \
00032 FLT_TYPE *p_iter; \
00033 FLT_TYPE *v_hat_iter; \
00034 \
00035 double alpha_iter; \
00036 double beta_iter; \
00037 \
00038 double dot_r_hat_iter; \
00039 double dot_r_hat_iter_old; \
00040 double dot_z_iter; \
00042 double dot_z_iter_old; \
00043 double dot_p_iter; \
00045 double dot_v_hat_iter; \
00046 } i ## MV ## _adjoint_plan; \
00047 \
00048 \
00049 void i ## MV ## _adjoint_init(adjoint ## MV ## _plan *ths, MV ## _plan *mv); \
00050 \
00051 void i ## MV ## _adjoint_init_advanced(adjoint ## MV ## _plan *ths, MV ## _plan,\
00052 *mv, unsigned adjoint ## MV ## _flags); \
00053 \
00054 void i ## MV ## _adjoint_before_loop(adjoint ## MV ## _plan *ths); \
00055 \
00056 void i ## MV ## _adjoint_loop_one_step(adjoint ## MV ## _plan *ths); \
00057 \
00058 void i ## MV ## _adjoint_finalize(adjoint ## MV ## _plan *ths); \
00059
00060
00061 MACRO_SOLVER_ADJOINT_PLAN(nfsft, complex, double complex)
00062 MACRO_SOLVER_ADJOINT_PLAN(nfft, complex, double complex)
00063 MACRO_SOLVER_ADJOINT_PLAN(nfct, double, double)
00064 MACRO_SOLVER_ADJOINT_PLAN(nfst, double, double)
00065 MACRO_SOLVER_ADJOINT_PLAN(nnfft, complex, double complex)
00066 MACRO_SOLVER_ADJOINT_PLAN(mri_inh_2d1d, complex, double complex)
00067 MACRO_SOLVER_ADJOINT_PLAN(mri_inh_3d, complex, double complex)
00068
00069 #endif
00070