la05bs.f 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. *DECK LA05BS
  2. SUBROUTINE LA05BS (A, IND, IA, N, IP, IW, W, G, B, TRANS)
  3. C***BEGIN PROLOGUE LA05BS
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to SPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (LA05BS-S, LA05BD-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C THIS SUBPROGRAM IS A SLIGHT MODIFICATION OF A SUBPROGRAM
  12. C FROM THE C. 1979 AERE HARWELL LIBRARY. THE NAME OF THE
  13. C CORRESPONDING HARWELL CODE CAN BE OBTAINED BY DELETING
  14. C THE FINAL LETTER =S= IN THE NAMES USED HERE.
  15. C REVISED SEP. 13, 1979.
  16. C
  17. C ROYALTIES HAVE BEEN PAID TO AERE-UK FOR USE OF THEIR CODES
  18. C IN THE PACKAGE GIVEN HERE. ANY PRIMARY USAGE OF THE HARWELL
  19. C SUBROUTINES REQUIRES A ROYALTY AGREEMENT AND PAYMENT BETWEEN
  20. C THE USER AND AERE-UK. ANY USAGE OF THE SANDIA WRITTEN CODES
  21. C SPLP( ) (WHICH USES THE HARWELL SUBROUTINES) IS PERMITTED.
  22. C
  23. C IP(I,1),IP(I,2) POINT TO START OF ROW/COLUMN I OF U.
  24. C IW(I,1),IW(I,2) ARE LENGTHS OF ROW/COL I OF U.
  25. C IW(.,3),IW(.,4) HOLD ROW/COL NUMBERS IN PIVOTAL ORDER.
  26. C
  27. C***SEE ALSO SPLP
  28. C***ROUTINES CALLED XERMSG, XSETUN
  29. C***COMMON BLOCKS LA05DS
  30. C***REVISION HISTORY (YYMMDD)
  31. C 811215 DATE WRITTEN
  32. C 890531 Changed all specific intrinsics to generic. (WRB)
  33. C 890831 Modified array declarations. (WRB)
  34. C 891214 Prologue converted to Version 4.0 format. (BAB)
  35. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  36. C 900402 Added TYPE section. (WRB)
  37. C 920410 Corrected second dimension on IW declaration. (WRB)
  38. C***END PROLOGUE LA05BS
  39. REAL A(IA), B(*), AM, W(*), G, SMALL
  40. LOGICAL TRANS
  41. INTEGER IND(IA,2), IW(N,8)
  42. INTEGER IP(N,2)
  43. COMMON /LA05DS/ SMALL, LP, LENL, LENU, NCP, LROW, LCOL
  44. C***FIRST EXECUTABLE STATEMENT LA05BS
  45. IF (G.LT.0.) GO TO 130
  46. KLL = IA - LENL + 1
  47. IF (TRANS) GO TO 80
  48. C
  49. C MULTIPLY VECTOR BY INVERSE OF L
  50. IF (LENL.LE.0) GO TO 20
  51. L1 = IA + 1
  52. DO 10 KK=1,LENL
  53. K = L1 - KK
  54. I = IND(K,1)
  55. IF (B(I).EQ.0.) GO TO 10
  56. J = IND(K,2)
  57. B(J) = B(J) + A(K)*B(I)
  58. 10 CONTINUE
  59. 20 DO 30 I=1,N
  60. W(I) = B(I)
  61. B(I) = 0.
  62. 30 CONTINUE
  63. C
  64. C MULTIPLY VECTOR BY INVERSE OF U
  65. N1 = N + 1
  66. DO 70 II=1,N
  67. I = N1 - II
  68. I = IW(I,3)
  69. AM = W(I)
  70. KP = IP(I,1)
  71. IF (KP.GT.0) GO TO 50
  72. KP = -KP
  73. IP(I,1) = KP
  74. NZ = IW(I,1)
  75. KL = KP - 1 + NZ
  76. K2 = KP + 1
  77. DO 40 K=K2,KL
  78. J = IND(K,2)
  79. AM = AM - A(K)*B(J)
  80. 40 CONTINUE
  81. 50 IF (AM.EQ.0.) GO TO 70
  82. J = IND(KP,2)
  83. B(J) = AM/A(KP)
  84. KPC = IP(J,2)
  85. KL = IW(J,2) + KPC - 1
  86. IF (KL.EQ.KPC) GO TO 70
  87. K2 = KPC + 1
  88. DO 60 K=K2,KL
  89. I = IND(K,1)
  90. IP(I,1) = -ABS(IP(I,1))
  91. 60 CONTINUE
  92. 70 CONTINUE
  93. GO TO 140
  94. C
  95. C MULTIPLY VECTOR BY INVERSE OF TRANSPOSE OF U
  96. 80 DO 90 I=1,N
  97. W(I) = B(I)
  98. B(I) = 0.
  99. 90 CONTINUE
  100. DO 110 II=1,N
  101. I = IW(II,4)
  102. AM = W(I)
  103. IF (AM.EQ.0.) GO TO 110
  104. J = IW(II,3)
  105. KP = IP(J,1)
  106. AM = AM/A(KP)
  107. B(J) = AM
  108. KL = IW(J,1) + KP - 1
  109. IF (KP.EQ.KL) GO TO 110
  110. K2 = KP + 1
  111. DO 100 K=K2,KL
  112. I = IND(K,2)
  113. W(I) = W(I) - AM*A(K)
  114. 100 CONTINUE
  115. 110 CONTINUE
  116. C
  117. C MULTIPLY VECTOR BY INVERSE OF TRANSPOSE OF L
  118. IF (KLL.GT.IA) RETURN
  119. DO 120 K=KLL,IA
  120. J = IND(K,2)
  121. IF (B(J).EQ.0.) GO TO 120
  122. I = IND(K,1)
  123. B(I) = B(I) + A(K)*B(J)
  124. 120 CONTINUE
  125. GO TO 140
  126. C
  127. 130 CALL XSETUN(LP)
  128. IF (LP .GT. 0) CALL XERMSG ('SLATEC', 'LA05BS',
  129. + 'EARLIER ENTRY GAVE ERROR RETURN.', -8, 2)
  130. 140 RETURN
  131. END