4 REAL,
SAVE,
ALLOCATABLE :: table_forward(:)
5 REAL,
SAVE,
ALLOCATABLE :: table_backward(:)
6 REAL,
SAVE :: scale_factor
8 INTEGER,
PARAMETER :: inc=2
12 SUBROUTINE init_fft(iim,nb_vect_max)
15 INTEGER :: nb_vect_max
23 scale_factor=1./sqrt(1.*vsize)
24 ALLOCATE(table_forward(2*vsize+64))
25 ALLOCATE(table_backward(2*vsize+64))
27 CALL dzfftm(isign,vsize,itmp,scale_factor,rtmp,vsize+inc,ctmp,vsize/2+1,table_forward,rtmp,ierr)
29 CALL zdfftm(isign,vsize,itmp,scale_factor,ctmp,vsize/2+1,rtmp,vsize+inc,table_backward,rtmp,ierr)
32 END SUBROUTINE init_fft
35 SUBROUTINE fft_forward(vect,TF_vect,nb_vect)
37 INTEGER,
INTENT(IN) :: nb_vect
38 REAL,
INTENT(IN) :: vect(vsize+inc,nb_vect)
39 COMPLEX,
INTENT(OUT) :: tf_vect(vsize/2+1,nb_vect)
40 REAL :: work(4*vsize*nb_vect)
42 INTEGER,
PARAMETER :: isign=-1
45 CALL dzfftm(isign,vsize,nb_vect,scale_factor,vect,vsize+inc,tf_vect,vsize/2+1,table_forward,work,ierr)
47 END SUBROUTINE fft_forward
49 SUBROUTINE fft_backward(TF_vect,vect,nb_vect)
51 INTEGER,
INTENT(IN) :: nb_vect
52 REAL,
INTENT(OUT) :: vect(vsize+inc,nb_vect)
53 COMPLEX,
INTENT(IN ) :: tf_vect(vsize/2+1,nb_vect)
54 REAL :: work(4*vsize*nb_vect)
56 INTEGER,
PARAMETER :: isign=1
59 CALL zdfftm(isign,vsize,nb_vect,scale_factor,tf_vect,vsize/2+1,vect,vsize+inc,table_backward,work,ierr)
61 END SUBROUTINE fft_backward
c c zjulian c cym CALL iim cym klev iim