u12us.f 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. *DECK U12US
  2. SUBROUTINE U12US (A, MDA, M, N, B, MDB, NB, MODE, KRANK, RNORM, H,
  3. + W, IR, IC)
  4. C***BEGIN PROLOGUE U12US
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to ULSIA
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (U12US-S, DU12US-D)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C Given the Householder LQ 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 ULSIA
  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 U12US
  28. DIMENSION A(MDA,*),B(MDB,*),RNORM(*),H(*),W(*)
  29. INTEGER IC(*),IR(*)
  30. C***FIRST EXECUTABLE STATEMENT U12US
  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 IF A IS OF REDUCED RANK AND MODE=2,
  77. C APPLY HOUSEHOLDER TRANSFORMATIONS TO B
  78. C
  79. IF(MODE.LT.2 .OR. K.EQ.M) GO TO 440
  80. MMK=M-K
  81. DO 430 JB=1,NB
  82. DO 425 J=1,K
  83. I=KP1-J
  84. TT=-SDOT(MMK,A(KP1,I),1,B(KP1,JB),1)/W(I)
  85. TT=TT-B(I,JB)
  86. CALL SAXPY(MMK,TT,A(KP1,I),1,B(KP1,JB),1)
  87. B(I,JB)=B(I,JB)+TT*W(I)
  88. 425 CONTINUE
  89. 430 CONTINUE
  90. C
  91. C FIND NORMS OF RESIDUAL VECTOR(S)..(BEFORE OVERWRITE B)
  92. C
  93. 440 DO 442 JB=1,NB
  94. RNORM(JB)=SNRM2((M-K),B(KP1,JB),1)
  95. 442 CONTINUE
  96. C
  97. C BACK SOLVE LOWER TRIANGULAR L
  98. C
  99. DO 450 JB=1,NB
  100. DO 448 I=1,K
  101. B(I,JB)=B(I,JB)/A(I,I)
  102. IF(I.EQ.K) GO TO 450
  103. IP1=I+1
  104. CALL SAXPY(K-I,-B(I,JB),A(IP1,I),1,B(IP1,JB),1)
  105. 448 CONTINUE
  106. 450 CONTINUE
  107. C
  108. C
  109. C TRUNCATED SOLUTION
  110. C
  111. IF(K.EQ.N) GO TO 462
  112. DO 460 JB=1,NB
  113. DO 460 I=KP1,N
  114. B(I,JB)=0.0
  115. 460 CONTINUE
  116. C
  117. C APPLY HOUSEHOLDER TRANSFORMATIONS TO B
  118. C
  119. 462 DO 470 I=1,K
  120. J=KP1-I
  121. TT=A(J,J)
  122. A(J,J)=H(J)
  123. DO 465 JB=1,NB
  124. BB=-SDOT(N-J+1,A(J,J),MDA,B(J,JB),1)/H(J)
  125. CALL SAXPY(N-J+1,BB,A(J,J),MDA,B(J,JB),1)
  126. 465 CONTINUE
  127. A(J,J)=TT
  128. 470 CONTINUE
  129. C
  130. C
  131. C REORDER B TO REFLECT COLUMN INTERCHANGES
  132. C
  133. I=0
  134. 482 I=I+1
  135. IF(I.EQ.N) GO TO 488
  136. J=IC(I)
  137. IF(J.EQ.I) GO TO 482
  138. IF(J.LT.0) GO TO 482
  139. IC(I)=-IC(I)
  140. 484 CALL SSWAP(NB,B(J,1),MDB,B(I,1),MDB)
  141. IJ=IC(J)
  142. IC(J)=-IC(J)
  143. J=IJ
  144. IF(J.EQ.I) GO TO 482
  145. GO TO 484
  146. 488 CONTINUE
  147. DO 490 I=1,N
  148. IC(I)=ABS(IC(I))
  149. 490 CONTINUE
  150. C
  151. C SOLUTION VECTORS ARE IN FIRST N ROWS OF B(,)
  152. C
  153. RETURN
  154. END