|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
INTEGER LDA, LDAB, LENGAB, N, NDIAG, NSUB, NSUPER
|
PARAMETER (N = 5)
|
PARAMETER (NSUB = 4)
|
PARAMETER (NSUPER = 0)
|
PARAMETER (NDIAG = NSUB + 1 + NSUPER)
|
PARAMETER (LDA = N)
|
PARAMETER (LDAB = 2 * NSUB + 1 + NDIAG)
|
PARAMETER (LENGAB = LDAB * N)
|
C
|
DOUBLE PRECISION A(LDA,N), AB(LDAB, N), DET(2)
|
INTEGER ICOL, INFO, IPIVOT(N), IROW, IROWB, I1, I2
|
C
|
EXTERNAL DGBDI, DGBFA
|
C
|
C Initialize the array A to store the 5x5 matrix A with four
|
C subdiagonals and no superdiagonals shown below.
|
C
|
C 1
|
C 1 -1
|
C A = 1 -2 1
|
C 1 -3 3 -1
|
C 1 -4 6 -4 1
|
C
|
DATA A / 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,
|
$ 0.0D0, -1.0D0, -2.0D0, -3.0D0, -4.0D0,
|
$ 0.0D0, 0.0D0, 1.0D0, 3.0D0, 6.0D0,
|
$ 0.0D0, 0.0D0, 0.0D0, -1.0D0, -4.0D0,
|
$ 0.0D0, 0.0D0, 0.0D0, 0.0D0, 1.0D0 /
|
DATA AB / LENGAB*8D8 /
|
|
DO 20, ICOL = 1, N
|
I1 = MAX0 (1, ICOL - NSUPER)
|
I2 = MIN0 (N, ICOL + NSUB)
|
DO 10, IROW = I1, I2
|
IROWB = IROW - ICOL + NDIAG
|
AB(IROWB, ICOL) = A(IROW, ICOL)
|
10 CONTINUE
|
20 CONTINUE
|
C
|
C Print the initial values of the arrays.
|
C
|
PRINT 1000
|
PRINT 1010, ((A(IROW, ICOL), ICOL = 1, N), IROW = 1, N)
|
PRINT 1020
|
PRINT 1010, ((AB(IROW, ICOL), ICOL = 1, N),
|
$ IROW = 1, 2 * NSUB + 1 + NSUPER)
|
C
|
C Factor the matrix in banded form.
|
C
|
CALL DGBFA (AB, LDAB, N, NSUB, NSUPER, IPIVOT, INFO)
|
IF (INFO .EQ. 0) THEN
|
CALL DGBDI (AB, LDAB, N, NSUB, NSUPER, IPIVOT, DET)
|
PRINT 1030, DET(1) * (1.0D0 ** DET(2))
|
ELSE
|
PRINT 1040, INFO
|
END IF
|
C
|
1000 FORMAT (1X, 'A in full form:')
|
1010 FORMAT (5(3X, F4.1))
|
1020 FORMAT (/1X, 'A in banded form: (* in unused elements)')
|
1030 FORMAT (/1X, 'det(A) = ', F4.1)
|
1040 FORMAT (/1X, 'A appears singular at ', I2)
|
C
|
END
|
|