prodp.f 3.2 KB

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