u12ls.f 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. *DECK U12LS
  2. SUBROUTINE U12LS (A, MDA, M, N, B, MDB, NB, MODE, KRANK, RNORM, H,
  3. + W, IC, IR)
  4. C***BEGIN PROLOGUE U12LS
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to LLSIA
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (U12LS-S, DU12LS-D)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C Given the Householder QR factorization of A, this
  13. C subroutine solves the system AX=B. If the system
  14. C is of reduced rank, this routine returns a solution
  15. C according to the selected mode.
  16. C
  17. C Note - If MODE.NE.2, W is never accessed.
  18. C
  19. C***SEE ALSO LLSIA
  20. C***ROUTINES CALLED SAXPY, SDOT, SNRM2, SSWAP
  21. C***REVISION HISTORY (YYMMDD)
  22. C 810801 DATE WRITTEN
  23. C 890531 Changed all specific intrinsics to generic. (WRB)
  24. C 890831 Modified array declarations. (WRB)
  25. C 891214 Prologue converted to Version 4.0 format. (BAB)
  26. C 900328 Added TYPE section. (WRB)
  27. C***END PROLOGUE U12LS
  28. DIMENSION A(MDA,*),B(MDB,*),RNORM(*),H(*),W(*)
  29. INTEGER IC(*),IR(*)
  30. C***FIRST EXECUTABLE STATEMENT U12LS
  31. K=KRANK
  32. KP1=K+1
  33. C
  34. C RANK=0
  35. C
  36. IF(K.GT.0) GO TO 410
  37. DO 404 JB=1,NB
  38. RNORM(JB)=SNRM2(M,B(1,JB),1)
  39. 404 CONTINUE
  40. DO 406 JB=1,NB
  41. DO 406 I=1,N
  42. B(I,JB)=0.0
  43. 406 CONTINUE
  44. RETURN
  45. C
  46. C REORDER B TO REFLECT ROW INTERCHANGES
  47. C
  48. 410 CONTINUE
  49. I=0
  50. 412 I=I+1
  51. IF(I.EQ.M) GO TO 418
  52. J=IR(I)
  53. IF(J.EQ.I) GO TO 412
  54. IF(J.LT.0) GO TO 412
  55. IR(I)=-IR(I)
  56. DO 413 JB=1,NB
  57. RNORM(JB)=B(I,JB)
  58. 413 CONTINUE
  59. IJ=I
  60. 414 DO 415 JB=1,NB
  61. B(IJ,JB)=B(J,JB)
  62. 415 CONTINUE
  63. IJ=J
  64. J=IR(IJ)
  65. IR(IJ)=-IR(IJ)
  66. IF(J.NE.I) GO TO 414
  67. DO 416 JB=1,NB
  68. B(IJ,JB)=RNORM(JB)
  69. 416 CONTINUE
  70. GO TO 412
  71. 418 CONTINUE
  72. DO 420 I=1,M
  73. IR(I)=ABS(IR(I))
  74. 420 CONTINUE
  75. C
  76. C APPLY HOUSEHOLDER TRANSFORMATIONS TO B
  77. C
  78. DO 430 J=1,K
  79. TT=A(J,J)
  80. A(J,J)=H(J)
  81. DO 425 I=1,NB
  82. BB=-SDOT(M-J+1,A(J,J),1,B(J,I),1)/H(J)
  83. CALL SAXPY(M-J+1,BB,A(J,J),1,B(J,I),1)
  84. 425 CONTINUE
  85. A(J,J)=TT
  86. 430 CONTINUE
  87. C
  88. C FIND NORMS OF RESIDUAL VECTOR(S)..(BEFORE OVERWRITE B)
  89. C
  90. DO 440 JB=1,NB
  91. RNORM(JB)=SNRM2((M-K),B(KP1,JB),1)
  92. 440 CONTINUE
  93. C
  94. C BACK SOLVE UPPER TRIANGULAR R
  95. C
  96. I=K
  97. 442 DO 444 JB=1,NB
  98. B(I,JB)=B(I,JB)/A(I,I)
  99. 444 CONTINUE
  100. IF(I.EQ.1) GO TO 450
  101. IM1=I-1
  102. DO 448 JB=1,NB
  103. CALL SAXPY(IM1,-B(I,JB),A(1,I),1,B(1,JB),1)
  104. 448 CONTINUE
  105. I=IM1
  106. GO TO 442
  107. 450 CONTINUE
  108. C
  109. C RANK LT N
  110. C
  111. C TRUNCATED SOLUTION
  112. C
  113. IF(K.EQ.N) GO TO 480
  114. DO 460 JB=1,NB
  115. DO 460 I=KP1,N
  116. B(I,JB)=0.0
  117. 460 CONTINUE
  118. IF(MODE.EQ.1) GO TO 480
  119. C
  120. C MINIMAL LENGTH SOLUTION
  121. C
  122. NMK=N-K
  123. DO 470 JB=1,NB
  124. DO 465 I=1,K
  125. TT=-SDOT(NMK,A(I,KP1),MDA,B(KP1,JB),1)/W(I)
  126. TT=TT-B(I,JB)
  127. CALL SAXPY(NMK,TT,A(I,KP1),MDA,B(KP1,JB),1)
  128. B(I,JB)=B(I,JB)+TT*W(I)
  129. 465 CONTINUE
  130. 470 CONTINUE
  131. C
  132. C
  133. C REORDER B TO REFLECT COLUMN INTERCHANGES
  134. C
  135. 480 CONTINUE
  136. I=0
  137. 482 I=I+1
  138. IF(I.EQ.N) GO TO 488
  139. J=IC(I)
  140. IF(J.EQ.I) GO TO 482
  141. IF(J.LT.0) GO TO 482
  142. IC(I)=-IC(I)
  143. 484 CALL SSWAP(NB,B(J,1),MDB,B(I,1),MDB)
  144. IJ=IC(J)
  145. IC(J)=-IC(J)
  146. J=IJ
  147. IF(J.EQ.I) GO TO 482
  148. GO TO 484
  149. 488 CONTINUE
  150. DO 490 I=1,N
  151. IC(I)=ABS(IC(I))
  152. 490 CONTINUE
  153. C
  154. C SOLUTION VECTORS ARE IN FIRST N ROWS OF B(,)
  155. C
  156. RETURN
  157. END