cproc.f 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. *DECK CPROC
  2. SUBROUTINE CPROC (ND, BD, NM1, BM1, NM2, BM2, NA, AA, X, Y, M, A,
  3. + B, C, D, W, YY)
  4. C***BEGIN PROLOGUE CPROC
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CBLKTR
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (CPROD-S, CPROC-C)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C PROC applies a sequence of matrix operations to the vector X and
  13. C stores the result in Y.
  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,Y The matrix operations are applied to X and the result is Y.
  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 are work arrays.
  22. C ISGN determines whether or not a change in sign is made.
  23. C
  24. C***SEE ALSO CBLKTR
  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 CPROC
  32. C
  33. COMPLEX Y ,D ,W ,BD ,
  34. 1 CRT ,DEN ,Y1 ,Y2 ,
  35. 2 X ,A ,B ,C
  36. DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
  37. 1 Y(*) ,D(*) ,W(*) ,BD(*) ,
  38. 2 BM1(*) ,BM2(*) ,AA(*) ,YY(*)
  39. C***FIRST EXECUTABLE STATEMENT CPROC
  40. DO 101 J=1,M
  41. Y(J) = X(J)
  42. 101 CONTINUE
  43. MM = M-1
  44. ID = ND
  45. M1 = NM1
  46. M2 = NM2
  47. IA = NA
  48. 102 IFLG = 0
  49. IF (ID) 109,109,103
  50. 103 CRT = BD(ID)
  51. ID = ID-1
  52. C
  53. C BEGIN SOLUTION TO SYSTEM
  54. C
  55. D(M) = A(M)/(B(M)-CRT)
  56. W(M) = Y(M)/(B(M)-CRT)
  57. DO 104 J=2,MM
  58. K = M-J
  59. DEN = B(K+1)-CRT-C(K+1)*D(K+2)
  60. D(K+1) = A(K+1)/DEN
  61. W(K+1) = (Y(K+1)-C(K+1)*W(K+2))/DEN
  62. 104 CONTINUE
  63. DEN = B(1)-CRT-C(1)*D(2)
  64. IF (ABS(DEN)) 105,106,105
  65. 105 Y(1) = (Y(1)-C(1)*W(2))/DEN
  66. GO TO 107
  67. 106 Y(1) = (1.,0.)
  68. 107 DO 108 J=2,M
  69. Y(J) = W(J)-D(J)*Y(J-1)
  70. 108 CONTINUE
  71. 109 IF (M1) 110,110,112
  72. 110 IF (M2) 121,121,111
  73. 111 RT = BM2(M2)
  74. M2 = M2-1
  75. GO TO 117
  76. 112 IF (M2) 113,113,114
  77. 113 RT = BM1(M1)
  78. M1 = M1-1
  79. GO TO 117
  80. 114 IF (ABS(BM1(M1))-ABS(BM2(M2))) 116,116,115
  81. 115 RT = BM1(M1)
  82. M1 = M1-1
  83. GO TO 117
  84. 116 RT = BM2(M2)
  85. M2 = M2-1
  86. 117 Y1 = (B(1)-RT)*Y(1)+C(1)*Y(2)
  87. IF (MM-2) 120,118,118
  88. C
  89. C MATRIX MULTIPLICATION
  90. C
  91. 118 DO 119 J=2,MM
  92. Y2 = A(J)*Y(J-1)+(B(J)-RT)*Y(J)+C(J)*Y(J+1)
  93. Y(J-1) = Y1
  94. Y1 = Y2
  95. 119 CONTINUE
  96. 120 Y(M) = A(M)*Y(M-1)+(B(M)-RT)*Y(M)
  97. Y(M-1) = Y1
  98. IFLG = 1
  99. GO TO 102
  100. 121 IF (IA) 124,124,122
  101. 122 RT = AA(IA)
  102. IA = IA-1
  103. IFLG = 1
  104. C
  105. C SCALAR MULTIPLICATION
  106. C
  107. DO 123 J=1,M
  108. Y(J) = RT*Y(J)
  109. 123 CONTINUE
  110. 124 IF (IFLG) 125,125,102
  111. 125 RETURN
  112. END