cmpcsg.f 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. *DECK CMPCSG
  2. SUBROUTINE CMPCSG (N, IJUMP, FNUM, FDEN, A)
  3. C***BEGIN PROLOGUE CMPCSG
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to CMGNBN
  6. C***LIBRARY SLATEC
  7. C***TYPE COMPLEX (COSGEN-S, CMPCSG-C)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C This subroutine computes required cosine values in ascending
  12. C order. When IJUMP .GT. 1 the routine computes values
  13. C
  14. C 2*COS(J*PI/L) , J=1,2,...,L and J .NE. 0(MOD N/IJUMP+1)
  15. C
  16. C where L = IJUMP*(N/IJUMP+1).
  17. C
  18. C
  19. C when IJUMP = 1 it computes
  20. C
  21. C 2*COS((J-FNUM)*PI/(N+FDEN)) , J=1, 2, ... ,N
  22. C
  23. C where
  24. C FNUM = 0.5, FDEN = 0.0, for regular reduction values.
  25. C FNUM = 0.0, FDEN = 1.0, for B-R and C-R when ISTAG = 1
  26. C FNUM = 0.0, FDEN = 0.5, for B-R and C-R when ISTAG = 2
  27. C FNUM = 0.5, FDEN = 0.5, for B-R and C-R when ISTAG = 2
  28. C in CMPOSN only.
  29. C
  30. C***SEE ALSO CMGNBN
  31. C***ROUTINES CALLED PIMACH
  32. C***REVISION HISTORY (YYMMDD)
  33. C 801001 DATE WRITTEN
  34. C 890531 Changed all specific intrinsics to generic. (WRB)
  35. C 891214 Prologue converted to Version 4.0 format. (BAB)
  36. C 900402 Added TYPE section. (WRB)
  37. C***END PROLOGUE CMPCSG
  38. COMPLEX A
  39. DIMENSION A(*)
  40. C
  41. C
  42. C***FIRST EXECUTABLE STATEMENT CMPCSG
  43. PI = PIMACH(DUM)
  44. IF (N .EQ. 0) GO TO 105
  45. IF (IJUMP .EQ. 1) GO TO 103
  46. K3 = N/IJUMP+1
  47. K4 = K3-1
  48. PIBYN = PI/(N+IJUMP)
  49. DO 102 K=1,IJUMP
  50. K1 = (K-1)*K3
  51. K5 = (K-1)*K4
  52. DO 101 I=1,K4
  53. X = K1+I
  54. K2 = K5+I
  55. A(K2) = CMPLX(-2.*COS(X*PIBYN),0.)
  56. 101 CONTINUE
  57. 102 CONTINUE
  58. GO TO 105
  59. 103 CONTINUE
  60. NP1 = N+1
  61. Y = PI/(N+FDEN)
  62. DO 104 I=1,N
  63. X = NP1-I-FNUM
  64. A(I) = CMPLX(2.*COS(X*Y),0.)
  65. 104 CONTINUE
  66. 105 CONTINUE
  67. RETURN
  68. END