cosgen.f 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. *DECK COSGEN
  2. SUBROUTINE COSGEN (N, IJUMP, FNUM, FDEN, A)
  3. C***BEGIN PROLOGUE COSGEN
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to GENBUN
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (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 POISN2 only.
  29. C
  30. C***SEE ALSO GENBUN
  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 COSGEN
  38. DIMENSION A(*)
  39. C
  40. C
  41. C***FIRST EXECUTABLE STATEMENT COSGEN
  42. PI = PIMACH(DUM)
  43. IF (N .EQ. 0) GO TO 105
  44. IF (IJUMP .EQ. 1) GO TO 103
  45. K3 = N/IJUMP+1
  46. K4 = K3-1
  47. PIBYN = PI/(N+IJUMP)
  48. DO 102 K=1,IJUMP
  49. K1 = (K-1)*K3
  50. K5 = (K-1)*K4
  51. DO 101 I=1,K4
  52. X = K1+I
  53. K2 = K5+I
  54. A(K2) = -2.*COS(X*PIBYN)
  55. 101 CONTINUE
  56. 102 CONTINUE
  57. GO TO 105
  58. 103 CONTINUE
  59. NP1 = N+1
  60. Y = PI/(N+FDEN)
  61. DO 104 I=1,N
  62. X = NP1-I-FNUM
  63. A(I) = 2.*COS(X*Y)
  64. 104 CONTINUE
  65. 105 CONTINUE
  66. RETURN
  67. END