home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
fortran
/
linpklib.arc
/
SPBSL.FOR
< prev
next >
Wrap
Text File
|
1984-01-06
|
2KB
|
82 lines
SUBROUTINE SPBSL(ABD,LDA,N,M,B)
INTEGER LDA,N,M
REAL ABD(LDA,1),B(1)
C
C SPBSL SOLVES THE REAL SYMMETRIC POSITIVE DEFINITE
C BAND SYSTEM A*X = B
C USING THE FACTORS COMPUTED BY SPBCO OR SPBFA.
C
C ON ENTRY
C
C ABD REAL(LDA, N)
C THE OUTPUT FROM SPBCO OR SPBFA.
C
C LDA INTEGER
C THE LEADING DIMENSION OF THE ARRAY ABD .
C
C N INTEGER
C THE ORDER OF THE MATRIX A .
C
C M INTEGER
C THE NUMBER OF DIAGONALS ABOVE THE MAIN DIAGONAL.
C
C B REAL(N)
C THE RIGHT HAND SIDE VECTOR.
C
C ON RETURN
C
C B THE SOLUTION VECTOR X .
C
C ERROR CONDITION
C
C A DIVISION BY ZERO WILL OCCUR IF THE INPUT FACTOR CONTAINS
C A ZERO ON THE DIAGONAL. TECHNICALLY THIS INDICATES
C SINGULARITY BUT IT IS USUALLY CAUSED BY IMPROPER SUBROUTINE
C ARGUMENTS. IT WILL NOT OCCUR IF THE SUBROUTINES ARE CALLED
C CORRECTLY AND INFO .EQ. 0 .
C
C TO COMPUTE INVERSE(A) * C WHERE C IS A MATRIX
C WITH P COLUMNS
C CALL SPBCO(ABD,LDA,N,RCOND,Z,INFO)
C IF (RCOND IS TOO SMALL .OR. INFO .NE. 0) GO TO ...
C DO 10 J = 1, P
C CALL SPBSL(ABD,LDA,N,C(1,J))
C 10 CONTINUE
C
C LINPACK. THIS VERSION DATED 08/14/78 .
C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
C
C SUBROUTINES AND FUNCTIONS
C
C BLAS SAXPY,SDOT
C FORTRAN MIN0
C
C INTERNAL VARIABLES
C
REAL SDOT,T
INTEGER K,KB,LA,LB,LM
C
C SOLVE TRANS(R)*Y = B
C
DO 10 K = 1, N
LM = MIN0(K-1,M)
LA = M + 1 - LM
LB = K - LM
T = SDOT(LM,ABD(LA,K),1,B(LB),1)
B(K) = (B(K) - T)/ABD(M+1,K)
10 CONTINUE
C
C SOLVE R*X = Y
C
DO 20 KB = 1, N
K = N + 1 - KB
LM = MIN0(K-1,M)
LA = M + 1 - LM
LB = K - LM
B(K) = B(K)/ABD(M+1,K)
T = -B(K)
CALL SAXPY(LM,T,ABD(LA,K),1,B(LB),1)
20 CONTINUE
RETURN
END