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