ezfft1.f 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. *DECK EZFFT1
  2. SUBROUTINE EZFFT1 (N, WA, IFAC)
  3. C***BEGIN PROLOGUE EZFFT1
  4. C***SUBSIDIARY
  5. C***PURPOSE EZFFTI calls EZFFT1 with appropriate work array
  6. C partitioning.
  7. C***LIBRARY SLATEC (FFTPACK)
  8. C***TYPE SINGLE PRECISION (EZFFT1-S)
  9. C***AUTHOR Swarztrauber, P. N., (NCAR)
  10. C***ROUTINES CALLED (NONE)
  11. C***REVISION HISTORY (YYMMDD)
  12. C 790601 DATE WRITTEN
  13. C 830401 Modified to use SLATEC library source file format.
  14. C 860115 Modified by Ron Boisvert to adhere to Fortran 77 by
  15. C (a) changing dummy array size declarations (1) to (*),
  16. C (b) changing references to intrinsic function FLOAT
  17. C to REAL, and
  18. C (c) changing definition of variable TPI by using
  19. C FORTRAN intrinsic function ATAN instead of a DATA
  20. C statement.
  21. C 881128 Modified by Dick Valent to meet prologue standards.
  22. C 890531 Changed all specific intrinsics to generic. (WRB)
  23. C 890531 REVISION DATE from Version 3.2
  24. C 891214 Prologue converted to Version 4.0 format. (BAB)
  25. C 900402 Added TYPE section. (WRB)
  26. C***END PROLOGUE EZFFT1
  27. DIMENSION WA(*), IFAC(*), NTRYH(4)
  28. SAVE NTRYH
  29. DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/
  30. C***FIRST EXECUTABLE STATEMENT EZFFT1
  31. TPI = 8.*ATAN(1.)
  32. NL = N
  33. NF = 0
  34. J = 0
  35. 101 J = J+1
  36. IF (J-4) 102,102,103
  37. 102 NTRY = NTRYH(J)
  38. GO TO 104
  39. 103 NTRY = NTRY+2
  40. 104 NQ = NL/NTRY
  41. NR = NL-NTRY*NQ
  42. IF (NR) 101,105,101
  43. 105 NF = NF+1
  44. IFAC(NF+2) = NTRY
  45. NL = NQ
  46. IF (NTRY .NE. 2) GO TO 107
  47. IF (NF .EQ. 1) GO TO 107
  48. DO 106 I=2,NF
  49. IB = NF-I+2
  50. IFAC(IB+2) = IFAC(IB+1)
  51. 106 CONTINUE
  52. IFAC(3) = 2
  53. 107 IF (NL .NE. 1) GO TO 104
  54. IFAC(1) = N
  55. IFAC(2) = NF
  56. ARGH = TPI/N
  57. IS = 0
  58. NFM1 = NF-1
  59. L1 = 1
  60. IF (NFM1 .EQ. 0) RETURN
  61. DO 111 K1=1,NFM1
  62. IP = IFAC(K1+2)
  63. L2 = L1*IP
  64. IDO = N/L2
  65. IPM = IP-1
  66. ARG1 = L1*ARGH
  67. CH1 = 1.
  68. SH1 = 0.
  69. DCH1 = COS(ARG1)
  70. DSH1 = SIN(ARG1)
  71. DO 110 J=1,IPM
  72. CH1H = DCH1*CH1-DSH1*SH1
  73. SH1 = DCH1*SH1+DSH1*CH1
  74. CH1 = CH1H
  75. I = IS+2
  76. WA(I-1) = CH1
  77. WA(I) = SH1
  78. IF (IDO .LT. 5) GO TO 109
  79. DO 108 II=5,IDO,2
  80. I = I+2
  81. WA(I-1) = CH1*WA(I-3)-SH1*WA(I-2)
  82. WA(I) = CH1*WA(I-2)+SH1*WA(I-3)
  83. 108 CONTINUE
  84. 109 IS = IS+IDO
  85. 110 CONTINUE
  86. L1 = L2
  87. 111 CONTINUE
  88. RETURN
  89. END