|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
DOUBLE PRECISION ZERO
|
INTEGER ITYPE, LDA, LDB, LDWORK, LDWRK2, N
|
PARAMETER (ITYPE = 1)
|
PARAMETER (N = 3)
|
PARAMETER (LDA = N)
|
PARAMETER (LDB = N)
|
PARAMETER (LDWORK = 2 * N - 1)
|
PARAMETER (LDWRK2 = 3 * N - 2)
|
PARAMETER (ZERO = 0.0D0)
|
C
|
DOUBLE PRECISION EVALS(N), WORK2(LDWRK2)
|
COMPLEX*16 A(LDA,N), B(LDB,N), WORK(LDWORK)
|
INTEGER ICOL, INFO, IROW
|
C
|
EXTERNAL ZHEGV
|
INTRINSIC ABS, CONJG
|
C
|
C Initialize the arrays A and B to store the matrices A and B
|
C shown below.
|
C
|
C 8 2-2i 2-2i 4 1-i 1-i
|
C A = 2+2i 16 4-4i B = 1+i 8 2-2i
|
C 2+2i 4+4i 32 1+i 2+2i 16
|
C
|
DATA A / (8.0D0,8D8), (8D8,8D8), (8D8,8D8),
|
$ (2.0D0,-2.0D0), (1.6D1,8D8), (8D8,8D8),
|
$ (2.0D0,-2.0D0), (4.0D0,-4.0D0), (3.2D1,8D8) /
|
DATA B / (4.0D0,8D8), (8D8,8D8), (8D8,8D8),
|
$ (1.0D0,-1.0D0), (8.0D0,8D8), (8D8,8D8),
|
$ (1.0D0,-1.0D0), (2.0D0,-2.0D0), (1.6D1,8D8) /
|
C
|
PRINT 1000
|
DO 100, IROW = 1, N
|
PRINT 1010, (CONJG(A(ICOL,IROW)), ICOL = 1, IROW - 1),
|
$ CMPLX(DBLE(A(IROW,IROW)), ZERO),
|
$ (A(IROW,ICOL), ICOL = IROW + 1, N)
|
100 CONTINUE
|
PRINT 1020
|
PRINT 1010, ((A(IROW,ICOL), ICOL = 1, N), IROW = 1, N)
|
PRINT 1030
|
DO 110, IROW = 1, N
|
PRINT 1010, (CONJG(B(ICOL,IROW)), ICOL = 1, IROW - 1),
|
$ CMPLX(DBLE(A(IROW,IROW)), ZERO),
|
$ (B(IROW,ICOL), ICOL = IROW + 1, N)
|
110 CONTINUE
|
PRINT 1040
|
PRINT 1010, ((B(IROW,ICOL), ICOL = 1, N), IROW = 1, N)
|
C
|
CALL ZHEGV (ITYPE, 'VALUES AND EIGENVECTORS',
|
$ 'UPPER TRIANGLE OF A STORED', N, A, LDA, B, LDB,
|
$ EVALS, WORK, LDWORK, WORK2, INFO)
|
IF (INFO .LT. 0) THEN
|
PRINT 1050, ABS(INFO)
|
STOP 1
|
ELSE IF (INFO .GT. N) THEN
|
PRINT 1060, INFO
|
STOP 2
|
ELSE IF (INFO .GT. 0) THEN
|
PRINT 1070, INFO
|
STOP 3
|
END IF
|
PRINT 1080
|
DO 120, IROW = 1, N
|
PRINT 1090, EVALS(IROW), (A(IROW,ICOL), ICOL = 1, N)
|
120 CONTINUE
|
C
|
1000 FORMAT (1X, 'A in full form:')
|
1010 FORMAT (3(3X, '(', F5.2, ',', F5.2, ')'))
|
1020 FORMAT (/1X, 'A in Hermitian form: (* in unused elements)')
|
1030 FORMAT (/1X, 'B in full form:')
|
1040 FORMAT (/1X, 'B in Hermitian form: (* in unused elements)')
|
1050 FORMAT (1X, 'Illegal argument to ZHEGV, argument #', I2)
|
1060 FORMAT (1X, 'B is not positive definite, INFO = ', I4)
|
1070 FORMAT (1X, 'Convergence failure, INFO = ', I4)
|
1080 FORMAT (/1X, 'Eigenvalue', 20X, 'Eigenvector**T')
|
1090 FORMAT (1X, F8.3, 5X, '[', 3('(', F5.3, ',', F5.3, ')', 2X),
|
$ ']')
|
C
|
END
|
|