6 REAL,
SAVE :: scale_factor
8 INTEGER,
PARAMETER :: inc=1
21 SUBROUTINE init_fft(iim,nb_vect_max)
24 INTEGER :: nb_vect_max
32 scale_factor=1./sqrt(1.*vsize)
55 END SUBROUTINE init_fft
58 SUBROUTINE fft_forward(vect,TF_vect,nb_vect)
60 INTEGER,
INTENT(IN) :: nb_vect
61 REAL,
INTENT(IN) :: vect((vsize+inc)*nb_vect)
62 COMPLEX,
INTENT(OUT) :: tf_vect((vsize/2+1)*nb_vect)
63 REAL :: work(4*vsize*nb_vect)
65 INTEGER,
PARAMETER :: isign=-1
66 REAL :: vect_out((vsize+inc)*nb_vect)
67 TYPE(dfti_descriptor),
POINTER :: fft_handle
71 ierr =
dftisetvalue(fft_handle,dfti_number_of_transforms,nb_vect)
72 ierr =
dftisetvalue(fft_handle,dfti_forward_scale,scale_factor)
73 ierr =
dftisetvalue(fft_handle,dfti_backward_scale,scale_factor)
74 ierr =
dftisetvalue(fft_handle,dfti_placement,dfti_not_inplace)
75 ierr =
dftisetvalue(fft_handle, dfti_input_distance, vsize+inc)
76 ierr =
dftisetvalue(fft_handle, dfti_output_distance, (vsize/2+1)*2)
98 END SUBROUTINE fft_forward
100 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)
105 REAL :: work(4*vsize*nb_vect)
107 INTEGER,
PARAMETER :: isign=1
108 TYPE(dfti_descriptor),
POINTER :: fft_handle
112 ierr =
dftisetvalue(fft_handle,dfti_number_of_transforms,nb_vect)
113 ierr =
dftisetvalue(fft_handle,dfti_forward_scale,scale_factor)
114 ierr =
dftisetvalue(fft_handle,dfti_backward_scale,scale_factor)
115 ierr =
dftisetvalue(fft_handle,dfti_placement,dfti_not_inplace)
116 ierr =
dftisetvalue(fft_handle, dfti_input_distance, (vsize/2+1)*2)
117 ierr =
dftisetvalue(fft_handle, dfti_output_distance, vsize+inc)
124 END SUBROUTINE fft_backward
c c zjulian c cym CALL iim cym klev iim