31 MODULE PROCEDURE gft_set_cc_1d, gft_set_cc_2d, gft_set_cc_3d, &
32 gft_set_rcr_1d, gft_set_rcr_2d, gft_set_rcr_3d, &
33 gft_set_mcc, gft_set_mrcr
96 SUBROUTINE gft_set_cc_1d(Nx, FFT, code)
100 INTEGER,
INTENT(IN) :: Nx
103 TYPE(
gft_cc),
INTENT(OUT) :: FFT
104 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
107 INTEGER,
DIMENSION(0:99) :: fact
109 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_cc_1d"
114 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
117 fft%TableSize = 100+2*fft%Nx
118 ALLOCATE(fft%Table(0:fft%TableSize-1))
120 fft%WorkSize = 4*fft%BF*fft%Nx
121 ALLOCATE(fft%Work(0:fft%WorkSize-1))
124 CALL jmfact(fft%Nx,fact,100, 0,nfact)
125 fft%Table(0:nfact-1) = fact(0:nfact-1)
128 CALL jmtable(fft%Table,fft%TableSize,100+0,fft%Nx)
130 IF(
PRESENT(code) ) code=0
133 SUBROUTINE gft_set_cc_2d(Nx, Ny, FFT, code)
137 INTEGER,
INTENT(IN) :: Nx, Ny
140 TYPE(
gft_cc),
INTENT(OUT) :: FFT
141 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
144 INTEGER,
DIMENSION(0:99) :: fact
145 INTEGER :: nfact, mfact
146 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_cc_2d"
152 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: NX < 1")
153 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: NY < 1")
156 fft%TableSize = 100+2*(fft%Nx + fft%Ny)
157 ALLOCATE(fft%Table(0:fft%TableSize-1))
159 fft%WorkSize = 4*fft%BF*max(fft%Nx, fft%Ny)
161 ALLOCATE(fft%Work(0:fft%WorkSize-1))
164 CALL jmfact(fft%Nx,fact,100, 0,nfact)
165 CALL jmfact(fft%Ny,fact,100,nfact,mfact)
166 fft%Table(0:mfact-1) = fact(0:mfact-1)
169 CALL jmtable(fft%Table,fft%TableSize,100+0 ,fft%Nx)
170 CALL jmtable(fft%Table,fft%TableSize,100+2*fft%Nx,fft%Ny)
172 IF(
PRESENT(code) ) code=0
175 SUBROUTINE gft_set_cc_3d(Nx, Ny, Nz, FFT, code)
179 INTEGER,
INTENT(IN) :: Nx, Ny, Nz
182 TYPE(
gft_cc),
INTENT(OUT) :: FFT
183 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
186 INTEGER,
DIMENSION(0:99) :: fact
187 INTEGER :: nfact, mfact, lfact
188 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_cc_3d"
195 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
196 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: Ny < 1")
197 IF( fft%Nz < 1 )
CALL gft_error(spname//
": Error: Nz < 1")
200 fft%TableSize = 100+2*(fft%Nx + fft%Ny + fft%Nz)
201 ALLOCATE(fft%Table(0:fft%TableSize-1))
203 fft%WorkSize = 4*fft%BF*max(fft%Nx, fft%Ny, fft%Nz)
205 ALLOCATE(fft%Work(0:fft%WorkSize-1))
208 CALL jmfact(fft%Nx,fact,100, 0,nfact)
209 CALL jmfact(fft%Ny,fact,100,nfact,mfact)
210 CALL jmfact(fft%Nz,fact,100,mfact,lfact)
211 fft%Table(0:lfact-1) = fact(0:lfact-1)
214 CALL jmtable(fft%Table,fft%TableSize,100+0 , fft%Nx)
215 CALL jmtable(fft%Table,fft%TableSize,100+2*fft%Nx, fft%Ny)
216 CALL jmtable(fft%Table,fft%TableSize,100+2*(fft%Nx+fft%Ny),fft%Nz)
218 IF(
PRESENT(code) ) code=0
221 SUBROUTINE gft_set_rcr_1d(Nx, FFT, code)
225 INTEGER,
INTENT(IN) :: Nx
228 TYPE(
gft_rcr),
INTENT(OUT) :: FFT
229 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
232 INTEGER,
DIMENSION(0:99) :: fact
234 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_rcr_1d"
239 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
240 fft%even_x = (mod(fft%Nx,2) == 0 )
241 IF( .NOT.fft%even_x )
CALL gft_error(spname//
": Error: Nx not even")
244 fft%TableSize = 100+2*fft%Nx
245 ALLOCATE(fft%Table(0:fft%TableSize-1))
247 fft%WorkSize = 2*fft%BF*fft%Nx
248 ALLOCATE(fft%Work(0:fft%WorkSize-1))
251 CALL jmfact(fft%Nx,fact,100, 0,nfact)
252 fft%Table(0:nfact-1) = fact(0:nfact-1)
255 CALL jmtable(fft%Table,fft%TableSize,100+0,fft%Nx)
257 IF(
PRESENT(code) ) code=0
260 SUBROUTINE gft_set_rcr_2d(Nx, Ny, FFT, code)
264 INTEGER,
INTENT(IN) :: Nx, Ny
267 TYPE(
gft_rcr),
INTENT(OUT) :: FFT
268 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
271 INTEGER,
DIMENSION(0:99) :: fact
272 INTEGER :: nfact, mfact
273 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_rcr_2d"
280 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
281 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: Ny < 1")
282 fft%even_x = (mod(fft%Nx,2) == 0); fft%even_y = (mod(fft%Ny,2) == 0)
283 IF( .NOT.fft%even_x .AND. .NOT.fft%even_y)
CALL gft_error(spname//
": Error: Nx or Ny not even")
286 fft%TableSize = 100+2*(fft%Nx + fft%Ny)
287 ALLOCATE(fft%Table(0:fft%TableSize-1))
289 fft%WorkSize = 4*fft%BF*max(fft%Nx, fft%Ny)
291 ALLOCATE(fft%Work(0:fft%WorkSize-1))
294 CALL jmfact(fft%Nx,fact,100, 0,nfact)
295 CALL jmfact(fft%Ny,fact,100,nfact,mfact)
296 fft%Table(0:mfact-1) = fact(0:mfact-1)
299 CALL jmtable(fft%Table,fft%TableSize,100+0 ,fft%Nx)
300 CALL jmtable(fft%Table,fft%TableSize,100+2*fft%Nx,fft%Ny)
302 IF(
PRESENT(code) ) code=0
305 SUBROUTINE gft_set_rcr_3d(Nx, Ny, Nz, FFT, code)
309 INTEGER,
INTENT(IN) :: Nx, Ny, Nz
312 TYPE(
gft_rcr),
INTENT(OUT) :: FFT
313 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
316 INTEGER,
DIMENSION(0:99) :: fact
317 INTEGER :: nfact, mfact, lfact
318 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_rcr_3d"
325 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
326 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: Ny < 1")
327 IF( fft%Nz < 1 )
CALL gft_error(spname//
": Error: Nz < 1")
328 fft%even_x = (mod(fft%Nx,2) == 0)
329 fft%even_y = (mod(fft%Ny,2) == 0)
330 fft%even_z = (mod(fft%Nz,2) == 0)
331 IF( .NOT.fft%even_x .AND. .NOT.fft%even_y .AND. .NOT.fft%even_z) &
332 CALL gft_error(spname//
": Error: Nx or Ny or Nz not even")
335 fft%TableSize = 100+2*(fft%Nx + fft%Ny + fft%Nz)
336 ALLOCATE(fft%Table(0:fft%TableSize-1))
338 fft%WorkSize = 4*fft%BF*max(fft%Nx, fft%Ny, fft%Nz)
340 ALLOCATE(fft%Work(0:fft%WorkSize-1))
343 CALL jmfact(fft%Nx,fact,100, 0,nfact)
344 CALL jmfact(fft%Ny,fact,100,nfact,mfact)
345 CALL jmfact(fft%Nz,fact,100,mfact,lfact)
346 fft%Table(0:lfact-1) = fact(0:lfact-1)
349 CALL jmtable(fft%Table,fft%TableSize,100+0 ,fft%Nx)
350 CALL jmtable(fft%Table,fft%TableSize,100+2*fft%Nx ,fft%Ny)
351 CALL jmtable(fft%Table,fft%TableSize,100+2*(fft%Nx+fft%Ny),fft%Nz)
353 IF(
PRESENT(code) ) code=0
356 SUBROUTINE gft_set_mcc(Nx, Ny, FFT, code)
360 INTEGER,
INTENT(IN) :: Nx, Ny
363 TYPE(
gft_mcc),
INTENT(OUT) :: FFT
364 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
367 INTEGER,
DIMENSION(0:99) :: fact
369 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_mcc"
375 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
376 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: Ny < 1")
379 fft%TableSize = 100+2*fft%Nx
380 ALLOCATE(fft%Table(0:fft%TableSize-1))
382 fft%WorkSize = 4*fft%BF*fft%Nx*fft%Ny
383 ALLOCATE(fft%Work(0:fft%WorkSize-1))
386 CALL jmfact(fft%Nx,fact,100,0,nfact)
387 fft%Table(0:nfact-1) = fact(0:nfact-1)
390 CALL jmtable(fft%Table,fft%TableSize,100+0,fft%Nx)
392 IF(
PRESENT(code) ) code=0
395 SUBROUTINE gft_set_mrcr(Nx, Ny, FFT, code)
399 INTEGER,
INTENT(IN) :: Nx, Ny
403 INTEGER,
OPTIONAL,
INTENT(OUT) :: code
406 INTEGER,
DIMENSION(0:99) :: fact
408 CHARACTER(LEN=*),
PARAMETER :: spname=
"GFT_set_mrcr"
415 IF( fft%Nx < 1 )
CALL gft_error(spname//
": Error: Nx < 1")
416 IF( fft%Ny < 1 )
CALL gft_error(spname//
": Error: Ny < 1")
417 fft%even_x = (mod(fft%Nx,2) == 0) ; fft%even_y = (mod(fft%Ny,2) == 0)
418 IF( .NOT.fft%even_x .AND. .NOT.fft%even_y )
CALL gft_error(spname//
": Error: Nx or Ny not even")
421 fft%TableSize = 100+2*fft%Nx
422 ALLOCATE(fft%Table(0:fft%TableSize-1))
424 fft%WorkSize = 2*fft%BF*fft%Nx*fft%Ny
425 ALLOCATE(fft%Work(0:fft%WorkSize-1))
428 CALL jmfact(fft%Nx,fact,100, 0,nfact)
429 fft%Table(0:nfact-1) = fact(0:nfact-1)
432 CALL jmtable(fft%Table,fft%TableSize,100+0,fft%Nx)
434 IF(
PRESENT(code) ) code=0