00001
00012 #ifndef fastsum_h_inc
00013 #define fastsum_h_inc
00014
00016 #include <complex.h>
00018 #include "util.h"
00020 #include "nfft3.h"
00021
00025 #define EXACT_NEARFIELD (1U<< 0)
00026
00028 typedef struct fastsum_plan_
00029 {
00032 int d;
00034 int N_total;
00035 int M_total;
00037 complex *alpha;
00038 complex *f;
00040 double *x;
00041 double *y;
00043 complex (*kernel)(double , int , const double *);
00044 double *kernel_param;
00046 unsigned flags;
00051 complex *pre_K;
00054 int n;
00055 fftw_complex *b;
00057 int p;
00058 double eps_I;
00059 double eps_B;
00060
00061 nfft_plan mv1;
00062 nfft_plan mv2;
00065 int Ad;
00066 double *Add;
00068
00069 fftw_plan fft_plan;
00070 } fastsum_plan;
00071
00088 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);
00089
00094 void fastsum_finalize(fastsum_plan *ths);
00095
00100 void fastsum_exact(fastsum_plan *ths);
00101
00106 void fastsum_precompute(fastsum_plan *ths);
00107
00112 void fastsum_trafo(fastsum_plan *ths);
00113
00114 #endif
00115