336 SUBROUTINE zdrvst2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
337 $ NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U,
338 $ LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK,
339 $ IWORK, LIWORK, RESULT, INFO )
347 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
349 DOUBLE PRECISION THRESH
353 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
354 DOUBLE PRECISION D1( * ), D2( * ), D3( * ), RESULT( * ),
355 $ rwork( * ), wa1( * ), wa2( * ), wa3( * )
356 COMPLEX*16 A( LDA, * ), TAU( * ), U( LDU, * ),
357 $ v( ldu, * ), work( * ), z( ldu, * )
364 DOUBLE PRECISION ZERO, ONE, TWO, TEN
365 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0, two = 2.0d+0,
367 DOUBLE PRECISION HALF
368 parameter( half = one / two )
369 COMPLEX*16 CZERO, CONE
370 parameter( czero = ( 0.0d+0, 0.0d+0 ),
371 $ cone = ( 1.0d+0, 0.0d+0 ) )
373 parameter( maxtyp = 18 )
378 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDWRK, INDX,
379 $ irow, itemp, itype, iu, iuplo, j, j1, j2, jcol,
380 $ jsize, jtype, kd, lgn, liwedc, lrwedc, lwedc,
381 $ m, m2, m3, mtypes, n, nerrs, nmats, nmax,
383 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
384 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
388 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
389 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
393 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
394 EXTERNAL DLAMCH, DLARND, DSXT1
405 INTRINSIC abs, dble, int, log, max, min, sqrt
408 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
409 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
411 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
424 nmax = max( nmax, nn( j ) )
431 IF( nsizes.LT.0 )
THEN
433 ELSE IF( badnn )
THEN
435 ELSE IF( ntypes.LT.0 )
THEN
437 ELSE IF( lda.LT.nmax )
THEN
439 ELSE IF( ldu.LT.nmax )
THEN
441 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
446 CALL xerbla(
'ZDRVST2STG', -info )
452 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
457 unfl = dlamch(
'Safe minimum' )
458 ovfl = dlamch(
'Overflow' )
460 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
462 rtunfl = sqrt( unfl )
463 rtovfl = sqrt( ovfl )
468 iseed2( i ) = iseed( i )
469 iseed3( i ) = iseed( i )
475 DO 1220 jsize = 1, nsizes
478 lgn = int( log( dble( n ) ) / log( two ) )
483 lwedc = max( 2*n+n*n, 2*n*n )
484 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
491 aninv = one / dble( max( 1, n ) )
493 IF( nsizes.NE.1 )
THEN
494 mtypes = min( maxtyp, ntypes )
496 mtypes = min( maxtyp+1, ntypes )
499 DO 1210 jtype = 1, mtypes
500 IF( .NOT.dotype( jtype ) )
506 ioldsd( j ) = iseed( j )
524 IF( mtypes.GT.maxtyp )
527 itype = ktype( jtype )
528 imode = kmode( jtype )
532 GO TO ( 40, 50, 60 )kmagn( jtype )
539 anorm = ( rtovfl*ulp )*aninv
543 anorm = rtunfl*n*ulpinv
548 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
556 IF( itype.EQ.1 )
THEN
559 ELSE IF( itype.EQ.2 )
THEN
564 a( jcol, jcol ) = anorm
567 ELSE IF( itype.EQ.4 )
THEN
571 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
572 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
574 ELSE IF( itype.EQ.5 )
THEN
578 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
579 $ anorm, n, n,
'N', a, lda, work, iinfo )
581 ELSE IF( itype.EQ.7 )
THEN
585 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
586 $
'T',
'N', work( n+1 ), 1, one,
587 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
588 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
590 ELSE IF( itype.EQ.8 )
THEN
594 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
595 $
'T',
'N', work( n+1 ), 1, one,
596 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
597 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
599 ELSE IF( itype.EQ.9 )
THEN
603 ihbw = int( ( n-1 )*dlarnd( 1, iseed3 ) )
604 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
605 $ anorm, ihbw, ihbw,
'Z', u, ldu, work,
610 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
611 DO 100 idiag = -ihbw, ihbw
612 irow = ihbw - idiag + 1
613 j1 = max( 1, idiag+1 )
614 j2 = min( n, n+idiag )
617 a( i, j ) = u( irow, j )
624 IF( iinfo.NE.0 )
THEN
625 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
638 il = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
639 iu = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
651 IF( iuplo.EQ.0 )
THEN
659 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
662 CALL zheevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
663 $ rwork, lrwedc, iwork, liwedc, iinfo )
664 IF( iinfo.NE.0 )
THEN
665 WRITE( nounit, fmt = 9999 )
'ZHEEVD(V,' // uplo //
666 $
')', iinfo, n, jtype, ioldsd
668 IF( iinfo.LT.0 )
THEN
671 result( ntest ) = ulpinv
672 result( ntest+1 ) = ulpinv
673 result( ntest+2 ) = ulpinv
680 CALL zhet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
681 $ ldu, tau, work, rwork, result( ntest ) )
683 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
687 $ lwork, rwork, lrwedc, iwork, liwedc, iinfo )
688 IF( iinfo.NE.0 )
THEN
689 WRITE( nounit, fmt = 9999 )
690 $
'ZHEEVD_2STAGE(N,' // uplo //
691 $
')', iinfo, n, jtype, ioldsd
693 IF( iinfo.LT.0 )
THEN
696 result( ntest ) = ulpinv
706 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
707 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
709 result( ntest ) = temp2 / max( unfl,
710 $ ulp*max( temp1, temp2 ) )
713 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
718 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
720 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
721 $ ten*ulp*temp3, ten*rtunfl )
722 ELSE IF( n.GT.0 )
THEN
723 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
724 $ ten*ulp*temp3, ten*rtunfl )
727 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
728 $ ten*ulp*temp3, ten*rtunfl )
729 ELSE IF( n.GT.0 )
THEN
730 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
731 $ ten*ulp*temp3, ten*rtunfl )
739 CALL zheevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
740 $ abstol, m, wa1, z, ldu, work, lwork, rwork,
741 $ iwork, iwork( 5*n+1 ), iinfo )
742 IF( iinfo.NE.0 )
THEN
743 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,A,' // uplo //
744 $
')', iinfo, n, jtype, ioldsd
746 IF( iinfo.LT.0 )
THEN
749 result( ntest ) = ulpinv
750 result( ntest+1 ) = ulpinv
751 result( ntest+2 ) = ulpinv
758 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
760 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
761 $ ldu, tau, work, rwork, result( ntest ) )
765 $ il, iu, abstol, m2, wa2, z, ldu,
766 $ work, lwork, rwork, iwork,
767 $ iwork( 5*n+1 ), iinfo )
768 IF( iinfo.NE.0 )
THEN
769 WRITE( nounit, fmt = 9999 )
770 $
'ZHEEVX_2STAGE(N,A,' // uplo //
771 $
')', iinfo, n, jtype, ioldsd
773 IF( iinfo.LT.0 )
THEN
776 result( ntest ) = ulpinv
786 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
787 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
789 result( ntest ) = temp2 / max( unfl,
790 $ ulp*max( temp1, temp2 ) )
793 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
797 CALL zheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
798 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
799 $ iwork, iwork( 5*n+1 ), iinfo )
800 IF( iinfo.NE.0 )
THEN
801 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,I,' // uplo //
802 $
')', iinfo, n, jtype, ioldsd
804 IF( iinfo.LT.0 )
THEN
807 result( ntest ) = ulpinv
814 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
816 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
817 $ v, ldu, tau, work, rwork, result( ntest ) )
822 $ il, iu, abstol, m3, wa3, z, ldu,
823 $ work, lwork, rwork, iwork,
824 $ iwork( 5*n+1 ), iinfo )
825 IF( iinfo.NE.0 )
THEN
826 WRITE( nounit, fmt = 9999 )
827 $
'ZHEEVX_2STAGE(N,I,' // uplo //
828 $
')', iinfo, n, jtype, ioldsd
830 IF( iinfo.LT.0 )
THEN
833 result( ntest ) = ulpinv
840 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
841 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
843 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
847 result( ntest ) = ( temp1+temp2 ) /
848 $ max( unfl, temp3*ulp )
851 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
855 CALL zheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
856 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
857 $ iwork, iwork( 5*n+1 ), iinfo )
858 IF( iinfo.NE.0 )
THEN
859 WRITE( nounit, fmt = 9999 )
'ZHEEVX(V,V,' // uplo //
860 $
')', iinfo, n, jtype, ioldsd
862 IF( iinfo.LT.0 )
THEN
865 result( ntest ) = ulpinv
872 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
874 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
875 $ v, ldu, tau, work, rwork, result( ntest ) )
880 $ il, iu, abstol, m3, wa3, z, ldu,
881 $ work, lwork, rwork, iwork,
882 $ iwork( 5*n+1 ), iinfo )
883 IF( iinfo.NE.0 )
THEN
884 WRITE( nounit, fmt = 9999 )
885 $
'ZHEEVX_2STAGE(N,V,' // uplo //
886 $
')', iinfo, n, jtype, ioldsd
888 IF( iinfo.LT.0 )
THEN
891 result( ntest ) = ulpinv
896 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
897 result( ntest ) = ulpinv
903 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
904 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
906 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
910 result( ntest ) = ( temp1+temp2 ) /
911 $ max( unfl, temp3*ulp )
917 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
922 IF( iuplo.EQ.1 )
THEN
926 work( indx ) = a( i, j )
934 work( indx ) = a( i, j )
941 indwrk = n*( n+1 ) / 2 + 1
942 CALL zhpevd(
'V', uplo, n, work, d1, z, ldu,
943 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
945 IF( iinfo.NE.0 )
THEN
946 WRITE( nounit, fmt = 9999 )
'ZHPEVD(V,' // uplo //
947 $
')', iinfo, n, jtype, ioldsd
949 IF( iinfo.LT.0 )
THEN
952 result( ntest ) = ulpinv
953 result( ntest+1 ) = ulpinv
954 result( ntest+2 ) = ulpinv
961 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
962 $ ldu, tau, work, rwork, result( ntest ) )
964 IF( iuplo.EQ.1 )
THEN
968 work( indx ) = a( i, j )
976 work( indx ) = a( i, j )
983 indwrk = n*( n+1 ) / 2 + 1
984 CALL zhpevd(
'N', uplo, n, work, d3, z, ldu,
985 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
987 IF( iinfo.NE.0 )
THEN
988 WRITE( nounit, fmt = 9999 )
'ZHPEVD(N,' // uplo //
989 $
')', iinfo, n, jtype, ioldsd
991 IF( iinfo.LT.0 )
THEN
994 result( ntest ) = ulpinv
1004 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1005 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1007 result( ntest ) = temp2 / max( unfl,
1008 $ ulp*max( temp1, temp2 ) )
1014 IF( iuplo.EQ.1 )
THEN
1018 work( indx ) = a( i, j )
1026 work( indx ) = a( i, j )
1035 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1037 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1038 $ ten*ulp*temp3, ten*rtunfl )
1039 ELSE IF( n.GT.0 )
THEN
1040 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1041 $ ten*ulp*temp3, ten*rtunfl )
1044 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1045 $ ten*ulp*temp3, ten*rtunfl )
1046 ELSE IF( n.GT.0 )
THEN
1047 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1048 $ ten*ulp*temp3, ten*rtunfl )
1056 CALL zhpevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1057 $ abstol, m, wa1, z, ldu, v, rwork, iwork,
1058 $ iwork( 5*n+1 ), iinfo )
1059 IF( iinfo.NE.0 )
THEN
1060 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,A,' // uplo //
1061 $
')', iinfo, n, jtype, ioldsd
1063 IF( iinfo.LT.0 )
THEN
1066 result( ntest ) = ulpinv
1067 result( ntest+1 ) = ulpinv
1068 result( ntest+2 ) = ulpinv
1075 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1076 $ ldu, tau, work, rwork, result( ntest ) )
1080 IF( iuplo.EQ.1 )
THEN
1084 work( indx ) = a( i, j )
1092 work( indx ) = a( i, j )
1098 CALL zhpevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1099 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1100 $ iwork( 5*n+1 ), iinfo )
1101 IF( iinfo.NE.0 )
THEN
1102 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,A,' // uplo //
1103 $
')', iinfo, n, jtype, ioldsd
1105 IF( iinfo.LT.0 )
THEN
1108 result( ntest ) = ulpinv
1118 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1119 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1121 result( ntest ) = temp2 / max( unfl,
1122 $ ulp*max( temp1, temp2 ) )
1126 IF( iuplo.EQ.1 )
THEN
1130 work( indx ) = a( i, j )
1138 work( indx ) = a( i, j )
1144 CALL zhpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1145 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1146 $ iwork( 5*n+1 ), iinfo )
1147 IF( iinfo.NE.0 )
THEN
1148 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,I,' // uplo //
1149 $
')', iinfo, n, jtype, ioldsd
1151 IF( iinfo.LT.0 )
THEN
1154 result( ntest ) = ulpinv
1155 result( ntest+1 ) = ulpinv
1156 result( ntest+2 ) = ulpinv
1163 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1164 $ v, ldu, tau, work, rwork, result( ntest ) )
1168 IF( iuplo.EQ.1 )
THEN
1172 work( indx ) = a( i, j )
1180 work( indx ) = a( i, j )
1186 CALL zhpevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1187 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1188 $ iwork( 5*n+1 ), iinfo )
1189 IF( iinfo.NE.0 )
THEN
1190 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,I,' // uplo //
1191 $
')', iinfo, n, jtype, ioldsd
1193 IF( iinfo.LT.0 )
THEN
1196 result( ntest ) = ulpinv
1203 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1204 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1206 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1210 result( ntest ) = ( temp1+temp2 ) /
1211 $ max( unfl, temp3*ulp )
1215 IF( iuplo.EQ.1 )
THEN
1219 work( indx ) = a( i, j )
1227 work( indx ) = a( i, j )
1233 CALL zhpevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1234 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1235 $ iwork( 5*n+1 ), iinfo )
1236 IF( iinfo.NE.0 )
THEN
1237 WRITE( nounit, fmt = 9999 )
'ZHPEVX(V,V,' // uplo //
1238 $
')', iinfo, n, jtype, ioldsd
1240 IF( iinfo.LT.0 )
THEN
1243 result( ntest ) = ulpinv
1244 result( ntest+1 ) = ulpinv
1245 result( ntest+2 ) = ulpinv
1252 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1253 $ v, ldu, tau, work, rwork, result( ntest ) )
1257 IF( iuplo.EQ.1 )
THEN
1261 work( indx ) = a( i, j )
1269 work( indx ) = a( i, j )
1275 CALL zhpevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
1276 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1277 $ iwork( 5*n+1 ), iinfo )
1278 IF( iinfo.NE.0 )
THEN
1279 WRITE( nounit, fmt = 9999 )
'ZHPEVX(N,V,' // uplo //
1280 $
')', iinfo, n, jtype, ioldsd
1282 IF( iinfo.LT.0 )
THEN
1285 result( ntest ) = ulpinv
1290 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1291 result( ntest ) = ulpinv
1297 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1298 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1300 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1304 result( ntest ) = ( temp1+temp2 ) /
1305 $ max( unfl, temp3*ulp )
1311 IF( jtype.LE.7 )
THEN
1313 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1322 IF( iuplo.EQ.1 )
THEN
1324 DO 560 i = max( 1, j-kd ), j
1325 v( kd+1+i-j, j ) = a( i, j )
1330 DO 580 i = j, min( n, j+kd )
1331 v( 1+i-j, j ) = a( i, j )
1337 CALL zhbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1338 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1339 IF( iinfo.NE.0 )
THEN
1340 WRITE( nounit, fmt = 9998 )
'ZHBEVD(V,' // uplo //
1341 $
')', iinfo, n, kd, jtype, ioldsd
1343 IF( iinfo.LT.0 )
THEN
1346 result( ntest ) = ulpinv
1347 result( ntest+1 ) = ulpinv
1348 result( ntest+2 ) = ulpinv
1355 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1356 $ ldu, tau, work, rwork, result( ntest ) )
1358 IF( iuplo.EQ.1 )
THEN
1360 DO 600 i = max( 1, j-kd ), j
1361 v( kd+1+i-j, j ) = a( i, j )
1366 DO 620 i = j, min( n, j+kd )
1367 v( 1+i-j, j ) = a( i, j )
1374 $ z, ldu, work, lwork, rwork,
1375 $ lrwedc, iwork, liwedc, iinfo )
1376 IF( iinfo.NE.0 )
THEN
1377 WRITE( nounit, fmt = 9998 )
1378 $
'ZHBEVD_2STAGE(N,' // uplo //
1379 $
')', iinfo, n, kd, jtype, ioldsd
1381 IF( iinfo.LT.0 )
THEN
1384 result( ntest ) = ulpinv
1394 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1395 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1397 result( ntest ) = temp2 / max( unfl,
1398 $ ulp*max( temp1, temp2 ) )
1404 IF( iuplo.EQ.1 )
THEN
1406 DO 660 i = max( 1, j-kd ), j
1407 v( kd+1+i-j, j ) = a( i, j )
1412 DO 680 i = j, min( n, j+kd )
1413 v( 1+i-j, j ) = a( i, j )
1419 CALL zhbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
1420 $ vu, il, iu, abstol, m, wa1, z, ldu, work,
1421 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1422 IF( iinfo.NE.0 )
THEN
1423 WRITE( nounit, fmt = 9999 )
'ZHBEVX(V,A,' // uplo //
1424 $
')', iinfo, n, kd, jtype, ioldsd
1426 IF( iinfo.LT.0 )
THEN
1429 result( ntest ) = ulpinv
1430 result( ntest+1 ) = ulpinv
1431 result( ntest+2 ) = ulpinv
1438 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1439 $ ldu, tau, work, rwork, result( ntest ) )
1443 IF( iuplo.EQ.1 )
THEN
1445 DO 700 i = max( 1, j-kd ), j
1446 v( kd+1+i-j, j ) = a( i, j )
1451 DO 720 i = j, min( n, j+kd )
1452 v( 1+i-j, j ) = a( i, j )
1458 $ u, ldu, vl, vu, il, iu, abstol,
1459 $ m2, wa2, z, ldu, work, lwork,
1460 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1461 IF( iinfo.NE.0 )
THEN
1462 WRITE( nounit, fmt = 9998 )
1463 $
'ZHBEVX_2STAGE(N,A,' // uplo //
1464 $
')', iinfo, n, kd, jtype, ioldsd
1466 IF( iinfo.LT.0 )
THEN
1469 result( ntest ) = ulpinv
1479 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1480 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1482 result( ntest ) = temp2 / max( unfl,
1483 $ ulp*max( temp1, temp2 ) )
1490 IF( iuplo.EQ.1 )
THEN
1492 DO 760 i = max( 1, j-kd ), j
1493 v( kd+1+i-j, j ) = a( i, j )
1498 DO 780 i = j, min( n, j+kd )
1499 v( 1+i-j, j ) = a( i, j )
1504 CALL zhbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1505 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1506 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1507 IF( iinfo.NE.0 )
THEN
1508 WRITE( nounit, fmt = 9998 )
'ZHBEVX(V,I,' // uplo //
1509 $
')', iinfo, n, kd, jtype, ioldsd
1511 IF( iinfo.LT.0 )
THEN
1514 result( ntest ) = ulpinv
1515 result( ntest+1 ) = ulpinv
1516 result( ntest+2 ) = ulpinv
1523 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1524 $ v, ldu, tau, work, rwork, result( ntest ) )
1528 IF( iuplo.EQ.1 )
THEN
1530 DO 800 i = max( 1, j-kd ), j
1531 v( kd+1+i-j, j ) = a( i, j )
1536 DO 820 i = j, min( n, j+kd )
1537 v( 1+i-j, j ) = a( i, j )
1542 $ u, ldu, vl, vu, il, iu, abstol,
1543 $ m3, wa3, z, ldu, work, lwork,
1544 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1545 IF( iinfo.NE.0 )
THEN
1546 WRITE( nounit, fmt = 9998 )
1547 $
'ZHBEVX_2STAGE(N,I,' // uplo //
1548 $
')', iinfo, n, kd, jtype, ioldsd
1550 IF( iinfo.LT.0 )
THEN
1553 result( ntest ) = ulpinv
1560 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1561 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1563 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1567 result( ntest ) = ( temp1+temp2 ) /
1568 $ max( unfl, temp3*ulp )
1575 IF( iuplo.EQ.1 )
THEN
1577 DO 850 i = max( 1, j-kd ), j
1578 v( kd+1+i-j, j ) = a( i, j )
1583 DO 870 i = j, min( n, j+kd )
1584 v( 1+i-j, j ) = a( i, j )
1588 CALL zhbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1589 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1590 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1591 IF( iinfo.NE.0 )
THEN
1592 WRITE( nounit, fmt = 9998 )
'ZHBEVX(V,V,' // uplo //
1593 $
')', iinfo, n, kd, jtype, ioldsd
1595 IF( iinfo.LT.0 )
THEN
1598 result( ntest ) = ulpinv
1599 result( ntest+1 ) = ulpinv
1600 result( ntest+2 ) = ulpinv
1607 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1608 $ v, ldu, tau, work, rwork, result( ntest ) )
1612 IF( iuplo.EQ.1 )
THEN
1614 DO 890 i = max( 1, j-kd ), j
1615 v( kd+1+i-j, j ) = a( i, j )
1620 DO 910 i = j, min( n, j+kd )
1621 v( 1+i-j, j ) = a( i, j )
1626 $ u, ldu, vl, vu, il, iu, abstol,
1627 $ m3, wa3, z, ldu, work, lwork,
1628 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1629 IF( iinfo.NE.0 )
THEN
1630 WRITE( nounit, fmt = 9998 )
1631 $
'ZHBEVX_2STAGE(N,V,' // uplo //
1632 $
')', iinfo, n, kd, jtype, ioldsd
1634 IF( iinfo.LT.0 )
THEN
1637 result( ntest ) = ulpinv
1642 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1643 result( ntest ) = ulpinv
1649 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1650 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1652 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1656 result( ntest ) = ( temp1+temp2 ) /
1657 $ max( unfl, temp3*ulp )
1663 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
1666 CALL zheev(
'V', uplo, n, a, ldu, d1, work, lwork, rwork,
1668 IF( iinfo.NE.0 )
THEN
1669 WRITE( nounit, fmt = 9999 )
'ZHEEV(V,' // uplo //
')',
1670 $ iinfo, n, jtype, ioldsd
1672 IF( iinfo.LT.0 )
THEN
1675 result( ntest ) = ulpinv
1676 result( ntest+1 ) = ulpinv
1677 result( ntest+2 ) = ulpinv
1684 CALL zhet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1685 $ ldu, tau, work, rwork, result( ntest ) )
1687 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1691 $ work, lwork, rwork, iinfo )
1692 IF( iinfo.NE.0 )
THEN
1693 WRITE( nounit, fmt = 9999 )
1694 $
'ZHEEV_2STAGE(N,' // uplo //
')',
1695 $ iinfo, n, jtype, ioldsd
1697 IF( iinfo.LT.0 )
THEN
1700 result( ntest ) = ulpinv
1710 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1711 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1713 result( ntest ) = temp2 / max( unfl,
1714 $ ulp*max( temp1, temp2 ) )
1718 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1725 IF( iuplo.EQ.1 )
THEN
1729 work( indx ) = a( i, j )
1737 work( indx ) = a( i, j )
1744 indwrk = n*( n+1 ) / 2 + 1
1745 CALL zhpev(
'V', uplo, n, work, d1, z, ldu,
1746 $ work( indwrk ), rwork, iinfo )
1747 IF( iinfo.NE.0 )
THEN
1748 WRITE( nounit, fmt = 9999 )
'ZHPEV(V,' // uplo //
')',
1749 $ iinfo, n, jtype, ioldsd
1751 IF( iinfo.LT.0 )
THEN
1754 result( ntest ) = ulpinv
1755 result( ntest+1 ) = ulpinv
1756 result( ntest+2 ) = ulpinv
1763 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1764 $ ldu, tau, work, rwork, result( ntest ) )
1766 IF( iuplo.EQ.1 )
THEN
1770 work( indx ) = a( i, j )
1778 work( indx ) = a( i, j )
1785 indwrk = n*( n+1 ) / 2 + 1
1786 CALL zhpev(
'N', uplo, n, work, d3, z, ldu,
1787 $ work( indwrk ), rwork, iinfo )
1788 IF( iinfo.NE.0 )
THEN
1789 WRITE( nounit, fmt = 9999 )
'ZHPEV(N,' // uplo //
')',
1790 $ iinfo, n, jtype, ioldsd
1792 IF( iinfo.LT.0 )
THEN
1795 result( ntest ) = ulpinv
1805 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1806 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1808 result( ntest ) = temp2 / max( unfl,
1809 $ ulp*max( temp1, temp2 ) )
1815 IF( jtype.LE.7 )
THEN
1817 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1826 IF( iuplo.EQ.1 )
THEN
1828 DO 1060 i = max( 1, j-kd ), j
1829 v( kd+1+i-j, j ) = a( i, j )
1834 DO 1080 i = j, min( n, j+kd )
1835 v( 1+i-j, j ) = a( i, j )
1841 CALL zhbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1843 IF( iinfo.NE.0 )
THEN
1844 WRITE( nounit, fmt = 9998 )
'ZHBEV(V,' // uplo //
')',
1845 $ iinfo, n, kd, jtype, ioldsd
1847 IF( iinfo.LT.0 )
THEN
1850 result( ntest ) = ulpinv
1851 result( ntest+1 ) = ulpinv
1852 result( ntest+2 ) = ulpinv
1859 CALL zhet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1860 $ ldu, tau, work, rwork, result( ntest ) )
1862 IF( iuplo.EQ.1 )
THEN
1864 DO 1100 i = max( 1, j-kd ), j
1865 v( kd+1+i-j, j ) = a( i, j )
1870 DO 1120 i = j, min( n, j+kd )
1871 v( 1+i-j, j ) = a( i, j )
1877 CALL zhbev_2stage(
'N', uplo, n, kd, v, ldu, d3, z, ldu,
1878 $ work, lwork, rwork, iinfo )
1879 IF( iinfo.NE.0 )
THEN
1880 WRITE( nounit, fmt = 9998 )
1881 $
'ZHBEV_2STAGE(N,' // uplo //
')',
1882 $ iinfo, n, kd, jtype, ioldsd
1884 IF( iinfo.LT.0 )
THEN
1887 result( ntest ) = ulpinv
1899 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1900 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1902 result( ntest ) = temp2 / max( unfl,
1903 $ ulp*max( temp1, temp2 ) )
1905 CALL zlacpy(
' ', n, n, a, lda, v, ldu )
1907 CALL zheevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1908 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
1909 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1911 IF( iinfo.NE.0 )
THEN
1912 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,A,' // uplo //
1913 $
')', iinfo, n, jtype, ioldsd
1915 IF( iinfo.LT.0 )
THEN
1918 result( ntest ) = ulpinv
1919 result( ntest+1 ) = ulpinv
1920 result( ntest+2 ) = ulpinv
1927 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1929 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1930 $ ldu, tau, work, rwork, result( ntest ) )
1934 $ il, iu, abstol, m2, wa2, z, ldu,
1935 $ iwork, work, lwork, rwork, lrwork,
1936 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1937 IF( iinfo.NE.0 )
THEN
1938 WRITE( nounit, fmt = 9999 )
1939 $
'ZHEEVR_2STAGE(N,A,' // uplo //
1940 $
')', iinfo, n, jtype, ioldsd
1942 IF( iinfo.LT.0 )
THEN
1945 result( ntest ) = ulpinv
1955 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1956 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1958 result( ntest ) = temp2 / max( unfl,
1959 $ ulp*max( temp1, temp2 ) )
1964 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1965 CALL zheevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1966 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1967 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1969 IF( iinfo.NE.0 )
THEN
1970 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,I,' // uplo //
1971 $
')', iinfo, n, jtype, ioldsd
1973 IF( iinfo.LT.0 )
THEN
1976 result( ntest ) = ulpinv
1977 result( ntest+1 ) = ulpinv
1978 result( ntest+2 ) = ulpinv
1985 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1987 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1988 $ v, ldu, tau, work, rwork, result( ntest ) )
1991 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1993 $ il, iu, abstol, m3, wa3, z, ldu,
1994 $ iwork, work, lwork, rwork, lrwork,
1995 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1996 IF( iinfo.NE.0 )
THEN
1997 WRITE( nounit, fmt = 9999 )
1998 $
'ZHEEVR_2STAGE(N,I,' // uplo //
1999 $
')', iinfo, n, jtype, ioldsd
2001 IF( iinfo.LT.0 )
THEN
2004 result( ntest ) = ulpinv
2011 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2012 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2013 result( ntest ) = ( temp1+temp2 ) /
2014 $ max( unfl, ulp*temp3 )
2018 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2019 CALL zheevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2020 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2021 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
2023 IF( iinfo.NE.0 )
THEN
2024 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,V,' // uplo //
2025 $
')', iinfo, n, jtype, ioldsd
2027 IF( iinfo.LT.0 )
THEN
2030 result( ntest ) = ulpinv
2031 result( ntest+1 ) = ulpinv
2032 result( ntest+2 ) = ulpinv
2039 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2041 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2042 $ v, ldu, tau, work, rwork, result( ntest ) )
2045 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2047 $ il, iu, abstol, m3, wa3, z, ldu,
2048 $ iwork, work, lwork, rwork, lrwork,
2049 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
2050 IF( iinfo.NE.0 )
THEN
2051 WRITE( nounit, fmt = 9999 )
2052 $
'ZHEEVR_2STAGE(N,V,' // uplo //
2053 $
')', iinfo, n, jtype, ioldsd
2055 IF( iinfo.LT.0 )
THEN
2058 result( ntest ) = ulpinv
2063 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2064 result( ntest ) = ulpinv
2070 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2071 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2073 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2077 result( ntest ) = ( temp1+temp2 ) /
2078 $ max( unfl, temp3*ulp )
2080 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2094 ntestt = ntestt + ntest
2095 CALL dlafts(
'ZST', n, n, jtype, ntest, result, ioldsd,
2096 $ thresh, nounit, nerrs )
2103 CALL alasvm(
'ZST', nounit, nerrs, ntestt, 0 )
2105 9999
FORMAT(
' ZDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2106 $
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2107 9998
FORMAT(
' ZDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2108 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,