cprodp.f 3.8 KB

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