cprod.f 3.1 KB

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