9   REAL, 
SAVE                   :: scale_factor
 
   10   INTEGER, 
SAVE                :: vsize
 
   11   INTEGER, 
PARAMETER           :: inc=1
 
   13   INTEGER*8, 
ALLOCATABLE, 
DIMENSION(:), 
SAVE :: plan_forward
 
   14   INTEGER*8, 
ALLOCATABLE, 
DIMENSION(:), 
SAVE :: plan_backward
 
   18   SUBROUTINE init_fft(iim,nvectmax)
 
   28     INTEGER               :: istride, idist
 
   29     INTEGER               :: ostride, odist
 
   30     INTEGER, 
DIMENSION(1) :: n_array, inembed, onembed
 
   32     REAL,    
DIMENSION(iim+1,nvectmax) :: dbidon
 
   33     COMPLEX, 
DIMENSION(iim/2+1,nvectmax) :: cbidon
 
   36     scale_factor = 1./sqrt(1.*vsize)
 
   41     ALLOCATE(plan_forward(nvectmax))
 
   42     ALLOCATE(plan_backward(nvectmax))
 
   44     WRITE(*,*)
"!---------------------!" 
   46     WRITE(*,*)
"! INITIALISATION FFTW !" 
   48     WRITE(*,*)
"!---------------------!" 
   55        inembed(1) = 
iim + 1 ; onembed(1) = 
iim/2 + 1
 
   56        istride    = 1       ; ostride    = 1
 
   57        idist      = 
iim + 1 ; odist      = 
iim/2 + 1
 
   59        CALL dfftw_plan_many_dft_r2c(plan_forward(itmp), rank, n_array, howmany, &
 
   60             & dbidon, inembed, istride, idist, &
 
   61             & cbidon, onembed, ostride, odist, &
 
   67        inembed(1) = 
iim/2 + 1 ; onembed(1) = 
iim + 1
 
   68        istride    = 1         ; ostride    = 1
 
   69        idist      = 
iim/2 + 1 ; odist      = 
iim + 1
 
   70        CALL dfftw_plan_many_dft_c2r(plan_backward(itmp), rank, n_array, howmany, &
 
   71             & cbidon, inembed, istride, idist, &
 
   72             & dbidon, onembed, ostride, odist, &
 
   77     WRITE(*,*)
"!-------------------------!" 
   79     WRITE(*,*)
"! FIN INITIALISATION FFTW !" 
   81     WRITE(*,*)
"!-------------------------!" 
   83   END SUBROUTINE init_fft
 
   86   SUBROUTINE fft_forward(vect,TF_vect,nb_vect)
 
   89     INTEGER,
INTENT(IN)     :: nb_vect
 
   90     REAL,
INTENT(IN)        :: vect(vsize+inc,nb_vect)
 
   91     COMPLEX,
INTENT(OUT) :: tf_vect(vsize/2+1,nb_vect)
 
   93     CALL dfftw_execute_dft_r2c(plan_forward(nb_vect),vect,tf_vect)
 
   95     tf_vect = scale_factor * tf_vect
 
   97   END SUBROUTINE fft_forward
 
   99   SUBROUTINE fft_backward(TF_vect,vect,nb_vect)
 
  102     INTEGER,
INTENT(IN)     :: nb_vect
 
  103     REAL,
INTENT(OUT)       :: vect(vsize+inc,nb_vect)
 
  104     COMPLEX,
INTENT(IN ) :: tf_vect(vsize/2+1,nb_vect)
 
  106     CALL dfftw_execute_dft_c2r(plan_backward(nb_vect),tf_vect,vect)
 
  108     vect = scale_factor * vect
 
  110   END SUBROUTINE fft_backward
 
c c zjulian c cym CALL iim cym klev iim