1:
(declare (fixnum))
2:
3:
;; (include "fftbasic.scm")
4:
5:
(define fftw-holder (make-f64vector (* 64 64 2)))
6:
7:
(define (slice->fftw-holder slice)
8: 0%
  (let ((accessor (Array-accessor slice)))
9: 0%
    (let outer ((i 0)
10:
		(k 0))
11: .01%
      (if (< i 64)
12: .03%
	  (let inner ((j 0)
13: 0%
		      (k k))
14: .83%
	    (if (< j 64)
15: .7%
		(let ((value (accessor i j)))
16: 2.%
		  (f64vector-set! fftw-holder k (Complex-real value))
17: 2.36%
		  (f64vector-set! fftw-holder (+ k 1) (Complex-imag value))
18: 1.43%
		  (inner (+ j 1)
19: .56%
			 (+ k 2)))
20: .01%
		(outer (+ i 1)
21: 0%
		       k)))))))
22:
23:
(define (slice<-fftw-holder slice)
24: 0%
  (let ((setter (Mutable-array-setter slice)))
25: 0%
    (let outer ((i 0)
26: 0%
		(k 0))
27: .02%
      (if (< i 64)
28: .02%
	  (let inner ((j 0)
29: 0%
		      (k k))
30: .82%
	    (if (< j 64)
31:
		(let ()
32: 1.16%
		  (setter (make-Complex (f64vector-ref fftw-holder k)
33: 1.14%
					(f64vector-ref fftw-holder (+ k 1)))
34: .4%
			  i j)
35: 1.27%
		  (inner (+ j 1)
36: .6%
			 (+ k 2)))
37: .01%
		(outer (+ i 1)
38: .01%
		       k)))))))
39:
40:
41:
(define (fftwc-slice slice)
42: 0%
  (slice->fftw-holder slice)
43: 0%
  (fftwc fftw-holder)
44: .19%
  (slice<-fftw-holder slice))
45:
46:
;;; the arguments here are in the order i (for volumes) to l (for columns)
47:
48:
(define (fftwc-volume volume)
49:
   (Array-for-each fftwc-slice (curry volume 1)))
50:
51:
(define (fftwc-data data)
52:
  (Array-for-each fftwc-slice (curry data 2)))
53:
54:
(declare (generic))