proc.f 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. *DECK PROC
  2. SUBROUTINE PROC (ND, BD, NM1, BM1, NM2, BM2, NA, AA, X, Y, M, A,
  3. + B, C, D, W, U)
  4. C***BEGIN PROLOGUE PROC
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CBLKTR
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (PROD-S, PROC-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 BD,BM1,BM2 are arrays containing roots of certain B polynomials.
  15. C ND,NM1,NM2 are the lengths of the arrays BD,BM1,BM2 respectively.
  16. C AA Array containing scalar multipliers of the vector X.
  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,U are working arrays.
  22. C IS 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 PROC
  32. C
  33. DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
  34. 1 Y(*) ,D(*) ,W(*) ,BD(*) ,
  35. 2 BM1(*) ,BM2(*) ,AA(*) ,U(*)
  36. COMPLEX X ,Y ,A ,B ,
  37. 1 C ,D ,W ,U ,
  38. 2 DEN
  39. C***FIRST EXECUTABLE STATEMENT PROC
  40. DO 101 J=1,M
  41. W(J) = X(J)
  42. Y(J) = W(J)
  43. 101 CONTINUE
  44. MM = M-1
  45. ID = ND
  46. IBR = 0
  47. M1 = NM1
  48. M2 = NM2
  49. IA = NA
  50. 102 IF (IA) 105,105,103
  51. 103 RT = AA(IA)
  52. IF (ND .EQ. 0) RT = -RT
  53. IA = IA-1
  54. C
  55. C SCALAR MULTIPLICATION
  56. C
  57. DO 104 J=1,M
  58. Y(J) = RT*W(J)
  59. 104 CONTINUE
  60. 105 IF (ID) 125,125,106
  61. 106 RT = BD(ID)
  62. ID = ID-1
  63. IF (ID .EQ. 0) IBR = 1
  64. C
  65. C BEGIN SOLUTION TO SYSTEM
  66. C
  67. D(M) = A(M)/(B(M)-RT)
  68. W(M) = Y(M)/(B(M)-RT)
  69. DO 107 J=2,MM
  70. K = M-J
  71. DEN = B(K+1)-RT-C(K+1)*D(K+2)
  72. D(K+1) = A(K+1)/DEN
  73. W(K+1) = (Y(K+1)-C(K+1)*W(K+2))/DEN
  74. 107 CONTINUE
  75. DEN = B(1)-RT-C(1)*D(2)
  76. W(1) = (1.,0.)
  77. IF (ABS(DEN)) 108,109,108
  78. 108 W(1) = (Y(1)-C(1)*W(2))/DEN
  79. 109 DO 110 J=2,M
  80. W(J) = W(J)-D(J)*W(J-1)
  81. 110 CONTINUE
  82. IF (NA) 113,113,102
  83. 111 DO 112 J=1,M
  84. Y(J) = W(J)
  85. 112 CONTINUE
  86. IBR = 1
  87. GO TO 102
  88. 113 IF (M1) 114,114,115
  89. 114 IF (M2) 111,111,120
  90. 115 IF (M2) 117,117,116
  91. 116 IF (ABS(BM1(M1))-ABS(BM2(M2))) 120,120,117
  92. 117 IF (IBR) 118,118,119
  93. 118 IF (ABS(BM1(M1)-BD(ID))-ABS(BM1(M1)-RT)) 111,119,119
  94. 119 RT = RT-BM1(M1)
  95. M1 = M1-1
  96. GO TO 123
  97. 120 IF (IBR) 121,121,122
  98. 121 IF (ABS(BM2(M2)-BD(ID))-ABS(BM2(M2)-RT)) 111,122,122
  99. 122 RT = RT-BM2(M2)
  100. M2 = M2-1
  101. 123 DO 124 J=1,M
  102. Y(J) = Y(J)+RT*W(J)
  103. 124 CONTINUE
  104. GO TO 102
  105. 125 RETURN
  106. END