cprocp.f 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. *DECK CPROCP
  2. SUBROUTINE CPROCP (ND, BD, NM1, BM1, NM2, BM2, NA, AA, X, Y, M, A,
  3. + B, C, D, U, YY)
  4. C***BEGIN PROLOGUE CPROCP
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CBLKTR
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (CPRODP-S, CPROCP-C)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C CPROCP 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,U are work arrays.
  23. C ISGN determines whether or not a change in sign is made.
  24. C
  25. C***SEE ALSO CBLKTR
  26. C***ROUTINES CALLED (NONE)
  27. C***REVISION HISTORY (YYMMDD)
  28. C 801001 DATE WRITTEN
  29. C 890531 Changed all specific intrinsics to generic. (WRB)
  30. C 891214 Prologue converted to Version 4.0 format. (BAB)
  31. C 900402 Added TYPE section. (WRB)
  32. C***END PROLOGUE CPROCP
  33. C
  34. COMPLEX Y ,D ,U ,V ,
  35. 1 DEN ,BH ,YM ,AM ,
  36. 2 Y1 ,Y2 ,YH ,BD ,
  37. 3 CRT ,X ,A ,B ,C
  38. DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
  39. 1 Y(*) ,D(*) ,U(*) ,BD(*) ,
  40. 2 BM1(*) ,BM2(*) ,AA(*) ,YY(*)
  41. C***FIRST EXECUTABLE STATEMENT CPROCP
  42. DO 101 J=1,M
  43. Y(J) = X(J)
  44. 101 CONTINUE
  45. MM = M-1
  46. MM2 = M-2
  47. ID = ND
  48. M1 = NM1
  49. M2 = NM2
  50. IA = NA
  51. 102 IFLG = 0
  52. IF (ID) 111,111,103
  53. 103 CRT = BD(ID)
  54. ID = ID-1
  55. IFLG = 1
  56. C
  57. C BEGIN SOLUTION TO SYSTEM
  58. C
  59. BH = B(M)-CRT
  60. YM = Y(M)
  61. DEN = B(1)-CRT
  62. D(1) = C(1)/DEN
  63. U(1) = A(1)/DEN
  64. Y(1) = Y(1)/DEN
  65. V = C(M)
  66. IF (MM2-2) 106,104,104
  67. 104 DO 105 J=2,MM2
  68. DEN = B(J)-CRT-A(J)*D(J-1)
  69. D(J) = C(J)/DEN
  70. U(J) = -A(J)*U(J-1)/DEN
  71. Y(J) = (Y(J)-A(J)*Y(J-1))/DEN
  72. BH = BH-V*U(J-1)
  73. YM = YM-V*Y(J-1)
  74. V = -V*D(J-1)
  75. 105 CONTINUE
  76. 106 DEN = B(M-1)-CRT-A(M-1)*D(M-2)
  77. D(M-1) = (C(M-1)-A(M-1)*U(M-2))/DEN
  78. Y(M-1) = (Y(M-1)-A(M-1)*Y(M-2))/DEN
  79. AM = A(M)-V*D(M-2)
  80. BH = BH-V*U(M-2)
  81. YM = YM-V*Y(M-2)
  82. DEN = BH-AM*D(M-1)
  83. IF (ABS(DEN)) 107,108,107
  84. 107 Y(M) = (YM-AM*Y(M-1))/DEN
  85. GO TO 109
  86. 108 Y(M) = (1.,0.)
  87. 109 Y(M-1) = Y(M-1)-D(M-1)*Y(M)
  88. DO 110 J=2,MM
  89. K = M-J
  90. Y(K) = Y(K)-D(K)*Y(K+1)-U(K)*Y(M)
  91. 110 CONTINUE
  92. 111 IF (M1) 112,112,114
  93. 112 IF (M2) 123,123,113
  94. 113 RT = BM2(M2)
  95. M2 = M2-1
  96. GO TO 119
  97. 114 IF (M2) 115,115,116
  98. 115 RT = BM1(M1)
  99. M1 = M1-1
  100. GO TO 119
  101. 116 IF (ABS(BM1(M1))-ABS(BM2(M2))) 118,118,117
  102. 117 RT = BM1(M1)
  103. M1 = M1-1
  104. GO TO 119
  105. 118 RT = BM2(M2)
  106. M2 = M2-1
  107. C
  108. C MATRIX MULTIPLICATION
  109. C
  110. 119 YH = Y(1)
  111. Y1 = (B(1)-RT)*Y(1)+C(1)*Y(2)+A(1)*Y(M)
  112. IF (MM-2) 122,120,120
  113. 120 DO 121 J=2,MM
  114. Y2 = A(J)*Y(J-1)+(B(J)-RT)*Y(J)+C(J)*Y(J+1)
  115. Y(J-1) = Y1
  116. Y1 = Y2
  117. 121 CONTINUE
  118. 122 Y(M) = A(M)*Y(M-1)+(B(M)-RT)*Y(M)+C(M)*YH
  119. Y(M-1) = Y1
  120. IFLG = 1
  121. GO TO 102
  122. 123 IF (IA) 126,126,124
  123. 124 RT = AA(IA)
  124. IA = IA-1
  125. IFLG = 1
  126. C
  127. C SCALAR MULTIPLICATION
  128. C
  129. DO 125 J=1,M
  130. Y(J) = RT*Y(J)
  131. 125 CONTINUE
  132. 126 IF (IFLG) 127,127,102
  133. 127 RETURN
  134. END