00001
00018 #ifndef fastsum_h_inc
00019 #define fastsum_h_inc
00020
00022 #include <complex.h>
00024 #include "util.h"
00026 #include "nfft3.h"
00027
00031 #define EXACT_NEARFIELD (1U<< 0)
00032
00034 typedef struct fastsum_plan_
00035 {
00038 int d;
00040 int N_total;
00041 int M_total;
00043 complex *alpha;
00044 complex *f;
00046 double *x;
00047 double *y;
00049 complex (*kernel)(double , int , const double *);
00050 double *kernel_param;
00052 unsigned flags;
00057 complex *pre_K;
00060 int n;
00061 fftw_complex *b;
00063 int p;
00064 double eps_I;
00065 double eps_B;
00066
00067 nfft_plan mv1;
00068 nfft_plan mv2;
00071 int Ad;
00072 double *Add;
00074
00075 fftw_plan fft_plan;
00076 } fastsum_plan;
00077
00094 void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, complex (*kernel)(), double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B);
00095
00100 void fastsum_finalize(fastsum_plan *ths);
00101
00106 void fastsum_exact(fastsum_plan *ths);
00107
00112 void fastsum_precompute(fastsum_plan *ths);
00113
00118 void fastsum_trafo(fastsum_plan *ths);
00119
00120
00121 #endif
00122