15 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'fftsg_lib'
49 INTEGER,
DIMENSION(*) :: data
50 INTEGER,
INTENT(INOUT) :: max_length
52 INTEGER,
PARAMETER :: rlen = 81
53 INTEGER,
DIMENSION(rlen),
PARAMETER :: radix = (/2, 4, 6, 8, 9, 12, 15, 16, 18, 20, 24, 25, &
54 27, 30, 32, 36, 40, 45, 48, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100, 108, 120, 125, 128, &
55 135, 144, 150, 160, 162, 180, 192, 200, 216, 225, 240, 243, 256, 270, 288, 300, 320, 324, &
56 360, 375, 384, 400, 405, 432, 450, 480, 486, 500, 512, 540, 576, 600, 625, 640, 648, 675, &
57 720, 729, 750, 768, 800, 810, 864, 900, 960, 972, 1000, 1024/)
63 ndata = min(max_length, rlen)
64 DATA(1:ndata) = radix(1:ndata)
78 SUBROUTINE fftsg3d(fft_in_place, fsign, scale, n, zin, zout)
80 LOGICAL,
INTENT(IN) :: fft_in_place
81 INTEGER,
INTENT(INOUT) :: fsign
82 REAL(kind=
dp),
INTENT(IN) :: scale
83 INTEGER,
DIMENSION(*),
INTENT(IN) :: n
84 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(INOUT) :: zin, zout
86 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:) :: xf, yf
95 IF (fft_in_place)
THEN
97 ALLOCATE (xf(nx*ny*nz), yf(nx*ny*nz))
99 CALL mltfftsg(
'N',
'T', zin, nx, ny*nz, xf, ny*nz, nx, nx, &
100 ny*nz, fsign, 1.0_dp)
101 CALL mltfftsg(
'N',
'T', xf, ny, nx*nz, yf, nx*nz, ny, ny, &
102 nx*nz, fsign, 1.0_dp)
103 CALL mltfftsg(
'N',
'T', yf, nz, ny*nx, zin, ny*nx, nz, nz, &
110 ALLOCATE (xf(nx*ny*nz))
112 CALL mltfftsg(
'N',
'T', zin, nx, ny*nz, zout, ny*nz, nx, nx, &
113 ny*nz, fsign, 1.0_dp)
114 CALL mltfftsg(
'N',
'T', zout, ny, nx*nz, xf, nx*nz, ny, ny, &
115 nx*nz, fsign, 1.0_dp)
116 CALL mltfftsg(
'N',
'T', xf, nz, ny*nx, zout, ny*nx, nz, nz, &
135 SUBROUTINE fftsg1dm(fsign, trans, n, m, zin, zout, scale)
137 INTEGER,
INTENT(INOUT) :: fsign
138 LOGICAL,
INTENT(IN) :: trans
139 INTEGER,
INTENT(IN) :: n, m
140 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(INOUT) :: zin
141 COMPLEX(KIND=dp),
DIMENSION(*),
INTENT(OUT) :: zout
142 REAL(kind=
dp),
INTENT(IN) :: scale
148 CALL mltfftsg(
"T",
"N", zin, m, n, zout, n, m, n, m, fsign, scale)
150 CALL mltfftsg(
"N",
"T", zin, n, m, zout, m, n, n, m, fsign, scale)
153 CALL mltfftsg(
"N",
"N", zin, n, m, zout, n, m, n, m, fsign, scale)
Defines the basic variable types.
integer, parameter, public dp
subroutine, public fftsg1dm(fsign, trans, n, m, zin, zout, scale)
...
subroutine, public fftsg_do_init()
...
subroutine, public fftsg_get_lengths(DATA, max_length)
...
subroutine, public fftsg_do_cleanup()
...
subroutine, public fftsg3d(fft_in_place, fsign, scale, n, zin, zout)
...