2
SUBROUTINE DU12LS (A, MDA, M, N, B, MDB, NB, MODE, KRANK, RNORM,
4
C***BEGIN PROLOGUE DU12LS
6
C***PURPOSE Subsidiary to DLLSIA
8
C***TYPE DOUBLE PRECISION (U12LS-S, DU12LS-D)
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.
17
C Note - If MODE.NE.2, W is never accessed.
20
C***ROUTINES CALLED DAXPY, DDOT, DNRM2, DSWAP
21
C***REVISION HISTORY (YYMMDD)
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 DU12LS
28
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
29
DOUBLE PRECISION DDOT,DNRM2
30
DIMENSION A(MDA,*),B(MDB,*),RNORM(*),H(*),W(*)
32
C***FIRST EXECUTABLE STATEMENT DU12LS
40
RNORM(JB)=DNRM2(M,B(1,JB),1)
48
C REORDER B TO REFLECT ROW INTERCHANGES
78
C APPLY HOUSEHOLDER TRANSFORMATIONS TO B
84
BB=-DDOT(M-J+1,A(J,J),1,B(J,I),1)/H(J)
85
CALL DAXPY(M-J+1,BB,A(J,J),1,B(J,I),1)
90
C FIND NORMS OF RESIDUAL VECTOR(S)..(BEFORE OVERWRITE B)
93
RNORM(JB)=DNRM2((M-K),B(KP1,JB),1)
96
C BACK SOLVE UPPER TRIANGULAR R
100
B(I,JB)=B(I,JB)/A(I,I)
105
CALL DAXPY(IM1,-B(I,JB),A(1,I),1,B(1,JB),1)
120
IF(MODE.EQ.1) GO TO 480
122
C MINIMAL LENGTH SOLUTION
127
TT=-DDOT(NMK,A(I,KP1),MDA,B(KP1,JB),1)/W(I)
129
CALL DAXPY(NMK,TT,A(I,KP1),MDA,B(KP1,JB),1)
130
B(I,JB)=B(I,JB)+TT*W(I)
135
C REORDER B TO REFLECT COLUMN INTERCHANGES
145
484 CALL DSWAP(NB,B(J,1),MDB,B(I,1),MDB)
156
C SOLUTION VECTORS ARE IN FIRST N ROWS OF B(,)