00001 00005 #ifndef utils_h_inc 00006 #define utils_h_inc 00007 00008 #include <complex.h> 00009 00012 #define SWAPC(x,y) {complex* temp; temp=(x); (x)=(y); (y)=temp;} 00013 #define SWAP_double(x,y) {double* temp; temp=(x); (x)=(y); (y)=temp;} 00014 #define SWAP_complex(x,y) {complex* temp; temp=(x); (x)=(y); (y)=temp;} 00015 #define PI 3.1415926535897932384 00016 #define MAX(a,b) ((a)>(b)? (a) : (b)) 00017 #define MIN(a,b) ((a)<(b)? (a) : (b)) 00018 00028 double second(); 00029 00032 int next_power_of_2(int N); 00033 00034 void next_power_of_2_exp(int N, int *N2, int *t); 00035 00038 int nfft_prod_int(int *vec, int d); 00039 int nfct_prod_int(int *vec, int d); 00040 00043 int nfst_prod_minus_a_int(int *vec, int a, int d); 00044 00047 int nfft_plain_loop(int *idx,int *N,int d); 00048 00051 double nfft_prod_real(double *vec,int d); 00052 00064 double sinc(double x); 00065 00068 double bspline_old(int k,double x,double *A); 00069 00073 double bspline(int k, double x, double *scratch); 00074 00079 double i0(double x); 00080 00091 double dot_complex(complex* x, int n); 00092 double dot_double( double* x, int n); 00093 00096 double dot_w_complex(complex* x, double* w, int n); 00097 double dot_w_double( double* x, double* w, int n); 00098 00102 double dot_w_w2_complex(complex* x, double* w, double* w2, int n); 00103 00107 double dot_w2_complex(complex* x, double* w2, int n); 00108 00111 void cp_complex(complex* x, complex* y, int n); 00112 void cp_double( double* x, double* y, int n); 00113 00116 void cp_a_complex(complex* x, double a, complex* y, int n); 00117 00120 void cp_w_complex(complex* x, double* w, complex* y, int n); 00121 void cp_w_double( double* x, double* w, double* y, int n); 00122 00125 void upd_axpy_complex(complex* x, double a, complex* y, int n); 00126 void upd_axpy_double( double* x, double a, double* y, int n); 00127 00130 void upd_xpay_complex(complex* x, double a, complex* y, int n); 00131 void upd_xpay_double( double* x, double a, double* y, int n); 00132 00135 void upd_axpby_complex(complex* x, double a, complex* y, double b, int n); 00136 void upd_axpby_double( double* x, double a, double* y, double b, int n); 00137 00140 void upd_xpawy_complex(complex* x, double a, double* w, complex* y, int n); 00141 void upd_xpawy_double( double* x, double a, double* w, double* y, int n); 00142 00145 void upd_axpwy_complex(complex* x, double a, double* w, complex* y, int n); 00146 void upd_axpwy_double( double* x, double a, double* w, double* y, int n); 00147 00150 void fftshift_complex(complex *x, int d, int* N); 00151 00154 double error_l_infty_complex(complex *x, complex *y, int n); 00155 00158 double error_l_infty_double(double *x, double *y, int n); 00159 00162 double error_l_infty_1_complex(complex *x, complex *y, int n, complex *z, 00163 int m); 00164 00167 double error_l_infty_1_double(double *x, double *y, int n, double *z, 00168 int m); 00169 00172 double error_l_2_complex(complex *x, complex *y, int n); 00173 00176 double error_l_2_double(double *x, double *y, int n); 00177 00178 00179 void vpr_int(int *x, int n, char *text); 00180 00181 void vpr_double(double *x, int n, char *text); 00182 00183 void vpr_complex(complex *x, int n, char *text); 00184 00185 void vrand_unit_complex(complex *x, int n); 00186 00187 void vrand_shifted_unit_double(double *x, int n); 00199 void voronoi_weights_1d(double *w, double *x, int M); 00200 00204 double modified_fejer(int N,int kk); 00205 00208 double modified_jackson2(int N,int kk); 00209 00212 double modified_jackson4(int N,int kk); 00213 00216 double modified_sobolev(double mu,int kk); 00217 00220 double modified_multiquadric(double mu,double c,int kk); 00221 00222 #ifdef HAVE_MALLINFO 00223 #define HAVE_TOTAL_USED_MEMORY 00224 00227 int total_used_memory(); 00228 #endif 00229 00231 #endif