prod.f 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. *DECK PROD
  2. SUBROUTINE PROD (ND, BD, NM1, BM1, NM2, BM2, NA, AA, X, Y, M, A,
  3. + B, C, D, W, U)
  4. C***BEGIN PROLOGUE PROD
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to BLKTRI
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (PROD-S, PROC-C)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C PROD applies a sequence of matrix operations to the vector X and
  13. C stores the result in Y.
  14. C
  15. C BD,BM1,BM2 are arrays containing roots of certain B polynomials.
  16. C ND,NM1,NM2 are the lengths of the arrays BD,BM1,BM2 respectively.
  17. C AA Array containing scalar multipliers of the vector X.
  18. C NA is the length of the array AA.
  19. C X,Y The matrix operations are applied to X and the result is Y.
  20. C A,B,C are arrays which contain the tridiagonal matrix.
  21. C M is the order of the matrix.
  22. C D,W,U are working arrays.
  23. C IS determines whether or not a change in sign is made.
  24. C
  25. C***SEE ALSO BLKTRI
  26. C***ROUTINES CALLED (NONE)
  27. C***REVISION HISTORY (YYMMDD)
  28. C 801001 DATE WRITTEN
  29. C 891214 Prologue converted to Version 4.0 format. (BAB)
  30. C 900402 Added TYPE section. (WRB)
  31. C***END PROLOGUE PROD
  32. C
  33. DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
  34. 1 Y(*) ,D(*) ,W(*) ,BD(*) ,
  35. 2 BM1(*) ,BM2(*) ,AA(*) ,U(*)
  36. C***FIRST EXECUTABLE STATEMENT PROD
  37. DO 101 J=1,M
  38. W(J) = X(J)
  39. Y(J) = W(J)
  40. 101 CONTINUE
  41. MM = M-1
  42. ID = ND
  43. IBR = 0
  44. M1 = NM1
  45. M2 = NM2
  46. IA = NA
  47. 102 IF (IA) 105,105,103
  48. 103 RT = AA(IA)
  49. IF (ND .EQ. 0) RT = -RT
  50. IA = IA-1
  51. C
  52. C SCALAR MULTIPLICATION
  53. C
  54. DO 104 J=1,M
  55. Y(J) = RT*W(J)
  56. 104 CONTINUE
  57. 105 IF (ID) 125,125,106
  58. 106 RT = BD(ID)
  59. ID = ID-1
  60. IF (ID .EQ. 0) IBR = 1
  61. C
  62. C BEGIN SOLUTION TO SYSTEM
  63. C
  64. D(M) = A(M)/(B(M)-RT)
  65. W(M) = Y(M)/(B(M)-RT)
  66. DO 107 J=2,MM
  67. K = M-J
  68. DEN = B(K+1)-RT-C(K+1)*D(K+2)
  69. D(K+1) = A(K+1)/DEN
  70. W(K+1) = (Y(K+1)-C(K+1)*W(K+2))/DEN
  71. 107 CONTINUE
  72. DEN = B(1)-RT-C(1)*D(2)
  73. W(1) = 1.
  74. IF (DEN) 108,109,108
  75. 108 W(1) = (Y(1)-C(1)*W(2))/DEN
  76. 109 DO 110 J=2,M
  77. W(J) = W(J)-D(J)*W(J-1)
  78. 110 CONTINUE
  79. IF (NA) 113,113,102
  80. 111 DO 112 J=1,M
  81. Y(J) = W(J)
  82. 112 CONTINUE
  83. IBR = 1
  84. GO TO 102
  85. 113 IF (M1) 114,114,115
  86. 114 IF (M2) 111,111,120
  87. 115 IF (M2) 117,117,116
  88. 116 IF (ABS(BM1(M1))-ABS(BM2(M2))) 120,120,117
  89. 117 IF (IBR) 118,118,119
  90. 118 IF (ABS(BM1(M1)-BD(ID))-ABS(BM1(M1)-RT)) 111,119,119
  91. 119 RT = RT-BM1(M1)
  92. M1 = M1-1
  93. GO TO 123
  94. 120 IF (IBR) 121,121,122
  95. 121 IF (ABS(BM2(M2)-BD(ID))-ABS(BM2(M2)-RT)) 111,122,122
  96. 122 RT = RT-BM2(M2)
  97. M2 = M2-1
  98. 123 DO 124 J=1,M
  99. Y(J) = Y(J)+RT*W(J)
  100. 124 CONTINUE
  101. GO TO 102
  102. 125 RETURN
  103. END