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