47 int main(
int argc, 
char **argv)
 
   57   double _Complex (*kernel)(double , int , 
const double *);  
 
   60   double _Complex *direct;                           
 
   71     printf(
"\nfastsum_test d N M n m p kernel c\n\n");
 
   72     printf(
"  d       dimension                 \n");
 
   73     printf(
"  N       number of source nodes    \n");
 
   74     printf(
"  M       number of target nodes    \n");
 
   75     printf(
"  n       expansion degree          \n");
 
   76     printf(
"  m       cut-off parameter         \n");
 
   77     printf(
"  p       degree of smoothness      \n");
 
   78     printf(
"  kernel  kernel function  (e.g., gaussian)\n");
 
   79     printf(
"  c       kernel parameter          \n");
 
   80     printf(
"  eps_I   inner boundary            \n");
 
   81     printf(
"  eps_B   outer boundary            \n\n");
 
   87     N=atoi(argv[2]); c=1.0/pow((
double)N,1.0/(
double)d);
 
   96     if (strcmp(s,
"gaussian")==0)
 
   98     else if (strcmp(s,
"multiquadric")==0)
 
   99       kernel = multiquadric;
 
  100     else if (strcmp(s,
"inverse_multiquadric")==0)
 
  101       kernel = inverse_multiquadric;
 
  102     else if (strcmp(s,
"logarithm")==0)
 
  104     else if (strcmp(s,
"thinplate_spline")==0)
 
  105       kernel = thinplate_spline;
 
  106     else if (strcmp(s,
"one_over_square")==0)
 
  107       kernel = one_over_square;
 
  108     else if (strcmp(s,
"one_over_modulus")==0)
 
  109       kernel = one_over_modulus;
 
  110     else if (strcmp(s,
"one_over_x")==0)
 
  112     else if (strcmp(s,
"inverse_multiquadric3")==0)
 
  113       kernel = inverse_multiquadric3;
 
  114     else if (strcmp(s,
"sinc_kernel")==0)
 
  115       kernel = sinc_kernel;
 
  116     else if (strcmp(s,
"cosc")==0)
 
  118     else if (strcmp(s,
"cot")==0)
 
  123       kernel = multiquadric;
 
  126   printf(
"d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
 
  129   fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
 
  133   fid1=fopen(
"x.dat",
"r");
 
  134   fid2=fopen(
"alpha.dat",
"r");
 
  139       fscanf(fid1,
"%le",&my_fastsum_plan.
x[k*d+t]);
 
  141     fscanf(fid2,
"%le",&temp); my_fastsum_plan.
alpha[k] = temp;
 
  142     fscanf(fid2,
"%le",&temp); my_fastsum_plan.
alpha[k] += temp*_Complex_I;
 
  148   fid1=fopen(
"y.dat",
"r");
 
  153       fscanf(fid1,
"%le",&my_fastsum_plan.
y[j*d+t]);
 
  159   printf(
"direct computation: "); fflush(NULL);
 
  163   time=nfft_elapsed_seconds(t1,t0);
 
  164   printf(
"%fsec\n",time);
 
  167   direct = (
double _Complex *)
nfft_malloc(my_fastsum_plan.
M_total*(
sizeof(
double _Complex)));
 
  168   for (j=0; j<my_fastsum_plan.
M_total; j++)
 
  169     direct[j]=my_fastsum_plan.
f[j];
 
  172   printf(
"pre-computation:    "); fflush(NULL);
 
  176   time=nfft_elapsed_seconds(t1,t0);
 
  177   printf(
"%fsec\n",time);
 
  180   printf(
"fast computation:   "); fflush(NULL);
 
  184   time=nfft_elapsed_seconds(t1,t0);
 
  185   printf(
"%fsec\n",time);
 
  189   for (j=0; j<my_fastsum_plan.
M_total; j++)
 
  191    if (cabs(direct[j]-my_fastsum_plan.
f[j])/cabs(direct[j])>error)
 
  192       error=cabs(direct[j]-my_fastsum_plan.
f[j])/cabs(direct[j]);
 
  194   printf(
"max relative error: %e\n",error);
 
  197   fid1=fopen(
"f.dat",
"w+");
 
  198   fid2=fopen(
"f_direct.dat",
"w+");
 
  206     temp=creal(my_fastsum_plan.
f[j]);
 
  207     fprintf(fid1,
"  % .16e",temp);
 
  208     temp=cimag(my_fastsum_plan.
f[j]);
 
  209     fprintf(fid1,
"  % .16e\n",temp);
 
  211     temp=creal(direct[j]);
 
  212     fprintf(fid2,
"  % .16e",temp);
 
  213     temp=cimag(direct[j]);
 
  214     fprintf(fid2,
"  % .16e\n",temp);