|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
INTEGER LDWORK, LENGTA, N
|
PARAMETER (N = 3)
|
PARAMETER (LDWORK = N)
|
PARAMETER (LENGTA = (N * N + N) / 2)
|
C
|
COMPLEX*16 A(LENGTA), WORK(LDWORK)
|
INTEGER INFO, IPIVOT(N)
|
C
|
EXTERNAL ZHPTRF, ZHPTRI
|
INTRINSIC ABS, CONJG
|
C
|
C Initialize the array A to store the coefficient array A
|
C shown below.
|
C
|
C 1 1-i 1-i
|
C A = 1+i 3 3-i
|
C 1+i 3+i 5
|
C
|
DATA A / (1.0D0,0.0D0), (1.0D0,-1.0D0), (3.0D0,0.0D0),
|
$ (1.0D0,-1.0D0), (3.0D0,-1.0D0), (5.0D0,0.0D0) /
|
C
|
C Print the initial value of A.
|
C
|
PRINT 1000
|
PRINT 1010, A(1), A(2), A(4)
|
PRINT 1010, CONJG(A(2)), A(3), A(5)
|
PRINT 1010, CONJG(A(4)), CONJG(A(5)), A(6)
|
C
|
C Factor the matrix.
|
C
|
CALL ZHPTRF ('UPPER TRIANGLE OF A STORED', N, A, IPIVOT,
|
$ INFO)
|
IF (INFO .LT. 0) THEN
|
PRINT 1020, ABS(INFO)
|
STOP 1
|
ELSE IF (INFO .GT. 0) THEN
|
PRINT 1030
|
STOP 2
|
END IF
|
C
|
C Compute and print the inverse.
|
C
|
CALL ZHPTRI ('UPPER TRIANGULAR FACTOR OF A', N, A, IPIVOT,
|
$ WORK, INFO)
|
IF (INFO .LT. 0) THEN
|
PRINT 1040, ABS(INFO)
|
STOP 3
|
ELSE IF (INFO .GT. 0) THEN
|
PRINT 1030
|
STOP 4
|
END IF
|
PRINT 1050
|
PRINT 1010, A(1), A(2), A(4)
|
PRINT 1010, CONJG(A(2)), A(3), A(5)
|
PRINT 1010, CONJG(A(4)), CONJG(A(5)), A(6)
|
C
|
1000 FORMAT (1X, 'A:')
|
1010 FORMAT (1X, 10(: 2X, '(', F5.1, ',', F5.1, ')'))
|
1020 FORMAT (1X, 'Illegal argument to ZHPTRF, argument #', I2)
|
1030 FORMAT (1X, 'A is singular to working precision.')
|
1040 FORMAT (1X, 'Illegal argument to ZHPTRI, argument #', I2)
|
1050 FORMAT (/1X, 'A**(-1):')
|
C
|
END
|
|