19#include "../../base/base_uses.f90"
24 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'fft_lib'
26 INTEGER,
SAVE :: fft_type = 0
30 PUBLIC :: fft_alloc, fft_dealloc
44 CHARACTER(len=*),
INTENT(IN) :: fftlib
65 CHARACTER(LEN=*),
INTENT(IN) :: fftlib
66 INTEGER,
INTENT(IN) :: plan_style
67 CHARACTER(LEN=*),
INTENT(IN) :: wisdom_file
70 SELECT CASE (fft_type)
72 cpabort(
"fft_do_init")
87 CHARACTER(LEN=*),
INTENT(IN) :: wisdom_file
88 LOGICAL,
INTENT(IN) :: ionode
90 SELECT CASE (fft_type)
92 cpabort(
"fft_do_cleanup")
107 INTEGER,
DIMENSION(*) :: data
108 INTEGER,
INTENT(INOUT) :: max_length
128 LOGICAL,
INTENT(IN) :: fft_in_place
129 INTEGER,
INTENT(IN) :: fsign
130 INTEGER,
DIMENSION(3),
INTENT(IN) :: n
131 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(INOUT) :: zin, zout
134 plan%fft_in_place = fft_in_place
139 IF (fft_type == 3)
THEN
158 SUBROUTINE fft_3d(plan, scale, zin, zout, stat)
160 REAL(kind=
dp),
INTENT(IN) :: scale
161 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(INOUT) :: zin, zout
162 INTEGER,
INTENT(OUT) :: stat
165 IF (plan%n_3d(1)*plan%n_3d(2)*plan%n_3d(3) > 0)
THEN
166 SELECT CASE (fft_type)
170 CALL fftsg3d(plan%fft_in_place, stat, scale, plan%n_3d, zin, zout)
172 CALL fftw33d(plan, scale, zin, zout, stat)
201 INTEGER,
INTENT(IN) :: fsign
202 LOGICAL,
INTENT(IN) :: trans_in, trans_out
203 INTEGER,
INTENT(IN) :: ldx_in, ldx_out, n, m
204 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(IN) :: zin, zout
207 plan%trans_in = trans_in
208 plan%trans_out = trans_out
209 IF (plan%trans_in)
THEN
216 IF (plan%trans_out)
THEN
217 plan%ldx_out = ldx_out
220 plan%ldx_out = ldx_out
229 IF ((fft_type == 3) .AND. (n*m /= 0))
THEN
247 IF (plan%valid .AND. fft_type == 3)
THEN
262 SUBROUTINE fft_1d(plan, zin, zout, scale, stat)
264 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(INOUT) :: zin, zout
265 REAL(kind=
dp),
INTENT(IN) :: scale
266 INTEGER,
INTENT(OUT) :: stat
269 IF (plan%n*plan%m > 0)
THEN
270 SELECT CASE (fft_type)
274 CALL fftsg1dm(stat, plan%trans_in, plan%trans_out, plan%n, plan%m, &
275 plan%ldx_in, plan%ldy_in, plan%ldx_out, plan%ldy_out, zin, zout, scale)
277 CALL fftw31dm(plan, zin, zout, scale, stat)
Defines the basic variable types.
integer, parameter, public dp
subroutine, public fft_3d(plan, scale, zin, zout, stat)
...
subroutine, public fft_destroy_plan(plan)
...
integer function, public fft_library(fftlib)
Interface to FFT libraries.
subroutine, public fft_1d(plan, zin, zout, scale, stat)
...
subroutine, public fft_do_cleanup(wisdom_file, ionode)
...
subroutine, public fft_create_plan_1d(plan, fsign, trans_in, trans_out, ldx_in, ldx_out, n, m, zin, zout)
...
subroutine, public fft_do_init(fftlib, plan_style, wisdom_file)
...
subroutine, public fft_get_lengths(data, max_length)
...
subroutine, public fft_create_plan_3d(plan, fft_in_place, fsign, n, zin, zout)
...
Type to store data about a (1D or 3D) FFT, including FFTW plan.
subroutine, public fftsg_do_init()
...
subroutine, public fftsg1dm(fsign, trans_in, trans_out, n, m, ldx_in, ldy_in, ldx_out, ldy_out, zin, zout, scale)
...
subroutine, public fftsg_do_cleanup()
...
subroutine, public fftsg3d(fft_in_place, fsign, scale, n, zin, zout)
...
subroutine, public fftw3_do_cleanup(wisdom_file, ionode)
...
subroutine, public fftw3_destroy_plan(plan)
...
subroutine, public fftw3_get_lengths(data, max_length)
...
subroutine, public fftw3_create_plan_1d(plan, zin, zout)
...
subroutine, public fftw3_create_plan_3d(plan, zin, zout)
...
subroutine, public fftw33d(plan, scale, zin, zout, stat)
...
subroutine, public fftw3_do_init(wisdom_file, plan_style)
...
subroutine, public fftw31dm(plan, zin, zout, scale, stat)
...