334 SUBROUTINE zdrvst2stg( 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, , 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+
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, lwedc,
378 $ m, m2, m3, mtypes, n, nerrs, nmats, nmax,
380 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
381 $ RTUNFL, TEMP1, , 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,
402 INTRINSIC abs, dble, int, log,
max,
min, sqrt
405 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
406 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
408 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
421 nmax =
max( nmax, nn( j ) )
428 IF( nsizes.LT.0 )
THEN
430 ELSE IF( badnn )
THEN
432 ELSE IF( ntypes.LT.0 )
THEN
434 ELSE IF( lda.LT.nmax )
THEN
436 ELSE IF( ldu.LT.nmax )
THEN
438 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
443 CALL xerbla(
'ZDRVST2STG', -info )
449 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
454 unfl = dlamch(
'Safe minimum' )
455 ovfl = dlamch(
'Overflow' )
457 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
459 rtunfl = sqrt( unfl )
460 rtovfl = sqrt( ovfl )
465 iseed2( i ) = iseed( i )
466 iseed3( i ) = iseed( i )
472 DO 1220 jsize = 1, nsizes
475 lgn = int( log( dble( n ) ) / log( two ) )
480 lwedc =
max( 2*n+n*n, 2*n*n )
481 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
488 aninv = one / dble(
max( 1, n ) )
490 IF( nsizes.NE.1 )
THEN
491 mtypes =
min( maxtyp, ntypes )
493 mtypes =
min( maxtyp+1, ntypes )
496 DO 1210 jtype = 1, mtypes
497 IF( .NOT.dotype( jtype ) )
503 ioldsd( j ) = iseed( j )
521 IF( mtypes.GT.maxtyp )
524 itype = ktype( jtype )
525 imode = kmode( jtype )
529 GO TO ( 40, 50, 60 )kmagn( jtype )
536 anorm = ( rtovfl*ulp )*aninv
540 anorm = rtunfl*n*ulpinv
545 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
553 IF( itype.EQ.1 )
THEN
556 ELSE IF( itype.EQ.2 )
THEN
561 a( jcol, jcol ) = anorm
564 ELSE IF( itype.EQ.4 )
THEN
568 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
569 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
571 ELSE IF( itype.EQ.5 )
THEN
575 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
576 $ anorm, n, n,
'N', a, lda, work, iinfo )
578 ELSE IF( itype.EQ.7 )
THEN
582 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
583 $
'T',
'N', work( n+1 ), 1, one,
584 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
585 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
587 ELSE IF( itype.EQ.8 )
THEN
591 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
592 $
'T',
'N', work( n+1 ), 1, one,
593 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
594 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
596 ELSE IF( itype.EQ.9 )
THEN
600 ihbw = int( ( n-1 )*dlarnd( 1, iseed3 ) )
601 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
602 $ anorm, ihbw, ihbw,
'Z', u, ldu, work,
607 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
608 DO 100 idiag = -ihbw, ihbw
609 irow = ihbw - idiag + 1
610 j1 =
max( 1, idiag+1 )
611 j2 =
min( n, n+idiag )
614 a( i, j ) = u( irow, j )
621 IF( iinfo.NE.0 )
THEN
622 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
635 il = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
636 iu = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
648 IF( iuplo.EQ.0 )
THEN
656 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
659 CALL zheevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
660 $ rwork, lrwedc, iwork, liwedc, iinfo )
661 IF( iinfo.NE.0 )
THEN
662 WRITE( nounit, fmt = 9999 )
'ZHEEVD(V,' // uplo //
663 $
')', iinfo, n, jtype, ioldsd
665 IF( iinfo.LT.0 )
THEN
668 result( ntest ) = ulpinv
669 result( ntest+1 ) = ulpinv
670 result( ntest+2 ) = ulpinv
677 CALL zhet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
678 $ ldu, tau, work, rwork, result( ntest ) )
680 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
684 $ lwork, rwork, lrwedc, iwork, liwedc, iinfo )
685 IF( iinfo.NE.0 )
THEN
686 WRITE( nounit, fmt = 9999 )
687 $
'ZHEEVD_2STAGE(N,' // uplo //
688 $
')', iinfo, n, jtype, ioldsd
690 IF( iinfo.LT.0 )
THEN
693 result( ntest ) = ulpinv
703 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
704 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
706 result( ntest ) = temp2 /
max( unfl,
707 $ ulp*
max( temp1, temp2 ) )
710 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
715 temp3 =
max( abs( d1( 1 ) ), abs( d1( n ) ) )
717 vl = d1( il ) -
max( half*( d1( il )-d1( il-1 ) ),
718 $ ten*ulp*temp3, ten*rtunfl )
719 ELSE IF( n.GT.0 )
THEN
720 vl = d1( 1 ) -
max( half*( d1( n )-d1( 1 ) ),
721 $ ten*ulp*temp3, ten*rtunfl )
724 vu = d1( iu ) +
max( half*( d1( iu+1 )-d1( iu ) ),
725 $ ten*ulp*temp3, ten*rtunfl )
726 ELSE IF( n.GT.0 )
THEN
727 vu = d1( n ) +
max( half*( d1( n )-d1( 1 ) ),
728 $ ten*ulp*temp3, ten*rtunfl )
736 CALL zheevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
737 $ abstol, m, wa1, z, ldu, work, lwork, rwork,
738 $ iwork, iwork( 5*n+1 ), iinfo )
739 IF( iinfo.NE.0 )
THEN
740 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,A,' // uplo //
741 $
')', iinfo, n, jtype, ioldsd
743 IF( iinfo.LT.0 )
THEN
746 result( ntest ) = ulpinv
747 result( ntest+1 ) = ulpinv
748 result( ntest+2 ) = ulpinv
755 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
757 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
758 $ ldu, tau, work, rwork, result( ntest ) )
762 $ il, iu, abstol, m2, wa2, z, ldu,
763 $ work, lwork, rwork, iwork,
764 $ iwork( 5*n+1 ), iinfo )
765 IF( iinfo.NE.0 )
THEN
766 WRITE( nounit, fmt = 9999 )
767 $
'ZHEEVX_2STAGE(N,A,' // uplo //
768 $
')', iinfo, n, jtype, ioldsd
770 IF( iinfo.LT.0 )
THEN
773 result( ntest ) = ulpinv
783 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
784 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
786 result( ntest ) = temp2 /
max( unfl,
787 $ ulp*
max( temp1, temp2 ) )
790 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
794 CALL zheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
795 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
796 $ iwork, iwork( 5*n+1 ), iinfo )
797 IF( iinfo.NE.0 )
THEN
798 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,I,' // uplo //
799 $
')', iinfo, n, jtype, ioldsd
801 IF( iinfo.LT.0 )
THEN
804 result( ntest ) = ulpinv
811 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
813 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
814 $ v, ldu, tau, work, rwork, result( ntest ) )
819 $ il, iu, abstol, m3, wa3, z, ldu,
820 $ work, lwork, rwork, iwork,
821 $ iwork( 5*n+1 ), iinfo )
822 IF( iinfo.NE.0 )
THEN
823 WRITE( nounit, fmt = 9999 )
824 $
'ZHEEVX_2STAGE(N,I,' // uplo //
825 $
')', iinfo, n, jtype, ioldsd
827 IF( iinfo.LT.0 )
THEN
830 result( ntest ) = ulpinv
837 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
838 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
840 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
844 result( ntest ) = ( temp1+temp2 ) /
845 $
max( unfl, temp3*ulp )
848 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
852 CALL zheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
853 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
854 $ iwork, iwork( 5*n+1 ), iinfo )
855 IF( iinfo.NE.0 )
THEN
856 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,V,' // uplo //
857 $
')', iinfo, n, jtype
859 IF( iinfo.LT.0 )
THEN
862 result( ntest ) = ulpinv
869 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
871 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
872 $ v, ldu, tau, work, rwork, result( ntest ) )
877 $ il, iu, abstol, m3, wa3, z, ldu,
878 $ work, lwork, rwork, iwork,
879 $ iwork( 5*n+1 ), iinfo )
880 IF( iinfo.NE.0 )
THEN
881 WRITE( nounit, fmt = 9999 )
882 $
'ZHEEVX_2STAGE(N,V,' // uplo //
883 $
')', iinfo, n, jtype, ioldsd
885 IF( iinfo.LT.0 )
THEN
888 result( ntest ) = ulpinv
893 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
894 result( ntest ) = ulpinv
900 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
901 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
903 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
907 result( ntest ) = ( temp1+temp2 ) /
908 $
max( unfl, temp3*ulp )
914 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
919 IF( iuplo.EQ.1 )
THEN
923 work( indx ) = a( i, j )
931 work( indx ) = a( i, j )
938 indwrk = n*( n+1 ) / 2 + 1
939 CALL zhpevd(
'V', uplo, n, work, d1, z, ldu,
940 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
942 IF( iinfo.NE.0 )
THEN
943 WRITE( nounit, fmt = 9999 )
'ZHPEVD(V,' // uplo //
944 $
')', iinfo, n, jtype, ioldsd
946 IF( iinfo.LT.0 )
THEN
949 result( ntest ) = ulpinv
950 result( ntest+1 ) = ulpinv
951 result( ntest+2 ) = ulpinv
958 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
959 $ ldu, tau, work, rwork, result( ntest ) )
961 IF( iuplo.EQ.1 )
THEN
965 work( indx ) = a( i, j )
973 work( indx ) = a( i, j )
980 indwrk = n*( n+1 ) / 2 + 1
981 CALL zhpevd(
'N', uplo, n, work, d3, z, ldu,
982 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
984 IF( iinfo.NE.0 )
THEN
985 WRITE( nounit, fmt = 9999 )
'ZHPEVD(N,' // uplo //
986 $
')', iinfo, n, jtype, ioldsd
988 IF( iinfo.LT.0 )
THEN
991 result( ntest ) = ulpinv
1001 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1002 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1004 result( ntest ) = temp2 /
max( unfl,
1005 $ ulp*
max( temp1, temp2 ) )
1011 IF( iuplo.EQ.1 )
THEN
1015 work( indx ) = a( i, j )
1023 work( indx ) = a( i, j )
1032 temp3 =
max( abs( d1( 1 ) ), abs( d1( n ) ) )
1034 vl = d1( il ) -
max( half*( d1( il )-d1( il-1 ) ),
1035 $ ten*ulp*temp3, ten*rtunfl )
1036 ELSE IF( n.GT.0 )
THEN
1037 vl = d1( 1 ) -
max( half*( d1( n )-d1( 1 ) ),
1038 $ ten*ulp*temp3, ten*rtunfl )
1041 vu = d1( iu ) +
max( half*( d1( iu+1 )-d1( iu ) ),
1042 $ ten*ulp*temp3, ten*rtunfl )
1043 ELSE IF( n.GT.0 )
THEN
1044 vu = d1( n ) +
max( half*( d1( n )-d1( 1 ) ),
1045 $ ten*ulp*temp3, ten*rtunfl )
1053 CALL zhpevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1054 $ abstol, m, wa1, z, ldu, v, rwork, iwork,
1055 $ iwork( 5*n+1 ), iinfo )
1056 IF( iinfo.NE.0 )
THEN
1057 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,A,' // uplo //
1058 $
')', iinfo, n, jtype, ioldsd
1060 IF( iinfo.LT.0 )
THEN
1063 result( ntest ) = ulpinv
1064 result( ntest+1 ) = ulpinv
1065 result( ntest+2 ) = ulpinv
1072 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1073 $ ldu, tau, work, rwork, result( ntest ) )
1077 IF( iuplo.EQ.1 )
THEN
1081 work( indx ) = a( i, j )
1089 work( indx ) = a( i, j )
1095 CALL zhpevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1096 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1097 $ iwork( 5*n+1 ), iinfo )
1098 IF( iinfo.NE.0 )
THEN
1099 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,A,' // uplo //
1100 $
')', iinfo, n, jtype, ioldsd
1102 IF( iinfo.LT.0 )
THEN
1105 result( ntest ) = ulpinv
1115 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1116 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1118 result( ntest ) = temp2 /
max( unfl,
1119 $ ulp*
max( temp1, temp2 ) )
1123 IF( iuplo.EQ.1 )
THEN
1127 work( indx ) = a( i, j )
1135 work( indx ) = a( i, j )
1141 CALL zhpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1142 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1143 $ iwork( 5*n+1 ), iinfo )
1144 IF( iinfo.NE.0 )
THEN
1145 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,I,' // uplo //
1146 $
')', iinfo, n, jtype, ioldsd
1148 IF( iinfo.LT.0 )
THEN
1151 result( ntest ) = ulpinv
1152 result( ntest+1 ) = ulpinv
1153 result( ntest+2 ) = ulpinv
1160 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1161 $ v, ldu, tau, work, rwork, result( ntest ) )
1165 IF( iuplo.EQ.1 )
THEN
1169 work( indx ) = a( i, j )
1177 work( indx ) = a( i, j )
1183 CALL zhpevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1184 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1185 $ iwork( 5*n+1 ), iinfo )
1186 IF( iinfo.NE.0 )
THEN
1187 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,I,' // uplo //
1188 $
')', iinfo, n, jtype, ioldsd
1190 IF( iinfo.LT.0 )
THEN
1193 result( ntest ) = ulpinv
1200 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1201 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1203 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1207 result( ntest ) = ( temp1+temp2 ) /
1208 $
max( unfl, temp3*ulp )
1212 IF( iuplo.EQ.1 )
THEN
1216 work( indx ) = a( i, j )
1224 work( indx ) = a( i, j )
1230 CALL zhpevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1231 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1232 $ iwork( 5*n+1 ), iinfo )
1233 IF( iinfo.NE.0 )
THEN
1234 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,V,' // uplo //
1235 $
')', iinfo, n, jtype, ioldsd
1237 IF( iinfo.LT.0 )
THEN
1240 result( ntest ) = ulpinv
1241 result( ntest+1 ) = ulpinv
1242 result( ntest+2 ) = ulpinv
1249 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1250 $ v, ldu, tau, work, rwork, result( ntest ) )
1254 IF( iuplo.EQ.1 )
THEN
1258 work( indx ) = a( i, j )
1266 work( indx ) = a( i, j )
1272 CALL zhpevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
1273 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1274 $ iwork( 5*n+1 ), iinfo )
1275 IF( iinfo.NE.0 )
THEN
1276 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,V,' // uplo //
1277 $
')', iinfo, n, jtype, ioldsd
1279 IF( iinfo.LT.0 )
THEN
1282 result( ntest ) = ulpinv
1287 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1288 result( ntest ) = ulpinv
1294 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1295 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1297 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1301 result( ntest ) = ( temp1+temp2 ) /
1302 $
max( unfl, temp3*ulp )
1308 IF( jtype.LE.7 )
THEN
1310 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1319 IF( iuplo.EQ.1 )
THEN
1321 DO 560 i =
max( 1, j-kd ), j
1322 v( kd+1+i-j, j ) = a( i, j )
1327 DO 580 i = j,
min( n, j+kd )
1328 v( 1+i-j, j ) = a( i, j )
1334 CALL zhbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1335 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1336 IF( iinfo.NE.0 )
THEN
1337 WRITE( nounit, fmt = 9998 )
'ZHBEVD(V,' // uplo //
1338 $
')', iinfo, n, kd, jtype, ioldsd
1340 IF( iinfo.LT.0 )
THEN
1343 result( ntest ) = ulpinv
1344 result( ntest+1 ) = ulpinv
1345 result( ntest+2 ) = ulpinv
1352 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1353 $ ldu, tau, work, rwork, result( ntest ) )
1355 IF( iuplo.EQ.1 )
THEN
1357 DO 600 i =
max( 1, j-kd ), j
1358 v( kd+1+i-j, j ) = a( i, j )
1363 DO 620 i = j,
min( n, j+kd )
1364 v( 1+i-j, j ) = a( i, j )
1371 $ z, ldu, work, lwork, rwork,
1372 $ lrwedc, iwork, liwedc, iinfo )
1373 IF( iinfo.NE.0 )
THEN
1374 WRITE( nounit, fmt = 9998 )
1375 $
'ZHBEVD_2STAGE(N,' // uplo //
1376 $
')', iinfo, n, kd, jtype, ioldsd
1378 IF( iinfo.LT.0 )
THEN
1381 result( ntest ) = ulpinv
1391 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1392 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1394 result( ntest ) = temp2 /
max( unfl,
1395 $ ulp*
max( temp1, temp2 ) )
1401 IF( iuplo.EQ.1 )
THEN
1403 DO 660 i =
max( 1, j-kd ), j
1404 v( kd+1+i-j, j ) = a( i, j )
1409 DO 680 i = j,
min( n, j+kd )
1410 v( 1+i-j, j ) = a( i, j )
1416 CALL zhbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
1417 $ vu, il, iu, abstol, m, wa1, z, ldu, work,
1418 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1419 IF( iinfo.NE.0 )
THEN
1420 WRITE( nounit, fmt = 9999 )
'ZHBEVX(V,A,' // uplo //
1421 $
')', iinfo, n, kd, jtype, ioldsd
1423 IF( iinfo.LT.0 )
THEN
1426 result( ntest ) = ulpinv
1427 result( ntest+1 ) = ulpinv
1428 result( ntest+2 ) = ulpinv
1435 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1436 $ ldu, tau, work, rwork, result( ntest ) )
1440 IF( iuplo.EQ.1 )
THEN
1442 DO 700 i =
max( 1, j-kd ), j
1443 v( kd+1+i-j, j ) = a( i, j )
1448 DO 720 i = j,
min( n, j+kd )
1449 v( 1+i-j, j ) = a( i, j )
1455 $ u, ldu, vl, vu, il, iu, abstol,
1456 $ m2, wa2, z, ldu, work, lwork,
1457 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1458 IF( iinfo.NE.0 )
THEN
1459 WRITE( nounit, fmt = 9998 )
1460 $
'ZHBEVX_2STAGE(N,A,' // uplo //
1461 $
')', iinfo, n, kd, jtype, ioldsd
1463 IF( iinfo.LT.0 )
THEN
1466 result( ntest ) = ulpinv
1476 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1477 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1479 result( ntest ) = temp2 /
max( unfl,
1480 $ ulp*
max( temp1, temp2 ) )
1487 IF( iuplo.EQ.1 )
THEN
1489 DO 760 i =
max( 1, j-kd ), j
1490 v( kd+1+i-j, j ) = a( i, j )
1495 DO 780 i = j,
min( n, j+kd )
1496 v( 1+i-j, j ) = a( i, j )
1501 CALL zhbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1502 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1503 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1504 IF( iinfo.NE.0 )
THEN
1505 WRITE( nounit, fmt = 9998 )
'ZHBEVX(V,I,' // uplo //
1506 $
')', iinfo, n, kd, jtype, ioldsd
1508 IF( iinfo.LT.0 )
THEN
1511 result( ntest ) = ulpinv
1512 result( ntest+1 ) = ulpinv
1513 result( ntest+2 ) = ulpinv
1520 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1521 $ v, ldu, tau, work, rwork, result( ntest ) )
1525 IF( iuplo.EQ.1 )
THEN
1527 DO 800 i =
max( 1, j-kd ), j
1528 v( kd+1+i-j, j ) = a( i, j )
1533 DO 820 i = j,
min( n, j+kd )
1534 v( 1+i-j, j ) = a( i, j )
1539 $ u, ldu, vl, vu, il, iu, abstol,
1540 $ m3, wa3, z, ldu, work, lwork,
1541 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1542 IF( iinfo.NE.0 )
THEN
1543 WRITE( nounit, fmt = 9998 )
1544 $
'ZHBEVX_2STAGE(N,I,' // uplo //
1545 $
')', iinfo, n, kd, jtype, ioldsd
1547 IF( iinfo.LT.0 )
THEN
1550 result( ntest ) = ulpinv
1557 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1558 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1560 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1564 result( ntest ) = ( temp1+temp2 ) /
1565 $
max( unfl, temp3*ulp )
1572 IF( iuplo.EQ.1 )
THEN
1574 DO 850 i =
max( 1, j-kd ), j
1575 v( kd+1+i-j, j ) = a( i, j )
1580 DO 870 i = j,
min( n, j+kd )
1581 v( 1+i-j, j ) = a( i, j )
1585 CALL zhbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1586 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1587 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1588 IF( iinfo.NE.0 )
THEN
1589 WRITE( nounit, fmt = 9998 )
'ZHBEVX(V,V,' // uplo //
1590 $
')', iinfo, n, kd, jtype, ioldsd
1592 IF( iinfo.LT.0 )
THEN
1595 result( ntest ) = ulpinv
1596 result( ntest+1 ) = ulpinv
1597 result( ntest+2 ) = ulpinv
1604 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1605 $ v, ldu, tau, work, rwork, result( ntest ) )
1609 IF( iuplo.EQ.1 )
THEN
1611 DO 890 i =
max( 1, j-kd ), j
1612 v( kd+1+i-j, j ) = a( i, j )
1617 DO 910 i = j,
min( n, j+kd )
1618 v( 1+i-j, j ) = a( i, j )
1623 $ u, ldu, vl, vu, il, iu, abstol,
1624 $ m3, wa3, z, ldu, work, lwork,
1625 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1626 IF( iinfo.NE.0 )
THEN
1627 WRITE( nounit, fmt = 9998 )
1628 $
'ZHBEVX_2STAGE(N,V,' // uplo //
1629 $
')', iinfo, n, kd, jtype, ioldsd
1631 IF( iinfo.LT.0 )
THEN
1634 result( ntest ) = ulpinv
1639 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1640 result( ntest ) = ulpinv
1646 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1647 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1649 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1653 result( ntest ) = ( temp1+temp2 ) /
1654 $
max( unfl, temp3*ulp )
1660 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
1663 CALL zheev(
'V', uplo, n, a, ldu, d1, work, lwork, rwork,
1665 IF( iinfo.NE.0 )
THEN
1666 WRITE( nounit, fmt = 9999 )
'ZHEEV(V,' // uplo //
')',
1667 $ iinfo, n, jtype, ioldsd
1669 IF( iinfo.LT.0 )
THEN
1672 result( ntest ) = ulpinv
1673 result( ntest+1 ) = ulpinv
1674 result( ntest+2 ) = ulpinv
1681 CALL zhet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1682 $ ldu, tau, work, rwork, result( ntest ) )
1684 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1688 $ work, lwork, rwork, iinfo )
1689 IF( iinfo.NE.0 )
THEN
1690 WRITE( nounit, fmt = 9999 )
1691 $
'ZHEEV_2STAGE(N,' // uplo //
')',
1692 $ iinfo, n, jtype, ioldsd
1694 IF( iinfo.LT.0 )
THEN
1697 result( ntest ) = ulpinv
1707 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1708 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1710 result( ntest ) = temp2 /
max( unfl,
1711 $ ulp*
max( temp1, temp2 ) )
1715 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1722 IF( iuplo.EQ.1 )
THEN
1726 work( indx ) = a( i, j )
1734 work( indx ) = a( i, j )
1741 indwrk = n*( n+1 ) / 2 + 1
1742 CALL zhpev(
'V', uplo, n, work, d1, z, ldu,
1743 $ work( indwrk ), rwork, iinfo )
1744 IF( iinfo.NE.0 )
THEN
1745 WRITE( nounit, fmt = 9999 )
'ZHPEV(V,' // uplo //
')',
1746 $ iinfo, n, jtype, ioldsd
1748 IF( iinfo.LT.0 )
THEN
1751 result( ntest ) = ulpinv
1752 result( ntest+1 ) = ulpinv
1753 result( ntest+2 ) = ulpinv
1760 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1761 $ ldu, tau, work, rwork, result( ntest ) )
1763 IF( iuplo.EQ.1 )
THEN
1767 work( indx ) = a( i, j )
1775 work( indx ) = a( i, j )
1782 indwrk = n*( n+1 ) / 2 + 1
1783 CALL zhpev(
'N', uplo, n, work, d3, z, ldu,
1784 $ work( indwrk ), rwork, iinfo )
1785 IF( iinfo.NE.0 )
THEN
1786 WRITE( nounit, fmt = 9999 )
'ZHPEV(N,' // uplo //
')',
1787 $ iinfo, n, jtype, ioldsd
1789 IF( iinfo.LT.0 )
THEN
1792 result( ntest ) = ulpinv
1802 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1803 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1805 result( ntest ) = temp2 /
max( unfl,
1806 $ ulp*
max( temp1, temp2 ) )
1812 IF( jtype.LE.7 )
THEN
1814 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1823 IF( iuplo.EQ.1 )
THEN
1826 v( kd+1+i-j, j ) = a( i, j )
1831 DO 1080 i = j,
min( n, j+kd )
1832 v( 1+i-j, j ) = a( i, j )
1838 CALL zhbev(
'V', uplo, n, kd, v,
1840 IF( iinfo.NE.0 )
THEN
1841 WRITE( nounit, fmt = 9998 )
'ZHBEV(V,' // uplo //
')',
1842 $ iinfo, n, kd, jtype, ioldsd
1844 IF( iinfo.LT.0 )
THEN
1847 result( ntest ) = ulpinv
1848 result( ntest+1 ) = ulpinv
1849 result( ntest+2 ) = ulpinv
1856 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1857 $ ldu, tau, work, rwork, result( ntest ) )
1859 IF( iuplo.EQ.1 )
THEN
1861 DO 1100 i =
max( 1, j-kd ), j
1862 v( kd+1+i-j, j ) = a( i, j )
1867 DO 1120 i = j,
min( n, j+kd )
1868 v( 1+i-j, j ) = a( i, j )
1874 CALL zhbev_2stage(
'N', uplo, n, kd, v, ldu, d3, z, ldu,
1875 $ work, lwork, rwork, iinfo )
1876 IF( iinfo.NE.0 )
THEN
1877 WRITE( nounit, fmt = 9998 )
1878 $
'ZHBEV_2STAGE(N,' // uplo //
')',
1879 $ iinfo, n, kd, jtype, ioldsd
1881 IF( iinfo.LT.0 )
THEN
1884 result( ntest ) = ulpinv
1896 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1897 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1899 result( ntest ) = temp2 /
max( unfl,
1900 $ ulp*
max( temp1, temp2 ) )
1902 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
1904 CALL zheevr( 'v',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1905 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
1906 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1908 IF( iinfo.NE.0 )
THEN
1909 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,A,' // uplo //
1910 $
')', iinfo, n, jtype, ioldsd
1912 IF( iinfo.LT.0 )
THEN
1915 result( ntest ) = ulpinv
1916 result( ntest+1 ) = ulpinv
1917 result( ntest+2 ) = ulpinv
1924 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1926 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1927 $ ldu, tau, work, rwork, result( ntest ) )
1931 $ il, iu, abstol, m2, wa2, z, ldu,
1932 $ iwork, work, lwork, rwork, lrwork,
1933 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1934 IF( iinfo.NE.0 )
THEN
1935 WRITE( nounit, fmt = 9999 )
1936 $
'ZHEEVR_2STAGE(N,A,' // uplo //
1937 $
')', iinfo, n, jtype, ioldsd
1939 IF( iinfo.LT.0 )
THEN
1942 result( ntest ) = ulpinv
1952 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1953 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1955 result( ntest ) = temp2 /
max( unfl,
1956 $ ulp*
max( temp1, temp2 ) )
1961 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1962 CALL zheevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1963 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1964 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1966 IF( iinfo.NE.0 )
THEN
1967 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,I,' // uplo //
1968 $
')', iinfo, n, jtype, ioldsd
1970 IF( iinfo.LT.0 )
THEN
1973 result( ntest ) = ulpinv
1974 result( ntest+1 ) = ulpinv
1975 result( ntest+2 ) = ulpinv
1982 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1984 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1985 $ v, ldu, tau, work, rwork, result( ntest ) )
1988 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1990 $ IL, IU, ABSTOL, M3, WA3, Z, LDU,
1991 $ IWORK, WORK, LWORK, RWORK, LRWORK,
1992 $ IWORK( 2*N+1 ), LIWORK-2*N, IINFO )
1993.NE.
IF( IINFO0 ) THEN
1994 WRITE( NOUNIT, FMT = 9999 )
1996 $ ')
', IINFO, N, JTYPE, IOLDSD
1998.LT.
IF( IINFO0 ) THEN
2001 RESULT( NTEST ) = ULPINV
2008 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2009 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2010 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2011 $ MAX( UNFL, ULP*TEMP3 )
2015 CALL ZLACPY( ' ', n, n, v, ldu, a, lda )
2016 CALL zheevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2017 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2018 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
2020 IF( iinfo.NE.0 )
THEN
2021 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,V,' // uplo //
2022 $
')', iinfo, n, jtype, ioldsd
2024 IF( iinfo.LT.0 )
THEN
2027 result( ntest ) = ulpinv
2028 result( ntest+1 ) = ulpinv
2029 result( ntest+2 ) = ulpinv
2036 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2038 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2039 $ v, ldu, tau, work, rwork, result( ntest ) )
2042 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2044 $ il, iu, abstol, m3, wa3, z, ldu,
2045 $ iwork, work, lwork, rwork, lrwork,
2046 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
2047 IF( iinfo.NE.0 )
THEN
2048 WRITE( nounit, fmt = 9999 )
2049 $
'ZHEEVR_2STAGE(N,V,' // uplo //
2050 $
')', iinfo, n, jtype, ioldsd
2052 IF( iinfo.LT.0 )
THEN
2055 result( ntest ) = ulpinv
2060 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2061 result( ntest ) = ulpinv
2067 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2068 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2070 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2074 result( ntest ) = ( temp1+temp2 ) /
2075 $
max( unfl, temp3*ulp )
2077 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2091 ntestt = ntestt + ntest
2092 CALL dlafts(
'ZST', n, n, jtype, ntest, result, ioldsd,
2093 $ thresh, nounit, nerrs )
2100 CALL alasvm(
'ZST', nounit, nerrs, ntestt, 0 )
2102 9999
FORMAT(
' ZDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2103 $
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2104 9998
FORMAT(
' ZDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2105 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,