예제 #1
0
파일: cfft2.c 프로젝트: MattWherry/yorick
void cfft2(long idir, double c[], long istd, long n, long n2, double ws[])
{
  long j, i0, iw3, iw2, iw1, jw, nistd;

  if (n == 1) return;
  iw1 = n+n;
  iw2 = iw1+n+n;
  iw3 = iw2+15;
  istd *= 2;
  nistd = istd*n;
  for (; (n2--)>0 ; c+=nistd) {
    if (istd > 1) {
      for (i0=0 ; i0<istd ; i0+=2) {
        for (j=jw=0 ; j<nistd ; j+=istd,jw+=2) {
          ws[iw3+jw] = c[i0+j];
          ws[iw3+1+jw] = c[1+i0+j];
        }
        if (idir >= 0)
          cfftf1 (n,&ws[iw3],ws,&ws[iw1],(long *)&ws[iw2]);
        else
          cfftb1 (n,&ws[iw3],ws,&ws[iw1],(long *)&ws[iw2]);
        for (j=jw=0 ; j<nistd ; j+=istd,jw+=2) {
          c[i0+j] = ws[iw3+jw];
          c[1+i0+j] = ws[iw3+1+jw];
        }
      }
    } else {
      if (idir >= 0)
        cfftf1 (n,c,ws,&ws[iw1],(long *)&ws[iw2]);
      else
        cfftb1 (n,c,ws,&ws[iw1],(long *)&ws[iw2]);
    }
  }
  return;
}
예제 #2
0
int cfftf1(int *n, double *c, double *ch, double *wa, double *ifac) {
  // Casting (double*) to (int*) is dangerous if sizes differ!!!
  return cfftf1(n, c, ch, wa, (int *)ifac);
}