00001
00004 #ifndef utils_h_inc
00005 #define utils_h_inc
00006
00008 #include <complex.h>
00009
00010
00011
00012
00013
00027 #define NFFT_SWAP_complex(x,y) {double complex* temp; temp=(x); (x)=(y); (y)=temp;}
00028
00031 #define NFFT_SWAP_double(x,y) {double* temp; temp=(x); (x)=(y); (y)=temp;}
00032
00035 #define PI 3.1415926535897932384
00036
00039 #define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))
00040
00043 #define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))
00044
00045
00046
00047
00048
00051 double nfft_second();
00052
00055 int nfft_total_used_memory();
00056
00059 int nfft_ld(int m);
00060
00063 int nfft_int_2_pow(int a);
00064
00067 int nfft_next_power_of_2(int N);
00068
00071 void nfft_next_power_of_2_exp(int N, int *N2, int *t);
00072
00073
00074
00075
00076
00079 double nfft_sinc(double x);
00080
00083 double nfft_bspline_old(int k,double x,double *A);
00084
00088 double nfft_bspline(int k, double x, double *scratch);
00089
00093 double nfft_i0(double x);
00094
00095
00096
00097
00098
00101 int nfft_prod_int(int *vec, int d);
00102
00105 int nfct_prod_int(int *vec, int d);
00106
00109 int nfst_prod_minus_a_int(int *vec, int a, int d);
00110
00113 int nfft_plain_loop(int *idx,int *N,int d);
00114
00117 double nfft_prod_real(double *vec,int d);
00118
00121 double nfft_dot_complex(double complex* x, int n);
00122
00125 double nfft_dot_double( double* x, int n);
00126
00129 double nfft_dot_w_complex(double complex* x, double* w, int n);
00130
00133 double nfft_dot_w_double( double* x, double* w, int n);
00134
00138 double nfft_dot_w_w2_complex(double complex* x, double* w, double* w2, int n);
00139
00143 double nfft_dot_w2_complex(double complex* x, double* w2, int n);
00144
00147 void nfft_cp_complex(double complex* x, double complex* y, int n);
00148
00151 void nfft_cp_double( double* x, double* y, int n);
00152
00155 void nfft_cp_a_complex(double complex* x, double a, double complex* y, int n);
00156
00159 void nfft_cp_w_complex(double complex* x, double* w, double complex* y, int n);
00160
00163 void nfft_cp_w_double( double* x, double* w, double* y, int n);
00164
00167 void nfft_upd_axpy_complex(double complex* x, double a, double complex* y, int n);
00168
00171 void nfft_upd_axpy_double( double* x, double a, double* y, int n);
00172
00175 void nfft_upd_xpay_complex(double complex* x, double a, double complex* y, int n);
00176
00179 void nfft_upd_xpay_double( double* x, double a, double* y, int n);
00180
00183 void nfft_upd_axpby_complex(double complex* x, double a, double complex* y, double b, int n);
00184
00187 void nfft_upd_axpby_double( double* x, double a, double* y, double b, int n);
00188
00191 void nfft_upd_xpawy_complex(double complex* x, double a, double* w, double complex* y, int n);
00192
00195 void nfft_upd_xpawy_double( double* x, double a, double* w, double* y, int n);
00196
00199 void nfft_upd_axpwy_complex(double complex* x, double a, double* w, double complex* y, int n);
00200
00203 void nfft_upd_axpwy_double( double* x, double a, double* w, double* y, int n);
00204
00207 void nfft_fftshift_complex(double complex *x, int d, int* N);
00208
00211 double nfft_error_l_infty_complex(double complex *x, double complex *y, int n);
00212
00215 double nfft_error_l_infty_double(double *x, double *y, int n);
00216
00219 double nfft_error_l_infty_1_complex(double complex *x, double complex *y, int n, double complex *z,
00220 int m);
00221
00224 double nfft_error_l_infty_1_double(double *x, double *y, int n, double *z,
00225 int m);
00226
00229 double nfft_error_l_2_complex(double complex *x, double complex *y, int n);
00230
00233 double nfft_error_l_2_double(double *x, double *y, int n);
00234
00237 void nfft_vpr_int(int *x, int n, char *text);
00238
00241 void nfft_vpr_double(double *x, int n, char *text);
00242
00245 void nfft_vpr_complex(double complex *x, int n, char *text);
00246
00249 void nfft_vrand_unit_complex(double complex *x, int n);
00250
00253 void nfft_vrand_shifted_unit_double(double *x, int n);
00254
00255
00256
00257
00258
00260 void nfft_voronoi_weights_1d(double *w, double *x, int M);
00261
00265 double nfft_modified_fejer(int N,int kk);
00266
00269 double nfft_modified_jackson2(int N,int kk);
00270
00273 double nfft_modified_jackson4(int N,int kk);
00274
00277 double nfft_modified_sobolev(double mu,int kk);
00278
00281 double nfft_modified_multiquadric(double mu,double c,int kk);
00282
00285 #endif