2
SUBROUTINE DSISL (A, LDA, N, KPVT, B)
3
C***BEGIN PROLOGUE DSISL
4
C***PURPOSE Solve a real symmetric system using the factors obtained
6
C***LIBRARY SLATEC (LINPACK)
8
C***TYPE DOUBLE PRECISION (SSISL-S, DSISL-D, CHISL-C, CSISL-C)
9
C***KEYWORDS LINEAR ALGEBRA, LINPACK, MATRIX, SOLVE, SYMMETRIC
10
C***AUTHOR Bunch, J., (UCSD)
13
C DSISL solves the double precision symmetric system
15
C using the factors computed by DSIFA.
19
C A DOUBLE PRECISION(LDA,N)
20
C the output from DSIFA.
23
C the leading dimension of the array A .
26
C the order of the matrix A .
29
C the pivot vector from DSIFA.
31
C B DOUBLE PRECISION(N)
32
C the right hand side vector.
36
C B the solution vector X .
40
C A division by zero may occur if DSICO has set RCOND .EQ. 0.0
41
C or DSIFA has set INFO .NE. 0 .
43
C To compute INVERSE(A) * C where C is a matrix
45
C CALL DSIFA(A,LDA,N,KPVT,INFO)
46
C IF (INFO .NE. 0) GO TO ...
48
C CALL DSISL(A,LDA,N,KPVT,C(1,J))
51
C***REFERENCES J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
52
C Stewart, LINPACK Users' Guide, SIAM, 1979.
53
C***ROUTINES CALLED DAXPY, DDOT
54
C***REVISION HISTORY (YYMMDD)
56
C 890531 Changed all specific intrinsics to generic. (WRB)
57
C 890831 Modified array declarations. (WRB)
58
C 891107 Modified routine equivalence list. (WRB)
59
C 891107 REVISION DATE from Version 3.2
60
C 891214 Prologue converted to Version 4.0 format. (BAB)
61
C 900326 Removed duplicate information from DESCRIPTION section.
63
C 920501 Reformatted the REFERENCES section. (WRB)
64
C***END PROLOGUE DSISL
66
DOUBLE PRECISION A(LDA,*),B(*)
68
DOUBLE PRECISION AK,AKM1,BK,BKM1,DDOT,DENOM,TEMP
71
C LOOP BACKWARD APPLYING THE TRANSFORMATIONS AND
74
C***FIRST EXECUTABLE STATEMENT DSISL
76
10 IF (K .EQ. 0) GO TO 80
77
IF (KPVT(K) .LT. 0) GO TO 40
81
IF (K .EQ. 1) GO TO 30
83
IF (KP .EQ. K) GO TO 20
92
C APPLY THE TRANSFORMATION.
94
CALL DAXPY(K-1,B(K),A(1,K),1,B(1),1)
106
IF (K .EQ. 2) GO TO 60
108
IF (KP .EQ. K - 1) GO TO 50
117
C APPLY THE TRANSFORMATION.
119
CALL DAXPY(K-2,B(K),A(1,K),1,B(1),1)
120
CALL DAXPY(K-2,B(K-1),A(1,K-1),1,B(1),1)
126
AKM1 = A(K-1,K-1)/A(K-1,K)
128
BKM1 = B(K-1)/A(K-1,K)
129
DENOM = AK*AKM1 - 1.0D0
130
B(K) = (AKM1*BK - BKM1)/DENOM
131
B(K-1) = (AK*BKM1 - BK)/DENOM
137
C LOOP FORWARD APPLYING THE TRANSFORMATIONS.
140
90 IF (K .GT. N) GO TO 160
141
IF (KPVT(K) .LT. 0) GO TO 120
145
IF (K .EQ. 1) GO TO 110
147
C APPLY THE TRANSFORMATION.
149
B(K) = B(K) + DDOT(K-1,A(1,K),1,B(1),1)
151
IF (KP .EQ. K) GO TO 100
166
IF (K .EQ. 1) GO TO 140
168
C APPLY THE TRANSFORMATION.
170
B(K) = B(K) + DDOT(K-1,A(1,K),1,B(1),1)
171
B(K+1) = B(K+1) + DDOT(K-1,A(1,K+1),1,B(1),1)
173
IF (KP .EQ. K) GO TO 130