334 SUBROUTINE zdrvst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
335 $ NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U,
336 $ LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK,
337 $ IWORK, LIWORK, RESULT, INFO )
344 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
346 DOUBLE PRECISION THRESH
350 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
351 DOUBLE PRECISION D1( * ), D2( * ), D3( * ), RESULT( * ),
352 $ rwork( * ), wa1( * ), wa2( * ), wa3( * )
353 COMPLEX*16 A( LDA, * ), TAU( * ), U( LDU, * ),
354 $ v( ldu, * ), work( * ), z( ldu, * )
361 DOUBLE PRECISION ZERO, ONE, TWO, TEN
362 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0, two = 2.0d+0,
364 DOUBLE PRECISION HALF
365 parameter( half = one / two )
366 COMPLEX*16 CZERO, CONE
367 parameter( czero = ( 0.0d+0, 0.0d+0 ),
368 $ cone = ( 1.0d+0, 0.0d+0 ) )
370 parameter( maxtyp = 18 )
375 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDWRK, INDX,
376 $ irow, itemp, itype, iu, iuplo, j, j1, j2, jcol,
377 $ jsize, jtype, kd, lgn, liwedc, lrwedc
378 $ m, m2, m3, mtypes, n, nerrs, nmats, nmax,
380 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
381 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
385 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
386 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
390 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
391 EXTERNAL DLAMCH, DLARND, DSXT1
400 INTRINSIC abs, dble, int, log,
max,
min, sqrt
403 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
404 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
406 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
419 nmax =
max( nmax, nn( j ) )
426 IF( nsizes.LT.0 )
THEN
428 ELSE IF( badnn )
THEN
430 ELSE IF( ntypes.LT.0 )
THEN
432 ELSE IF( lda.LT.nmax )
THEN
434 ELSE IF( ldu.LT.nmax )
THEN
436 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
441 CALL xerbla(
'ZDRVST', -info )
447 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
452 unfl = dlamch(
'Safe minimum' )
453 ovfl = dlamch(
'Overflow' )
455 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
457 rtunfl = sqrt( unfl )
458 rtovfl = sqrt( ovfl )
463 iseed2( i ) = iseed( i )
464 iseed3( i ) = iseed( i )
470 DO 1220 jsize = 1, nsizes
473 lgn = int( log( dble( n ) ) / log( two ) )
478 lwedc =
max( 2*n+n*n, 2*n*n )
479 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
486 aninv = one / dble(
max( 1, n ) )
488 IF( nsizes.NE.1 )
THEN
489 mtypes =
min( maxtyp, ntypes )
491 mtypes =
min( maxtyp+1, ntypes )
494 DO 1210 jtype = 1, mtypes
495 IF( .NOT.dotype( jtype ) )
501 ioldsd( j ) = iseed( j )
519 IF( mtypes.GT.maxtyp )
522 itype = ktype( jtype )
523 imode = kmode( jtype )
527 GO TO ( 40, 50, 60 )kmagn( jtype )
534 anorm = ( rtovfl*ulp )*aninv
538 anorm = rtunfl*n*ulpinv
543 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
551 IF( itype.EQ.1 )
THEN
554 ELSE IF( itype.EQ.2 )
THEN
559 a( jcol, jcol ) = anorm
562 ELSE IF( itype.EQ.4 )
THEN
566 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
567 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
569 ELSE IF( itype.EQ.5 )
THEN
573 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
574 $ anorm, n, n,
'N', a, lda, work, iinfo )
576 ELSE IF( itype.EQ.7 )
THEN
580 CALL zlatmr( n, n, 's
', ISEED, 'h
', WORK, 6, ONE, CONE,
581 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
582 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
583 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
585.EQ.
ELSE IF( ITYPE8 ) THEN
589 CALL ZLATMR( N, N, 's
', ISEED, 'h
', WORK, 6, ONE, CONE,
590 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
591 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
592 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
594.EQ.
ELSE IF( ITYPE9 ) THEN
598 IHBW = INT( ( N-1 )*DLARND( 1, ISEED3 ) )
599 CALL ZLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
600 $ ANORM, IHBW, IHBW, 'z
', U, LDU, WORK,
605 CALL ZLASET( 'full
', LDA, N, CZERO, CZERO, A, LDA )
606 DO 100 IDIAG = -IHBW, IHBW
607 IROW = IHBW - IDIAG + 1
608 J1 = MAX( 1, IDIAG+1 )
609 J2 = MIN( N, N+IDIAG )
612 A( I, J ) = U( IROW, J )
619.NE.
IF( IINFO0 ) THEN
620 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
633 IL = 1 + INT( ( N-1 )*DLARND( 1, ISEED2 ) )
634 IU = 1 + INT( ( N-1 )*DLARND( 1, ISEED2 ) )
646.EQ.
IF( IUPLO0 ) THEN
654 CALL ZLACPY( ' ', N, N, A, LDA, V, LDU )
657 CALL ZHEEVD( 'v
', UPLO, N, A, LDU, D1, WORK, LWEDC,
658 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
659.NE.
IF( IINFO0 ) THEN
660 WRITE( NOUNIT, FMT = 9999 )'zheevd(v,
' // UPLO //
661 $ ')
', IINFO, N, JTYPE, IOLDSD
663.LT.
IF( IINFO0 ) THEN
666 RESULT( NTEST ) = ULPINV
667 RESULT( NTEST+1 ) = ULPINV
668 RESULT( NTEST+2 ) = ULPINV
675 CALL ZHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
676 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
678 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
681 CALL ZHEEVD( 'n
', UPLO, N, A, LDU, D3, WORK, LWEDC,
682 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
683.NE.
IF( IINFO0 ) THEN
684 WRITE( NOUNIT, FMT = 9999 )'zheevd(n,
' // UPLO //
685 $ ')
', IINFO, N, JTYPE, IOLDSD
687.LT.
IF( IINFO0 ) THEN
690 RESULT( NTEST ) = ULPINV
700 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
701 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
703 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
704 $ ULP*MAX( TEMP1, TEMP2 ) )
707 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
712 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
714 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
715 $ TEN*ULP*TEMP3, TEN*RTUNFL )
716.GT.
ELSE IF( N0 ) THEN
717 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
718 $ TEN*ULP*TEMP3, TEN*RTUNFL )
721 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
722 $ TEN*ULP*TEMP3, TEN*RTUNFL )
723.GT.
ELSE IF( N0 ) THEN
724 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
725 $ TEN*ULP*TEMP3, TEN*RTUNFL )
733 CALL ZHEEVX( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
734 $ ABSTOL, M, WA1, Z, LDU, WORK, LWORK, RWORK,
735 $ IWORK, IWORK( 5*N+1 ), IINFO )
736.NE.
IF( IINFO0 ) THEN
737 WRITE( NOUNIT, FMT = 9999 )'zheevx(v,a,
' // UPLO //
738 $ ')
', IINFO, N, JTYPE, IOLDSD
740.LT.
IF( IINFO0 ) THEN
743 RESULT( NTEST ) = ULPINV
744 RESULT( NTEST+1 ) = ULPINV
745 RESULT( NTEST+2 ) = ULPINV
752 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
754 CALL ZHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
755 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
758 CALL ZHEEVX( 'n
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
759 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, RWORK,
760 $ IWORK, IWORK( 5*N+1 ), IINFO )
761.NE.
IF( IINFO0 ) THEN
762 WRITE( NOUNIT, FMT = 9999 )'zheevx(n,a,' // uplo //
763 $
')', iinfo, n, jtype, ioldsd
765 IF( iinfo.LT.0 )
THEN
768 result( ntest ) = ulpinv
778 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
779 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
781 result( ntest ) = temp2 /
max( unfl,
782 $ ulp*
max( temp1, temp2 ) )
785 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
789 CALL zheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
790 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
791 $ iwork, iwork( 5*n+1 ), iinfo )
792 IF( iinfo.NE.0 )
THEN
793 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,I,' // uplo //
794 $
')', iinfo, n, jtype, ioldsd
796 IF( iinfo.LT.0 )
THEN
799 result( ntest ) = ulpinv
806 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
808 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
809 $ v, ldu, tau, work, rwork, result( ntest ) )
813 CALL zheevx(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
814 $ abstol, m3, wa3, z, ldu, work, lwork, rwork,
815 $ iwork, iwork( 5*n+1 ), iinfo )
816 IF( iinfo.NE.0 )
THEN
817 WRITE( nounit, fmt = 9999 )
'ZHEEVX(N,I,' // uplo //
818 $
')', iinfo, n, jtype, ioldsd
820 IF( iinfo.LT.0 )
THEN
823 result( ntest ) = ulpinv
830 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
831 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
833 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
837 result( ntest ) = ( temp1+temp2 ) /
838 $
max( unfl, temp3*ulp )
841 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
845 CALL zheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
846 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
847 $ iwork, iwork( 5*n+1 ), iinfo )
848 IF( iinfo.NE.0 )
THEN
849 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,V,' // uplo //
850 $
')', iinfo, n, jtype, ioldsd
855 result( ntest ) = ulpinv
862 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
864 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
865 $ v, ldu, tau, work, rwork, result( ntest ) )
869 CALL zheevx(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
870 $ abstol, m3, wa3, z, ldu, work, lwork, rwork,
871 $ iwork, iwork( 5*n+1 ), iinfo )
872 IF( iinfo.NE.0 )
THEN
873 WRITE( nounit, fmt = 9999 )
'ZHEEVX(N,V,' // uplo //
874 $ ')
', IINFO, N, JTYPE, IOLDSD
876.LT.
IF( IINFO0 ) THEN
879 RESULT( NTEST ) = ULPINV
884.EQ..AND..GT.
IF( M30 N0 ) THEN
885 RESULT( NTEST ) = ULPINV
891 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
892 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
894 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
898 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
899 $ MAX( UNFL, TEMP3*ULP )
905 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
910.EQ.
IF( IUPLO1 ) THEN
914 WORK( INDX ) = A( I, J )
922 WORK( INDX ) = A( I, J )
929 INDWRK = N*( N+1 ) / 2 + 1
930 CALL ZHPEVD( 'v
', UPLO, N, WORK, D1, Z, LDU,
931 $ WORK( INDWRK ), LWEDC, RWORK, LRWEDC, IWORK,
933.NE.
IF( IINFO0 ) THEN
934 WRITE( NOUNIT, FMT = 9999 )'zhpevd(v,
' // UPLO //
935 $ ')
', IINFO, N, JTYPE, IOLDSD
937.LT.
IF( IINFO0 ) THEN
940 RESULT( NTEST ) = ULPINV
941 RESULT( NTEST+1 ) = ULPINV
942 RESULT( NTEST+2 ) = ULPINV
949 CALL ZHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
950 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
952.EQ.
IF( IUPLO1 ) THEN
956 WORK( INDX ) = A( I, J )
964 WORK( INDX ) = A( I, J )
971 INDWRK = N*( N+1 ) / 2 + 1
972 CALL ZHPEVD( 'n
', UPLO, N, WORK, D3, Z, LDU,
973 $ WORK( INDWRK ), LWEDC, RWORK, LRWEDC, IWORK,
975.NE.
IF( IINFO0 ) THEN
976 WRITE( NOUNIT, FMT = 9999 )'zhpevd(n,
' // UPLO //
977 $ ')
', IINFO, N, JTYPE, IOLDSD
979.LT.
IF( IINFO0 ) THEN
982 RESULT( NTEST ) = ULPINV
992 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
993 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
995 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
996 $ ULP*MAX( TEMP1, TEMP2 ) )
1002.EQ.
IF( IUPLO1 ) THEN
1006 WORK( INDX ) = A( I, J )
1014 WORK( INDX ) = A( I, J )
1023 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
1025 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
1026 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1027.GT.
ELSE IF( N0 ) THEN
1028 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
1029 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1032 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
1033 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1034.GT.
ELSE IF( N0 ) THEN
1035 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
1036 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1044 CALL ZHPEVX( 'v
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1045 $ ABSTOL, M, WA1, Z, LDU, V, RWORK, IWORK,
1046 $ IWORK( 5*N+1 ), IINFO )
1047.NE.
IF( IINFO0 ) THEN
1048 WRITE( NOUNIT, FMT = 9999 )'zhpevx(v,a,
' // UPLO //
1049 $ ')
', IINFO, N, JTYPE, IOLDSD
1051.LT.
IF( IINFO0 ) THEN
1054 RESULT( NTEST ) = ULPINV
1055 RESULT( NTEST+1 ) = ULPINV
1056 RESULT( NTEST+2 ) = ULPINV
1063 CALL ZHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
1064 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1068.EQ.
IF( IUPLO1 ) THEN
1072 WORK( INDX ) = A( I, J )
1080 WORK( INDX ) = A( I, J )
1086 CALL ZHPEVX( 'n
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1087 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
1088 $ IWORK( 5*N+1 ), IINFO )
1089.NE.
IF( IINFO0 ) THEN
1090 WRITE( NOUNIT, FMT = 9999 )'zhpevx(n,a,
' // UPLO //
1091 $ ')
', IINFO, N, JTYPE, IOLDSD
1093.LT.
IF( IINFO0 ) THEN
1096 RESULT( NTEST ) = ULPINV
1106 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1107 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1109 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1110 $ ULP*MAX( TEMP1, TEMP2 ) )
1114.EQ.
IF( IUPLO1 ) THEN
1118 WORK( INDX ) = A( I, J )
1126 WORK( INDX ) = A( I, J )
1132 CALL ZHPEVX( 'v
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1133 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
1134 $ IWORK( 5*N+1 ), IINFO )
1135.NE.
IF( IINFO0 ) THEN
1136 WRITE( NOUNIT, FMT = 9999 )'zhpevx(v,i,
' // UPLO //
1137 $ ')
', IINFO, N, JTYPE, IOLDSD
1139.LT.
IF( IINFO0 ) THEN
1142 RESULT( NTEST ) = ULPINV
1143 RESULT( NTEST+1 ) = ULPINV
1144 RESULT( NTEST+2 ) = ULPINV
1151 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1152 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1156.EQ.
IF( IUPLO1 ) THEN
1160 WORK( INDX ) = A( I, J )
1168 WORK( INDX ) = A( I, J )
1174 CALL ZHPEVX( 'n
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1175 $ ABSTOL, M3, WA3, Z, LDU, V, RWORK, IWORK,
1176 $ IWORK( 5*N+1 ), IINFO )
1177.NE.
IF( IINFO0 ) THEN
1178 WRITE( NOUNIT, FMT = 9999 )'zhpevx(n,i,
' // UPLO //
1179 $ ')
', IINFO, N, JTYPE, IOLDSD
1181.LT.
IF( IINFO0 ) THEN
1184 RESULT( NTEST ) = ULPINV
1191 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1192 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1194 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1198 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1199 $ MAX( UNFL, TEMP3*ULP )
1203.EQ.
IF( IUPLO1 ) THEN
1207 WORK( INDX ) = A( I, J )
1215 WORK( INDX ) = A( I, J )
1221 CALL ZHPEVX( 'v
', 'v
', UPLO, N, WORK, VL, VU, IL, IU,
1222 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
1223 $ IWORK( 5*N+1 ), IINFO )
1224.NE.
IF( IINFO0 ) THEN
1225 WRITE( NOUNIT, FMT = 9999 )'zhpevx(v,v,
' // UPLO //
1226 $ ')
', IINFO, N, JTYPE, IOLDSD
1228.LT.
IF( IINFO0 ) THEN
1231 RESULT( NTEST ) = ULPINV
1232 RESULT( NTEST+1 ) = ULPINV
1233 RESULT( NTEST+2 ) = ULPINV
1240 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1241 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1245.EQ.
IF( IUPLO1 ) THEN
1249 WORK( INDX ) = A( I, J )
1257 WORK( INDX ) = A( I, J )
1263 CALL ZHPEVX( 'n
', 'v
', UPLO, N, WORK, VL, VU, IL, IU,
1264 $ ABSTOL, M3, WA3, Z, LDU, V, RWORK, IWORK,
1265 $ IWORK( 5*N+1 ), IINFO )
1266.NE.
IF( IINFO0 ) THEN
1267 WRITE( NOUNIT, FMT = 9999 )'zhpevx(n,v,
' // UPLO //
1268 $ ')
', IINFO, N, JTYPE, IOLDSD
1270.LT.
IF( IINFO0 ) THEN
1273 RESULT( NTEST ) = ULPINV
1278.EQ..AND..GT.
IF( M30 N0 ) THEN
1279 RESULT( NTEST ) = ULPINV
1285 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1286 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1288 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1292 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1293 $ MAX( UNFL, TEMP3*ULP )
1299.LE.
IF( JTYPE7 ) THEN
1301.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
1310.EQ.
IF( IUPLO1 ) THEN
1312 DO 560 I = MAX( 1, J-KD ), J
1313 V( KD+1+I-J, J ) = A( I, J )
1318 DO 580 I = J, MIN( N, J+KD )
1319 V( 1+I-J, J ) = A( I, J )
1325 CALL ZHBEVD( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
1326 $ LWEDC, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
1327.NE.
IF( IINFO0 ) THEN
1328 WRITE( NOUNIT, FMT = 9998 )'zhbevd(v,
' // UPLO //
1329 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1331.LT.
IF( IINFO0 ) THEN
1334 RESULT( NTEST ) = ULPINV
1335 RESULT( NTEST+1 ) = ULPINV
1336 RESULT( NTEST+2 ) = ULPINV
1343 CALL ZHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
1344 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1346.EQ.
IF( IUPLO1 ) THEN
1348 DO 600 I = MAX( 1, J-KD ), J
1349 V( KD+1+I-J, J ) = A( I, J )
1354 DO 620 I = J, MIN( N, J+KD )
1355 V( 1+I-J, J ) = A( I, J )
1361 CALL ZHBEVD( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
1362 $ LWEDC, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
1363.NE.
IF( IINFO0 ) THEN
1364 WRITE( NOUNIT, FMT = 9998 )'zhbevd(n,
' // UPLO //
1365 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1367.LT.
IF( IINFO0 ) THEN
1370 RESULT( NTEST ) = ULPINV
1380 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1381 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1383 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1384 $ ULP*MAX( TEMP1, TEMP2 ) )
1390.EQ.
IF( IUPLO1 ) THEN
1392 DO 660 I = MAX( 1, J-KD ), J
1393 V( KD+1+I-J, J ) = A( I, J )
1398 DO 680 I = J, MIN( N, J+KD )
1399 V( 1+I-J, J ) = A( I, J )
1405 CALL ZHBEVX( 'v
', 'a
', UPLO, N, KD, V, LDU, U, LDU, VL,
1406 $ VU, IL, IU, ABSTOL, M, WA1, Z, LDU, WORK,
1407 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1408.NE.
IF( IINFO0 ) THEN
1409 WRITE( NOUNIT, FMT = 9999 )'zhbevx(v,a,
' // UPLO //
1410 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1412.LT.
IF( IINFO0 ) THEN
1415 RESULT( NTEST ) = ULPINV
1416 RESULT( NTEST+1 ) = ULPINV
1417 RESULT( NTEST+2 ) = ULPINV
1424 CALL ZHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
1425 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1429.EQ.
IF( IUPLO1 ) THEN
1431 DO 700 I = MAX( 1, J-KD ), J
1432 V( KD+1+I-J, J ) = A( I, J )
1437 DO 720 I = J, MIN( N, J+KD )
1438 V( 1+I-J, J ) = A( I, J )
1443 CALL ZHBEVX( 'n
', 'a
', UPLO, N, KD, V, LDU, U, LDU, VL,
1444 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
1445 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1446.NE.
IF( IINFO0 ) THEN
1447 WRITE( NOUNIT, FMT = 9998 )'zhbevx(n,a,
' // UPLO //
1448 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1450.LT.
IF( IINFO0 ) THEN
1453 RESULT( NTEST ) = ULPINV
1463 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1464 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1466 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1467 $ ULP*MAX( TEMP1, TEMP2 ) )
1474.EQ.
IF( IUPLO1 ) THEN
1476 DO 760 I = MAX( 1, J-KD ), J
1477 V( KD+1+I-J, J ) = A( I, J )
1482 DO 780 I = J, MIN( N, J+KD )
1483 V( 1+I-J, J ) = A( I, J )
1488 CALL ZHBEVX( 'v
', 'i
', UPLO, N, KD, V, LDU, U, LDU, VL,
1489 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
1490 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1491.NE.
IF( IINFO0 ) THEN
1492 WRITE( NOUNIT, FMT = 9998 )'zhbevx(v,i,
' // UPLO //
1493 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1495.LT.
IF( IINFO0 ) THEN
1498 RESULT( NTEST ) = ULPINV
1499 RESULT( NTEST+1 ) = ULPINV
1500 RESULT( NTEST+2 ) = ULPINV
1507 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1508 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1512.EQ.
IF( IUPLO1 ) THEN
1514 DO 800 I = MAX( 1, J-KD ), J
1515 V( KD+1+I-J, J ) = A( I, J )
1520 DO 820 I = J, MIN( N, J+KD )
1521 V( 1+I-J, J ) = A( I, J )
1525 CALL ZHBEVX( 'n
', 'i
', UPLO, N, KD, V, LDU, U, LDU, VL,
1526 $ VU, IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
1527 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1528.NE.
IF( IINFO0 ) THEN
1529 WRITE( NOUNIT, FMT = 9998 )'zhbevx(n,i,
' // UPLO //
1530 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1532.LT.
IF( IINFO0 ) THEN
1535 RESULT( NTEST ) = ULPINV
1542 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1543 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1545 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1549 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1550 $ MAX( UNFL, TEMP3*ULP )
1557.EQ.
IF( IUPLO1 ) THEN
1559 DO 850 I = MAX( 1, J-KD ), J
1560 V( KD+1+I-J, J ) = A( I, J )
1565 DO 870 I = J, MIN( N, J+KD )
1566 V( 1+I-J, J ) = A( I, J )
1570 CALL ZHBEVX( 'v
', 'v
', UPLO, N, KD, V, LDU, U, LDU, VL,
1571 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
1572 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1573.NE.
IF( IINFO0 ) THEN
1574 WRITE( NOUNIT, FMT = 9998 )'zhbevx(v,v,
' // UPLO //
1575 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1577.LT.
IF( IINFO0 ) THEN
1580 RESULT( NTEST ) = ULPINV
1581 RESULT( NTEST+1 ) = ULPINV
1582 RESULT( NTEST+2 ) = ULPINV
1589 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1590 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1594.EQ.
IF( IUPLO1 ) THEN
1596 DO 890 I = MAX( 1, J-KD ), J
1597 V( KD+1+I-J, J ) = A( I, J )
1602 DO 910 I = J, MIN( N, J+KD )
1603 V( 1+I-J, J ) = A( I, J )
1607 CALL ZHBEVX( 'n
', 'v
', UPLO, N, KD, V, LDU, U, LDU, VL,
1608 $ VU, IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
1609 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1610.NE.
IF( IINFO0 ) THEN
1611 WRITE( NOUNIT, FMT = 9998 )'zhbevx(n,v,
' // UPLO //
1612 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1614.LT.
IF( IINFO0 ) THEN
1617 RESULT( NTEST ) = ULPINV
1622.EQ..AND..GT.
IF( M30 N0 ) THEN
1623 RESULT( NTEST ) = ULPINV
1629 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1630 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1632 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1636 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1637 $ MAX( UNFL, TEMP3*ULP )
1643 CALL ZLACPY( ' ', N, N, A, LDA, V, LDU )
1646 CALL ZHEEV( 'v
', UPLO, N, A, LDU, D1, WORK, LWORK, RWORK,
1648.NE.
IF( IINFO0 ) THEN
1649 WRITE( NOUNIT, FMT = 9999 )'zheev(v,
' // UPLO // ')
',
1650 $ IINFO, N, JTYPE, IOLDSD
1652.LT.
IF( IINFO0 ) THEN
1655 RESULT( NTEST ) = ULPINV
1656 RESULT( NTEST+1 ) = ULPINV
1657 RESULT( NTEST+2 ) = ULPINV
1664 CALL ZHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
1665 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1667 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1670 CALL ZHEEV( 'n
', UPLO, N, A, LDU, D3, WORK, LWORK, RWORK,
1672.NE.
IF( IINFO0 ) THEN
1673 WRITE( NOUNIT, FMT = 9999 )'zheev(n,' // uplo //
')',
1674 $ iinfo, n, jtype, ioldsd
1676 IF( iinfo.LT.0 )
THEN
1679 result( ntest ) = ulpinv
1689 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1690 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1693 $ ulp*
max( temp1, temp2 ) )
1697 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1704 IF( iuplo.EQ.1 )
THEN
1708 work( indx ) = a( i, j )
1716 work( indx ) = a( i, j )
1723 indwrk = n*( n+1 ) / 2 + 1
1724 CALL zhpev(
'V', uplo, n, work, d1, z, ldu,
1725 $ work( indwrk ), rwork, iinfo )
1726 IF( iinfo.NE.0 )
THEN
1727 WRITE( nounit, fmt = 9999 )
'ZHPEV(V,'')'
1728 $ iinfo, n, jtype, ioldsd
1730 IF( iinfo.LT.0 )
THEN
1733 result( ntest ) = ulpinv
1734 result( ntest+1 ) = ulpinv
1735 result( ntest+2 ) = ulpinv
1742 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1743 $ ldu, tau, work, rwork, result( ntest ) )
1745 IF( iuplo.EQ.1 )
THEN
1749 work( indx ) = a( i, j )
1757 work( indx ) = a( i, j )
1764 indwrk = n*( n+1 ) / 2 + 1
1765 CALL zhpev(
'N', uplo, n, work, d3, z, ldu,
1766 $ work( indwrk ), rwork, iinfo )
1767 IF( iinfo.NE.0 )
THEN
1768 WRITE( nounit, fmt = 9999 )
'ZHPEV(N,' // uplo // ')
',
1769 $ IINFO, N, JTYPE, IOLDSD
1771.LT.
IF( IINFO0 ) THEN
1774 RESULT( NTEST ) = ULPINV
1784 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1785 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1787 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1788 $ ULP*MAX( TEMP1, TEMP2 ) )
1794.LE.
IF( JTYPE7 ) THEN
1796.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
1805.EQ.
IF( IUPLO1 ) THEN
1807 DO 1060 I = MAX( 1, J-KD ), J
1808 V( KD+1+I-J, J ) = A( I, J )
1813 DO 1080 I = J, MIN( N, J+KD )
1814 V( 1+I-J, J ) = A( I, J )
1820 CALL ZHBEV( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
1822.NE.
IF( IINFO0 ) THEN
1823 WRITE( NOUNIT, FMT = 9998 )'zhbev(v,
' // UPLO // ')
',
1824 $ IINFO, N, KD, JTYPE, IOLDSD
1826.LT.
IF( IINFO0 ) THEN
1829 RESULT( NTEST ) = ULPINV
1830 RESULT( NTEST+1 ) = ULPINV
1831 RESULT( NTEST+2 ) = ULPINV
1838 CALL ZHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
1839 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1841.EQ.
IF( IUPLO1 ) THEN
1843 DO 1100 I = MAX( 1, J-KD ), J
1844 V( KD+1+I-J, J ) = A( I, J )
1849 DO 1120 I = J, MIN( N, J+KD )
1850 V( 1+I-J, J ) = A( I, J )
1856 CALL ZHBEV( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
1858.NE.
IF( IINFO0 ) THEN
1859 WRITE( NOUNIT, FMT = 9998 )'zhbev(n,
' // UPLO // ')
',
1860 $ IINFO, N, KD, JTYPE, IOLDSD
1862.LT.
IF( IINFO0 ) THEN
1865 RESULT( NTEST ) = ULPINV
1877 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1878 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1880 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1881 $ ULP*MAX( TEMP1, TEMP2 ) )
1883 CALL ZLACPY( ' ', N, N, A, LDA, V, LDU )
1885 CALL ZHEEVR( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
1886 $ ABSTOL, M, WA1, Z, LDU, IWORK, WORK, LWORK,
1887 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
1889.NE.
IF( IINFO0 ) THEN
1890 WRITE( NOUNIT, FMT = 9999 )'zheevr(v,a,
' // UPLO //
1891 $ ')
', IINFO, N, JTYPE, IOLDSD
1893.LT.
IF( IINFO0 ) THEN
1896 RESULT( NTEST ) = ULPINV
1897 RESULT( NTEST+1 ) = ULPINV
1898 RESULT( NTEST+2 ) = ULPINV
1905 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1907 CALL ZHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
1908 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1911 CALL ZHEEVR( 'n
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
1912 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
1913 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
1915.NE.
IF( IINFO0 ) THEN
1916 WRITE( NOUNIT, FMT = 9999 )'zheevr(n,a,
' // UPLO //
1917 $ ')
', IINFO, N, JTYPE, IOLDSD
1919.LT.
IF( IINFO0 ) THEN
1922 RESULT( NTEST ) = ULPINV
1932 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1933 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1935 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1936 $ ULP*MAX( TEMP1, TEMP2 ) )
1941 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1942 CALL ZHEEVR( 'v
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
1943 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
1944 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
1946.NE.
IF( IINFO0 ) THEN
1947 WRITE( NOUNIT, FMT = 9999 )'zheevr(v,i,
' // UPLO //
1948 $ ')
', IINFO, N, JTYPE, IOLDSD
1950.LT.
IF( IINFO0 ) THEN
1953 RESULT( NTEST ) = ULPINV
1954 RESULT( NTEST+1 ) = ULPINV
1955 RESULT( NTEST+2 ) = ULPINV
1962 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1964 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1965 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1968 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1969 CALL ZHEEVR( 'n
', 'i', uplo, n, a, ldu, vl, vu, il, iu,
1970 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
1971 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1973 IF( iinfo.NE.0 )
THEN
1974 WRITE( nounit, fmt = 9999 )
'ZHEEVR(N,I,' // uplo //
1975 $
')', iinfo, n, jtype, ioldsd
1977 IF( iinfo.LT.0 )
THEN
1980 result( ntest ) = ulpinv
1987 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1988 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1989 result( ntest ) = ( temp1+temp2 ) /
1990 $
max( unfl, ulp*temp3 )
1994 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1995 CALL zheevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
1996 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1997 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1999 IF( iinfo.NE.0 )
THEN
2000 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,V,' // uplo //
2001 $
')', iinfo, n, jtype, ioldsd
2003 IF( iinfo.LT.0 )
THEN
2006 result( ntest ) = ulpinv
2007 result( ntest+1 ) = ulpinv
2008 result( ntest+2 ) = ulpinv
2015 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2017 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2018 $ v, ldu, tau, work, rwork, result( ntest ) )
2021 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2022 CALL zheevr(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2023 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
2024 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
2026 IF( iinfo.NE.0 )
THEN
2027 WRITE( nounit, fmt = 9999 )
'ZHEEVR(N,V,' // uplo //
2028 $
')', iinfo, n, jtype,
2030 IF( iinfo.LT.0 )
THEN
2033 result( ntest ) = ulpinv
2038 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2039 result( ntest ) = ulpinv
2045 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2046 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2048 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2052 result( ntest ) = ( temp1+temp2 ) /
2053 $
max( unfl, temp3*ulp )
2055 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2069 ntestt = ntestt + ntest
2070 CALL dlafts(
'ZST', n, n, jtype, ntest, result, ioldsd,
2071 $ thresh, nounit, nerrs )
2078 CALL alasvm(
'ZST', nounit, nerrs, ntestt, 0 )
2080 9999
FORMAT(
' ZDRVST: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2081 $
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2082 9998
FORMAT(
' ZDRVST: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2083 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,