radf3.f 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. *DECK RADF3
  2. SUBROUTINE RADF3 (IDO, L1, CC, CH, WA1, WA2)
  3. C***BEGIN PROLOGUE RADF3
  4. C***SUBSIDIARY
  5. C***PURPOSE Calculate the fast Fourier transform of subvectors of
  6. C length three.
  7. C***LIBRARY SLATEC (FFTPACK)
  8. C***TYPE SINGLE PRECISION (RADF3-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 definition of variable TAUI by using
  17. C FORTRAN intrinsic function SQRT instead of a DATA
  18. C statement.
  19. C 881128 Modified by Dick Valent to meet prologue standards.
  20. C 890831 Modified array declarations. (WRB)
  21. C 891214 Prologue converted to Version 4.0 format. (BAB)
  22. C 900402 Added TYPE section. (WRB)
  23. C***END PROLOGUE RADF3
  24. DIMENSION CH(IDO,3,*), CC(IDO,L1,3), WA1(*), WA2(*)
  25. C***FIRST EXECUTABLE STATEMENT RADF3
  26. TAUR = -.5
  27. TAUI = .5*SQRT(3.)
  28. DO 101 K=1,L1
  29. CR2 = CC(1,K,2)+CC(1,K,3)
  30. CH(1,1,K) = CC(1,K,1)+CR2
  31. CH(1,3,K) = TAUI*(CC(1,K,3)-CC(1,K,2))
  32. CH(IDO,2,K) = CC(1,K,1)+TAUR*CR2
  33. 101 CONTINUE
  34. IF (IDO .EQ. 1) RETURN
  35. IDP2 = IDO+2
  36. IF((IDO-1)/2.LT.L1) GO TO 104
  37. DO 103 K=1,L1
  38. CDIR$ IVDEP
  39. DO 102 I=3,IDO,2
  40. IC = IDP2-I
  41. DR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
  42. DI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
  43. DR3 = WA2(I-2)*CC(I-1,K,3)+WA2(I-1)*CC(I,K,3)
  44. DI3 = WA2(I-2)*CC(I,K,3)-WA2(I-1)*CC(I-1,K,3)
  45. CR2 = DR2+DR3
  46. CI2 = DI2+DI3
  47. CH(I-1,1,K) = CC(I-1,K,1)+CR2
  48. CH(I,1,K) = CC(I,K,1)+CI2
  49. TR2 = CC(I-1,K,1)+TAUR*CR2
  50. TI2 = CC(I,K,1)+TAUR*CI2
  51. TR3 = TAUI*(DI2-DI3)
  52. TI3 = TAUI*(DR3-DR2)
  53. CH(I-1,3,K) = TR2+TR3
  54. CH(IC-1,2,K) = TR2-TR3
  55. CH(I,3,K) = TI2+TI3
  56. CH(IC,2,K) = TI3-TI2
  57. 102 CONTINUE
  58. 103 CONTINUE
  59. RETURN
  60. 104 DO 106 I=3,IDO,2
  61. IC = IDP2-I
  62. CDIR$ IVDEP
  63. DO 105 K=1,L1
  64. DR2 = WA1(I-2)*CC(I-1,K,2)+WA1(I-1)*CC(I,K,2)
  65. DI2 = WA1(I-2)*CC(I,K,2)-WA1(I-1)*CC(I-1,K,2)
  66. DR3 = WA2(I-2)*CC(I-1,K,3)+WA2(I-1)*CC(I,K,3)
  67. DI3 = WA2(I-2)*CC(I,K,3)-WA2(I-1)*CC(I-1,K,3)
  68. CR2 = DR2+DR3
  69. CI2 = DI2+DI3
  70. CH(I-1,1,K) = CC(I-1,K,1)+CR2
  71. CH(I,1,K) = CC(I,K,1)+CI2
  72. TR2 = CC(I-1,K,1)+TAUR*CR2
  73. TI2 = CC(I,K,1)+TAUR*CI2
  74. TR3 = TAUI*(DI2-DI3)
  75. TI3 = TAUI*(DR3-DR2)
  76. CH(I-1,3,K) = TR2+TR3
  77. CH(IC-1,2,K) = TR2-TR3
  78. CH(I,3,K) = TI2+TI3
  79. CH(IC,2,K) = TI3-TI2
  80. 105 CONTINUE
  81. 106 CONTINUE
  82. RETURN
  83. END