|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
DOUBLE PRECISION ZERO
|
INTEGER LDA, LDEVAL, LDEVEC, LDIWRK, LDQ, LDWORK
|
INTEGER LDWRK2, N, NDIAG
|
PARAMETER (N = 3)
|
PARAMETER (NDIAG = 1)
|
PARAMETER (LDA = NDIAG + 1)
|
PARAMETER (LDEVAL = N)
|
PARAMETER (LDEVEC = N)
|
PARAMETER (LDIWRK = 5 * N)
|
PARAMETER (LDQ = N)
|
PARAMETER (LDWORK = N)
|
PARAMETER (LDWRK2 = 7 * N)
|
PARAMETER (ZERO = 0.0D0)
|
C
|
DOUBLE PRECISION EVALS(LDEVAL), TEMP, WORK2(LDWRK2)
|
COMPLEX*16 A(LDA,N), EVECS(LDEVEC,N), Q(LDQ,N)
|
COMPLEX*16 WORK(LDWORK)
|
INTEGER ICOL, IFAIL(N), INFO, IROW, ITEMP
|
INTEGER IWORK(LDIWRK), NFOUND
|
C
|
EXTERNAL ZHBEVX
|
INTRINSIC ABS, CMPLX, CONJG, DBLE
|
C
|
C Initialize the array A to store the coefficient array A
|
C shown below.
|
C
|
DATA A / (8D8,8D8), (4.0D0, 8D8), (4.0D0, 4.0D0),
|
$ (4.0D0, 8D8), (4.0D0, 4.0D0), (4.0D0, 8D8) /
|
C
|
C Print the initial value of A.
|
C
|
PRINT 1000
|
PRINT 1010, CMPLX(DBLE(A(2,1)), ZERO), A(1,2),
|
$ CMPLX(ZERO, ZERO)
|
PRINT 1010, CONJG(A(1,2)), CMPLX(DBLE(A(2,2)), ZERO), A(1,3)
|
PRINT 1010, (ZERO, ZERO), CONJG(A(1,3)), CMPLX(DBLE(A(2,3)),
|
$ ZERO)
|
PRINT 1020
|
DO 100, IROW = 1, LDA
|
PRINT 1010, (A(IROW,ICOL), ICOL = 1, N)
|
100 CONTINUE
|
C
|
C Compute the eigenvalues and eigenvectors of A.
|
C
|
CALL ZHBEVX ('VALUES AND VECTORS', 'ALL EIGENVALUES',
|
$ 'UPPER TRIANGLE OF A STORED', N, NDIAG,
|
$ A, LDA, Q, LDQ, TEMP, TEMP, ITEMP, ITEMP,
|
$ 0.0D0, NFOUND, EVALS, EVECS, LDEVEC, WORK,
|
$ WORK2, IWORK, IFAIL, INFO)
|
IF (INFO .LT. 0) THEN
|
PRINT 1030, ABS(INFO)
|
STOP 1
|
ELSE IF (INFO .GT. 0) THEN
|
PRINT 1040
|
STOP 2
|
END IF
|
C
|
C Print the eigenvalues and eigenvectors.
|
C
|
PRINT 1050
|
DO 200, IROW = 1, N
|
PRINT 1060, EVALS(IROW), (EVECS(IROW,ICOL), ICOL = 1, N)
|
200 CONTINUE
|
C
|
1000 FORMAT (1X, 'A in full form:')
|
1010 FORMAT (1X, 10(: 2X, '(', F5.1, ',', F5.1, ')'))
|
1020 FORMAT (/1X, 'A in Hermitian banded form: ',
|
$ ' (* in unused entries)')
|
1030 FORMAT (1X, 'Illegal argument to ZHEEVX, argument #', I2)
|
1040 FORMAT (1X, 'Convergence failure, INFO = ', I2)
|
1050 FORMAT (/1X, 'Eigenvalue', 20X, 'Eigenvector**T')
|
1060 FORMAT (1X, F8.3, 4X, '[', 3('(', F6.3, ',', F6.3, ') '),
|
$ ']')
|
C
|
END
|
|