449 SUBROUTINE sdrvst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
450 $ NOUNIT, A, LDA, D1, D2, D3, D4, EVEIGS, WA1,
451 $ WA2, WA3, U, LDU, V, TAU, Z, WORK, LWORK,
452 $ IWORK, LIWORK, RESULT, INFO )
459 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 REAL A( LDA, * ), D1( * ), D2( * ), D3( * ),
467 $ d4( * ), eveigs( * ), result( * ), tau( * ),
468 $ u( ldu, * ), v( ldu, * ), wa1( * ), wa2( * ),
469 $ wa3( * ), work( * ), z( ldu, * )
475 REAL ZERO, ONE, TWO, TEN
476 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
479 parameter( half = 0.5e0 )
481 parameter( maxtyp = 18 )
486 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDX, IROW,
487 $ itemp, itype, iu, iuplo, j, j1, j2, jcol,
488 $ jsize, jtype, kd, lgn, liwedc, lwedc, m, m2,
489 $ m3, mtypes, n, nerrs, nmats, nmax, ntest,
491 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
496 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
497 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
501 REAL SLAMCH, SLARND, SSXT1
502 EXTERNAL SLAMCH, SLARND, SSXT1
515 COMMON / srnamc / srnamt
518 INTRINSIC abs, int, log, max, min, real, sqrt
521 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
522 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
524 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
542 nmax = max( nmax, nn( j ) )
549 IF( nsizes.LT.0 )
THEN
551 ELSE IF( badnn )
THEN
553 ELSE IF( ntypes.LT.0 )
THEN
555 ELSE IF( lda.LT.nmax )
THEN
557 ELSE IF( ldu.LT.nmax )
THEN
559 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
564 CALL xerbla(
'SDRVST', -info )
570 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
575 unfl = slamch(
'Safe minimum' )
576 ovfl = slamch(
'Overflow' )
577 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
579 rtunfl = sqrt( unfl )
580 rtovfl = sqrt( ovfl )
585 iseed2( i ) = iseed( i )
586 iseed3( i ) = iseed( i )
593 DO 1740 jsize = 1, nsizes
596 lgn = int( log( real( n ) ) / log( two ) )
601 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
609 aninv = one / real( max( 1, n ) )
611 IF( nsizes.NE.1 )
THEN
612 mtypes = min( maxtyp, ntypes )
614 mtypes = min( maxtyp+1, ntypes )
617 DO 1730 jtype = 1, mtypes
619 IF( .NOT.dotype( jtype ) )
625 ioldsd( j ) = iseed( j )
643 IF( mtypes.GT.maxtyp )
646 itype = ktype( jtype )
647 imode = kmode( jtype )
651 GO TO ( 40, 50, 60 )kmagn( jtype )
658 anorm = ( rtovfl*ulp )*aninv
662 anorm = rtunfl*n*ulpinv
667 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
675 IF( itype.EQ.1 )
THEN
678 ELSE IF( itype.EQ.2 )
THEN
683 a( jcol, jcol ) = anorm
686 ELSE IF( itype.EQ.4 )
THEN
690 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
691 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
694 ELSE IF( itype.EQ.5 )
THEN
698 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
699 $ anorm, n, n,
'N', a, lda, work( n+1 ),
702 ELSE IF( itype.EQ.7 )
THEN
707 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
708 $
'T',
'N', work( n+1 ), 1, one,
709 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
710 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
712 ELSE IF( itype.EQ.8 )
THEN
717 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
718 $
'T',
'N', work( n+1 ), 1, one,
719 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
720 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
722 ELSE IF( itype.EQ.9 )
THEN
726 ihbw = int( ( n-1 )*slarnd( 1, iseed3 ) )
727 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
728 $ anorm, ihbw, ihbw,
'Z', u, ldu, work( n+1 ),
733 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
734 DO 100 idiag = -ihbw, ihbw
735 irow = ihbw - idiag + 1
736 j1 = max( 1, idiag+1 )
737 j2 = min( n, n+idiag )
740 a( i, j ) = u( irow, j )
747 IF( iinfo.NE.0 )
THEN
748 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
761 il = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
762 iu = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
772 IF( jtype.LE.7 )
THEN
775 d1( i ) = real( a( i, i ) )
778 d2( i ) = real( a( i+1, i ) )
781 CALL sstev(
'V', n, d1, d2, z, ldu, work, iinfo )
782 IF( iinfo.NE.0 )
THEN
783 WRITE( nounit, fmt = 9999 )
'SSTEV(V)', iinfo, n,
786 IF( iinfo.LT.0 )
THEN
799 d3( i ) = real( a( i, i ) )
802 d4( i ) = real( a( i+1, i ) )
804 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
809 d4( i ) = real( a( i+1, i ) )
812 CALL sstev(
'N', n, d3, d4, z, ldu, work, iinfo )
813 IF( iinfo.NE.0 )
THEN
814 WRITE( nounit, fmt = 9999 )
'SSTEV(N)', iinfo, n,
817 IF( iinfo.LT.0 )
THEN
830 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
831 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
833 result( 3 ) = temp2 / max( unfl,
834 $ ulp*max( temp1, temp2 ) )
840 eveigs( i ) = d3( i )
841 d1( i ) = real( a( i, i ) )
844 d2( i ) = real( a( i+1, i ) )
847 CALL sstevx(
'V',
'A', n, d1, d2, vl, vu, il, iu, abstol,
848 $ m, wa1, z, ldu, work, iwork, iwork( 5*n+1 ),
850 IF( iinfo.NE.0 )
THEN
851 WRITE( nounit, fmt = 9999 )
'SSTEVX(V,A)', iinfo, n,
854 IF( iinfo.LT.0 )
THEN
864 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
872 d3( i ) = real( a( i, i ) )
875 d4( i ) = real( a( i+1, i ) )
877 CALL sstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
882 d4( i ) = real( a( i+1, i ) )
885 CALL sstevx(
'N',
'A', n, d3, d4, vl, vu, il, iu, abstol,
886 $ m2, wa2, z, ldu, work, iwork,
887 $ iwork( 5*n+1 ), iinfo )
888 IF( iinfo.NE.0 )
THEN
889 WRITE( nounit, fmt = 9999 )
'SSTEVX(N,A)', iinfo, n,
892 IF( iinfo.LT.0 )
THEN
905 temp1 = max( temp1, abs( wa2( j ) ),
906 $ abs( eveigs( j ) ) )
907 temp2 = max( temp2, abs( wa2( j )-eveigs( j ) ) )
909 result( 6 ) = temp2 / max( unfl,
910 $ ulp*max( temp1, temp2 ) )
916 d1( i ) = real( a( i, i ) )
919 d2( i ) = real( a( i+1, i ) )
922 CALL sstevr(
'V',
'A', n, d1, d2, vl, vu, il, iu, abstol,
923 $ m, wa1, z, ldu, iwork, work, lwork,
924 $ iwork(2*n+1), liwork-2*n, iinfo )
925 IF( iinfo.NE.0 )
THEN
926 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,A)', iinfo, n,
929 IF( iinfo.LT.0 )
THEN
938 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
946 d3( i ) = real( a( i, i ) )
949 d4( i ) = real( a( i+1, i ) )
951 CALL sstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
956 d4( i ) = real( a( i+1, i ) )
959 CALL sstevr(
'N',
'A', n, d3, d4, vl, vu, il, iu, abstol,
960 $ m2, wa2, z, ldu, iwork, work, lwork,
961 $ iwork(2*n+1), liwork-2*n, iinfo )
962 IF( iinfo.NE.0 )
THEN
963 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,A)', iinfo, n,
966 IF( iinfo.LT.0 )
THEN
979 temp1 = max( temp1, abs( wa2( j ) ),
980 $ abs( eveigs( j ) ) )
981 temp2 = max( temp2, abs( wa2( j )-eveigs( j ) ) )
983 result( 9 ) = temp2 / max( unfl,
984 $ ulp*max( temp1, temp2 ) )
991 d1( i ) = real( a( i, i ) )
994 d2( i ) = real( a( i+1, i ) )
997 CALL sstevx(
'V',
'I', n, d1, d2, vl, vu, il, iu, abstol,
998 $ m2, wa2, z, ldu, work, iwork,
999 $ iwork( 5*n+1 ), iinfo )
1000 IF( iinfo.NE.0 )
THEN
1001 WRITE( nounit, fmt = 9999 )
'SSTEVX(V,I)', iinfo, n,
1004 IF( iinfo.LT.0 )
THEN
1007 result( 10 ) = ulpinv
1008 result( 11 ) = ulpinv
1009 result( 12 ) = ulpinv
1017 d3( i ) = real( a( i, i ) )
1020 d4( i ) = real( a( i+1, i ) )
1022 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1023 $ max( 1, m2 ), result( 10 ) )
1028 d4( i ) = real( a( i+1, i ) )
1031 CALL sstevx(
'N',
'I', n, d3, d4, vl, vu, il, iu, abstol,
1032 $ m3, wa3, z, ldu, work, iwork,
1033 $ iwork( 5*n+1 ), iinfo )
1034 IF( iinfo.NE.0 )
THEN
1035 WRITE( nounit, fmt = 9999 )
'SSTEVX(N,I)', iinfo, n,
1038 IF( iinfo.LT.0 )
THEN
1041 result( 12 ) = ulpinv
1048 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1049 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1050 result( 12 ) = ( temp1+temp2 ) / max( unfl, ulp*temp3 )
1057 vl = wa1( il ) - max( half*
1058 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1061 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1062 $ ten*ulp*temp3, ten*rtunfl )
1065 vu = wa1( iu ) + max( half*
1066 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1069 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1070 $ ten*ulp*temp3, ten*rtunfl )
1078 d1( i ) = real( a( i, i ) )
1081 d2( i ) = real( a( i+1, i ) )
1084 CALL sstevx(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1085 $ m2, wa2, z, ldu, work, iwork,
1086 $ iwork( 5*n+1 ), iinfo )
1087 IF( iinfo.NE.0 )
THEN
1088 WRITE( nounit, fmt = 9999 )
'SSTEVX(V,V)', iinfo, n,
1091 IF( iinfo.LT.0 )
THEN
1094 result( 13 ) = ulpinv
1095 result( 14 ) = ulpinv
1096 result( 15 ) = ulpinv
1101 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1102 result( 13 ) = ulpinv
1103 result( 14 ) = ulpinv
1104 result( 15 ) = ulpinv
1111 d3( i ) = real( a( i, i ) )
1114 d4( i ) = real( a( i+1, i ) )
1116 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1117 $ max( 1, m2 ), result( 13 ) )
1121 d4( i ) = real( a( i+1, i ) )
1124 CALL sstevx(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1125 $ m3, wa3, z, ldu, work, iwork,
1126 $ iwork( 5*n+1 ), iinfo )
1127 IF( iinfo.NE.0 )
THEN
1128 WRITE( nounit, fmt = 9999 )
'SSTEVX(N,V)', iinfo, n,
1131 IF( iinfo.LT.0 )
THEN
1134 result( 15 ) = ulpinv
1141 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1142 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1143 result( 15 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1149 d1( i ) = real( a( i, i ) )
1152 d2( i ) = real( a( i+1, i ) )
1155 CALL sstevd(
'V', n, d1, d2, z, ldu, work, lwedc, iwork,
1157 IF( iinfo.NE.0 )
THEN
1158 WRITE( nounit, fmt = 9999 )
'SSTEVD(V)', iinfo, n,
1161 IF( iinfo.LT.0 )
THEN
1164 result( 16 ) = ulpinv
1165 result( 17 ) = ulpinv
1166 result( 18 ) = ulpinv
1174 d3( i ) = real( a( i, i ) )
1177 d4( i ) = real( a( i+1, i ) )
1179 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
1184 d4( i ) = real( a( i+1, i ) )
1187 CALL sstevd(
'N', n, d3, d4, z, ldu, work, lwedc, iwork,
1189 IF( iinfo.NE.0 )
THEN
1190 WRITE( nounit, fmt = 9999 )
'SSTEVD(N)', iinfo, n,
1193 IF( iinfo.LT.0 )
THEN
1196 result( 18 ) = ulpinv
1206 temp1 = max( temp1, abs( eveigs( j ) ),
1208 temp2 = max( temp2, abs( eveigs( j )-d3( j ) ) )
1210 result( 18 ) = temp2 / max( unfl,
1211 $ ulp*max( temp1, temp2 ) )
1217 d1( i ) = real( a( i, i ) )
1220 d2( i ) = real( a( i+1, i ) )
1223 CALL sstevr(
'V',
'I', n, d1, d2, vl, vu, il, iu, abstol,
1224 $ m2, wa2, z, ldu, iwork, work, lwork,
1225 $ iwork(2*n+1), liwork-2*n, iinfo )
1226 IF( iinfo.NE.0 )
THEN
1227 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,I)', iinfo, n,
1230 IF( iinfo.LT.0 )
THEN
1233 result( 19 ) = ulpinv
1234 result( 20 ) = ulpinv
1235 result( 21 ) = ulpinv
1243 d3( i ) = real( a( i, i ) )
1246 d4( i ) = real( a( i+1, i ) )
1248 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1249 $ max( 1, m2 ), result( 19 ) )
1254 d4( i ) = real( a( i+1, i ) )
1257 CALL sstevr(
'N',
'I', n, d3, d4, vl, vu, il, iu, abstol,
1258 $ m3, wa3, z, ldu, iwork, work, lwork,
1259 $ iwork(2*n+1), liwork-2*n, iinfo )
1260 IF( iinfo.NE.0 )
THEN
1261 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,I)', iinfo, n,
1264 IF( iinfo.LT.0 )
THEN
1267 result( 21 ) = ulpinv
1274 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1275 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1276 result( 21 ) = ( temp1+temp2 ) / max( unfl, ulp*temp3 )
1283 vl = wa1( il ) - max( half*
1284 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1287 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1288 $ ten*ulp*temp3, ten*rtunfl )
1291 vu = wa1( iu ) + max( half*
1292 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1295 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1296 $ ten*ulp*temp3, ten*rtunfl )
1304 d1( i ) = real( a( i, i ) )
1307 d2( i ) = real( a( i+1, i ) )
1310 CALL sstevr(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1311 $ m2, wa2, z, ldu, iwork, work, lwork,
1312 $ iwork(2*n+1), liwork-2*n, iinfo )
1313 IF( iinfo.NE.0 )
THEN
1314 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,V)', iinfo, n,
1317 IF( iinfo.LT.0 )
THEN
1320 result( 22 ) = ulpinv
1321 result( 23 ) = ulpinv
1322 result( 24 ) = ulpinv
1327 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1328 result( 22 ) = ulpinv
1329 result( 23 ) = ulpinv
1330 result( 24 ) = ulpinv
1337 d3( i ) = real( a( i, i ) )
1340 d4( i ) = real( a( i+1, i ) )
1342 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1343 $ max( 1, m2 ), result( 22 ) )
1347 d4( i ) = real( a( i+1, i ) )
1350 CALL sstevr(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1351 $ m3, wa3, z, ldu, iwork, work, lwork,
1352 $ iwork(2*n+1), liwork-2*n, iinfo )
1353 IF( iinfo.NE.0 )
THEN
1354 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,V)', iinfo, n,
1357 IF( iinfo.LT.0 )
THEN
1360 result( 24 ) = ulpinv
1367 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1368 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1369 result( 24 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1386 DO 1720 iuplo = 0, 1
1387 IF( iuplo.EQ.0 )
THEN
1395 CALL slacpy(
' ', n, n, a, lda, v, ldu )
1399 CALL ssyev(
'V', uplo, n, a, ldu, d1, work, lwork,
1401 IF( iinfo.NE.0 )
THEN
1402 WRITE( nounit, fmt = 9999 )
'SSYEV(V,' // uplo //
')',
1403 $ iinfo, n, jtype, ioldsd
1405 IF( iinfo.LT.0 )
THEN
1408 result( ntest ) = ulpinv
1409 result( ntest+1 ) = ulpinv
1410 result( ntest+2 ) = ulpinv
1417 CALL ssyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1418 $ ldu, tau, work, result( ntest ) )
1420 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1424 CALL ssyev(
'N', uplo, n, a, ldu, d3, work, lwork,
1426 IF( iinfo.NE.0 )
THEN
1427 WRITE( nounit, fmt = 9999 )
'SSYEV(N,' // uplo //
')',
1428 $ iinfo, n, jtype, ioldsd
1430 IF( iinfo.LT.0 )
THEN
1433 result( ntest ) = ulpinv
1443 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1444 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1446 result( ntest ) = temp2 / max( unfl,
1447 $ ulp*max( temp1, temp2 ) )
1450 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1455 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1457 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1458 $ ten*ulp*temp3, ten*rtunfl )
1459 ELSE IF( n.GT.0 )
THEN
1460 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1461 $ ten*ulp*temp3, ten*rtunfl )
1464 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1465 $ ten*ulp*temp3, ten*rtunfl )
1466 ELSE IF( n.GT.0 )
THEN
1467 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1468 $ ten*ulp*temp3, ten*rtunfl )
1477 CALL ssyevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1478 $ abstol, m, wa1, z, ldu, work, lwork, iwork,
1479 $ iwork( 5*n+1 ), iinfo )
1480 IF( iinfo.NE.0 )
THEN
1481 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,A,' // uplo //
1482 $
')', iinfo, n, jtype, ioldsd
1484 IF( iinfo.LT.0 )
THEN
1487 result( ntest ) = ulpinv
1488 result( ntest+1 ) = ulpinv
1489 result( ntest+2 ) = ulpinv
1496 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1498 CALL ssyt21( 1, uplo, n, 0, a, ldu, d1, d2, z, ldu, v,
1499 $ ldu, tau, work, result( ntest ) )
1503 CALL ssyevx(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1504 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1505 $ iwork( 5*n+1 ), iinfo )
1506 IF( iinfo.NE.0 )
THEN
1507 WRITE( nounit, fmt = 9999 )
'SSYEVX(N,A,' // uplo //
1508 $
')', iinfo, n, jtype, ioldsd
1510 IF( iinfo.LT.0 )
THEN
1513 result( ntest ) = ulpinv
1523 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1524 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1526 result( ntest ) = temp2 / max( unfl,
1527 $ ulp*max( temp1, temp2 ) )
1532 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1534 CALL ssyevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1535 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1536 $ iwork( 5*n+1 ), iinfo )
1537 IF( iinfo.NE.0 )
THEN
1538 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,I,' // uplo //
1539 $
')', iinfo, n, jtype, ioldsd
1541 IF( iinfo.LT.0 )
THEN
1544 result( ntest ) = ulpinv
1545 result( ntest+1 ) = ulpinv
1546 result( ntest+2 ) = ulpinv
1553 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1555 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1556 $ v, ldu, tau, work, result( ntest ) )
1559 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1561 CALL ssyevx(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1562 $ abstol, m3, wa3, z, ldu, work, lwork, iwork,
1563 $ iwork( 5*n+1 ), iinfo )
1564 IF( iinfo.NE.0 )
THEN
1565 WRITE( nounit, fmt = 9999 )
'SSYEVX(N,I,' // uplo //
1566 $
')', iinfo, n, jtype, ioldsd
1568 IF( iinfo.LT.0 )
THEN
1571 result( ntest ) = ulpinv
1578 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1579 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1580 result( ntest ) = ( temp1+temp2 ) /
1581 $ max( unfl, ulp*temp3 )
1585 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1587 CALL ssyevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
1588 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1589 $ iwork( 5*n+1 ), iinfo )
1590 IF( iinfo.NE.0 )
THEN
1591 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,V,' // uplo //
1592 $
')', iinfo, n, jtype, ioldsd
1594 IF( iinfo.LT.0 )
THEN
1597 result( ntest ) = ulpinv
1598 result( ntest+1 ) = ulpinv
1599 result( ntest+2 ) = ulpinv
1606 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1608 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1609 $ v, ldu, tau, work, result( ntest ) )
1612 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1614 CALL ssyevx(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
1615 $ abstol, m3, wa3, z, ldu, work, lwork, iwork,
1616 $ iwork( 5*n+1 ), iinfo )
1617 IF( iinfo.NE.0 )
THEN
1618 WRITE( nounit, fmt = 9999 )
'SSYEVX(N,V,' // uplo //
1619 $
')', iinfo, n, jtype, ioldsd
1621 IF( iinfo.LT.0 )
THEN
1624 result( ntest ) = ulpinv
1629 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1630 result( ntest ) = ulpinv
1636 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1637 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1639 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1643 result( ntest ) = ( temp1+temp2 ) /
1644 $ max( unfl, temp3*ulp )
1650 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1655 IF( iuplo.EQ.1 )
THEN
1659 work( indx ) = a( i, j )
1667 work( indx ) = a( i, j )
1675 CALL sspev(
'V', uplo, n, work, d1, z, ldu, v, iinfo )
1676 IF( iinfo.NE.0 )
THEN
1677 WRITE( nounit, fmt = 9999 )
'SSPEV(V,' // uplo //
')',
1678 $ iinfo, n, jtype, ioldsd
1680 IF( iinfo.LT.0 )
THEN
1683 result( ntest ) = ulpinv
1684 result( ntest+1 ) = ulpinv
1685 result( ntest+2 ) = ulpinv
1692 CALL ssyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1693 $ ldu, tau, work, result( ntest ) )
1695 IF( iuplo.EQ.1 )
THEN
1699 work( indx ) = a( i, j )
1707 work( indx ) = a( i, j )
1715 CALL sspev(
'N', uplo, n, work, d3, z, ldu, v, iinfo )
1716 IF( iinfo.NE.0 )
THEN
1717 WRITE( nounit, fmt = 9999 )
'SSPEV(N,' // uplo //
')',
1718 $ iinfo, n, jtype, ioldsd
1720 IF( iinfo.LT.0 )
THEN
1723 result( ntest ) = ulpinv
1733 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1734 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1736 result( ntest ) = temp2 / max( unfl,
1737 $ ulp*max( temp1, temp2 ) )
1743 IF( iuplo.EQ.1 )
THEN
1747 work( indx ) = a( i, j )
1755 work( indx ) = a( i, j )
1764 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1766 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1767 $ ten*ulp*temp3, ten*rtunfl )
1768 ELSE IF( n.GT.0 )
THEN
1769 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1770 $ ten*ulp*temp3, ten*rtunfl )
1773 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1774 $ ten*ulp*temp3, ten*rtunfl )
1775 ELSE IF( n.GT.0 )
THEN
1776 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1777 $ ten*ulp*temp3, ten*rtunfl )
1786 CALL sspevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1787 $ abstol, m, wa1, z, ldu, v, iwork,
1788 $ iwork( 5*n+1 ), iinfo )
1789 IF( iinfo.NE.0 )
THEN
1790 WRITE( nounit, fmt = 9999 )
'SSPEVX(V,A,' // uplo //
1791 $
')', iinfo, n, jtype, ioldsd
1793 IF( iinfo.LT.0 )
THEN
1796 result( ntest ) = ulpinv
1797 result( ntest+1 ) = ulpinv
1798 result( ntest+2 ) = ulpinv
1805 CALL ssyt21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1806 $ ldu, tau, work, result( ntest ) )
1810 IF( iuplo.EQ.1 )
THEN
1814 work( indx ) = a( i, j )
1822 work( indx ) = a( i, j )
1829 CALL sspevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1830 $ abstol, m2, wa2, z, ldu, v, iwork,
1831 $ iwork( 5*n+1 ), iinfo )
1832 IF( iinfo.NE.0 )
THEN
1833 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,A,' // uplo //
1834 $
')', iinfo, n, jtype, ioldsd
1836 IF( iinfo.LT.0 )
THEN
1839 result( ntest ) = ulpinv
1849 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1850 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1852 result( ntest ) = temp2 / max( unfl,
1853 $ ulp*max( temp1, temp2 ) )
1856 IF( iuplo.EQ.1 )
THEN
1860 work( indx ) = a( i, j )
1868 work( indx ) = a( i, j )
1877 CALL sspevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1878 $ abstol, m2, wa2, z, ldu, v, iwork,
1879 $ iwork( 5*n+1 ), iinfo )
1880 IF( iinfo.NE.0 )
THEN
1881 WRITE( nounit, fmt = 9999 )
'SSPEVX(V,I,' // uplo //
1882 $
')', iinfo, n, jtype, ioldsd
1884 IF( iinfo.LT.0 )
THEN
1887 result( ntest ) = ulpinv
1888 result( ntest+1 ) = ulpinv
1889 result( ntest+2 ) = ulpinv
1896 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1897 $ v, ldu, tau, work, result( ntest ) )
1901 IF( iuplo.EQ.1 )
THEN
1905 work( indx ) = a( i, j )
1913 work( indx ) = a( i, j )
1920 CALL sspevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1921 $ abstol, m3, wa3, z, ldu, v, iwork,
1922 $ iwork( 5*n+1 ), iinfo )
1923 IF( iinfo.NE.0 )
THEN
1924 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,I,' // uplo //
1925 $
')', iinfo, n, jtype, ioldsd
1927 IF( iinfo.LT.0 )
THEN
1930 result( ntest ) = ulpinv
1935 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1936 result( ntest ) = ulpinv
1942 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1943 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1945 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1949 result( ntest ) = ( temp1+temp2 ) /
1950 $ max( unfl, temp3*ulp )
1953 IF( iuplo.EQ.1 )
THEN
1957 work( indx ) = a( i, j )
1965 work( indx ) = a( i, j )
1974 CALL sspevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1975 $ abstol, m2, wa2, z, ldu, v, iwork,
1976 $ iwork( 5*n+1 ), iinfo )
1977 IF( iinfo.NE.0 )
THEN
1978 WRITE( nounit, fmt = 9999 )
'SSPEVX(V,V,' // uplo //
1979 $
')', iinfo, n, jtype, ioldsd
1981 IF( iinfo.LT.0 )
THEN
1984 result( ntest ) = ulpinv
1985 result( ntest+1 ) = ulpinv
1986 result( ntest+2 ) = ulpinv
1993 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1994 $ v, ldu, tau, work, result( ntest ) )
1998 IF( iuplo.EQ.1 )
THEN
2002 work( indx ) = a( i, j )
2010 work( indx ) = a( i, j )
2017 CALL sspevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
2018 $ abstol, m3, wa3, z, ldu, v, iwork,
2019 $ iwork( 5*n+1 ), iinfo )
2020 IF( iinfo.NE.0 )
THEN
2021 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,V,' // uplo //
2022 $
')', iinfo, n, jtype, ioldsd
2024 IF( iinfo.LT.0 )
THEN
2027 result( ntest ) = ulpinv
2032 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2033 result( ntest ) = ulpinv
2039 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2040 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2042 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2046 result( ntest ) = ( temp1+temp2 ) /
2047 $ max( unfl, temp3*ulp )
2053 IF( jtype.LE.7 )
THEN
2055 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2064 IF( iuplo.EQ.1 )
THEN
2066 DO 1090 i = max( 1, j-kd ), j
2067 v( kd+1+i-j, j ) = a( i, j )
2072 DO 1110 i = j, min( n, j+kd )
2073 v( 1+i-j, j ) = a( i, j )
2080 CALL ssbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2082 IF( iinfo.NE.0 )
THEN
2083 WRITE( nounit, fmt = 9999 )
'SSBEV(V,' // uplo //
')',
2084 $ iinfo, n, jtype, ioldsd
2086 IF( iinfo.LT.0 )
THEN
2089 result( ntest ) = ulpinv
2090 result( ntest+1 ) = ulpinv
2091 result( ntest+2 ) = ulpinv
2098 CALL ssyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2099 $ ldu, tau, work, result( ntest ) )
2101 IF( iuplo.EQ.1 )
THEN
2103 DO 1130 i = max( 1, j-kd ), j
2104 v( kd+1+i-j, j ) = a( i, j )
2109 DO 1150 i = j, min( n, j+kd )
2110 v( 1+i-j, j ) = a( i, j )
2117 CALL ssbev(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2119 IF( iinfo.NE.0 )
THEN
2120 WRITE( nounit, fmt = 9999 )
'SSBEV(N,' // uplo //
')',
2121 $ iinfo, n, jtype, ioldsd
2123 IF( iinfo.LT.0 )
THEN
2126 result( ntest ) = ulpinv
2136 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2137 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2139 result( ntest ) = temp2 / max( unfl,
2140 $ ulp*max( temp1, temp2 ) )
2146 IF( iuplo.EQ.1 )
THEN
2148 DO 1190 i = max( 1, j-kd ), j
2149 v( kd+1+i-j, j ) = a( i, j )
2154 DO 1210 i = j, min( n, j+kd )
2155 v( 1+i-j, j ) = a( i, j )
2162 CALL ssbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2163 $ vu, il, iu, abstol, m, wa2, z, ldu, work,
2164 $ iwork, iwork( 5*n+1 ), iinfo )
2165 IF( iinfo.NE.0 )
THEN
2166 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,A,' // uplo //
2167 $
')', iinfo, n, jtype, ioldsd
2169 IF( iinfo.LT.0 )
THEN
2172 result( ntest ) = ulpinv
2173 result( ntest+1 ) = ulpinv
2174 result( ntest+2 ) = ulpinv
2181 CALL ssyt21( 1, uplo, n, 0, a, ldu, wa2, d2, z, ldu, v,
2182 $ ldu, tau, work, result( ntest ) )
2186 IF( iuplo.EQ.1 )
THEN
2188 DO 1230 i = max( 1, j-kd ), j
2189 v( kd+1+i-j, j ) = a( i, j )
2194 DO 1250 i = j, min( n, j+kd )
2195 v( 1+i-j, j ) = a( i, j )
2201 CALL ssbevx(
'N',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2202 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2203 $ iwork, iwork( 5*n+1 ), iinfo )
2204 IF( iinfo.NE.0 )
THEN
2205 WRITE( nounit, fmt = 9999 )
'SSBEVX(N,A,' // uplo //
2206 $
')', iinfo, n, jtype, ioldsd
2208 IF( iinfo.LT.0 )
THEN
2211 result( ntest ) = ulpinv
2221 temp1 = max( temp1, abs( wa2( j ) ), abs( wa3( j ) ) )
2222 temp2 = max( temp2, abs( wa2( j )-wa3( j ) ) )
2224 result( ntest ) = temp2 / max( unfl,
2225 $ ulp*max( temp1, temp2 ) )
2229 IF( iuplo.EQ.1 )
THEN
2231 DO 1290 i = max( 1, j-kd ), j
2232 v( kd+1+i-j, j ) = a( i, j )
2237 DO 1310 i = j, min( n, j+kd )
2238 v( 1+i-j, j ) = a( i, j )
2244 CALL ssbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2245 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2246 $ iwork, iwork( 5*n+1 ), iinfo )
2247 IF( iinfo.NE.0 )
THEN
2248 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,I,' // uplo //
2249 $
')', iinfo, n, jtype, ioldsd
2251 IF( iinfo.LT.0 )
THEN
2254 result( ntest ) = ulpinv
2255 result( ntest+1 ) = ulpinv
2256 result( ntest+2 ) = ulpinv
2263 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2264 $ v, ldu, tau, work, result( ntest ) )
2268 IF( iuplo.EQ.1 )
THEN
2270 DO 1330 i = max( 1, j-kd ), j
2271 v( kd+1+i-j, j ) = a( i, j )
2276 DO 1350 i = j, min( n, j+kd )
2277 v( 1+i-j, j ) = a( i, j )
2283 CALL ssbevx(
'N',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2284 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2285 $ iwork, iwork( 5*n+1 ), iinfo )
2286 IF( iinfo.NE.0 )
THEN
2287 WRITE( nounit, fmt = 9999 )
'SSBEVX(N,I,' // uplo //
2288 $
')', iinfo, n, jtype, ioldsd
2290 IF( iinfo.LT.0 )
THEN
2293 result( ntest ) = ulpinv
2300 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2301 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2303 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2307 result( ntest ) = ( temp1+temp2 ) /
2308 $ max( unfl, temp3*ulp )
2312 IF( iuplo.EQ.1 )
THEN
2314 DO 1380 i = max( 1, j-kd ), j
2315 v( kd+1+i-j, j ) = a( i, j )
2320 DO 1400 i = j, min( n, j+kd )
2321 v( 1+i-j, j ) = a( i, j )
2327 CALL ssbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2328 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2329 $ iwork, iwork( 5*n+1 ), iinfo )
2330 IF( iinfo.NE.0 )
THEN
2331 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,V,' // uplo //
2332 $
')', iinfo, n, jtype, ioldsd
2334 IF( iinfo.LT.0 )
THEN
2337 result( ntest ) = ulpinv
2338 result( ntest+1 ) = ulpinv
2339 result( ntest+2 ) = ulpinv
2346 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2347 $ v, ldu, tau, work, result( ntest ) )
2351 IF( iuplo.EQ.1 )
THEN
2353 DO 1420 i = max( 1, j-kd ), j
2354 v( kd+1+i-j, j ) = a( i, j )
2359 DO 1440 i = j, min( n, j+kd )
2360 v( 1+i-j, j ) = a( i, j )
2366 CALL ssbevx(
'N',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2367 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2368 $ iwork, iwork( 5*n+1 ), iinfo )
2369 IF( iinfo.NE.0 )
THEN
2370 WRITE( nounit, fmt = 9999 )
'SSBEVX(N,V,' // uplo //
2371 $
')', iinfo, n, jtype, ioldsd
2373 IF( iinfo.LT.0 )
THEN
2376 result( ntest ) = ulpinv
2381 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2382 result( ntest ) = ulpinv
2388 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2389 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2391 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2395 result( ntest ) = ( temp1+temp2 ) /
2396 $ max( unfl, temp3*ulp )
2402 CALL slacpy(
' ', n, n, a, lda, v, ldu )
2406 CALL ssyevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
2407 $ iwork, liwedc, iinfo )
2408 IF( iinfo.NE.0 )
THEN
2409 WRITE( nounit, fmt = 9999 )
'SSYEVD(V,' // uplo //
2410 $
')', iinfo, n, jtype, ioldsd
2412 IF( iinfo.LT.0 )
THEN
2415 result( ntest ) = ulpinv
2416 result( ntest+1 ) = ulpinv
2417 result( ntest+2 ) = ulpinv
2424 CALL ssyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2425 $ ldu, tau, work, result( ntest ) )
2427 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2431 CALL ssyevd(
'N', uplo, n, a, ldu, d3, work, lwedc,
2432 $ iwork, liwedc, iinfo )
2433 IF( iinfo.NE.0 )
THEN
2434 WRITE( nounit, fmt = 9999 )
'SSYEVD(N,' // uplo //
2435 $
')', iinfo, n, jtype, ioldsd
2437 IF( iinfo.LT.0 )
THEN
2440 result( ntest ) = ulpinv
2450 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2451 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2453 result( ntest ) = temp2 / max( unfl,
2454 $ ulp*max( temp1, temp2 ) )
2460 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2465 IF( iuplo.EQ.1 )
THEN
2469 work( indx ) = a( i, j )
2477 work( indx ) = a( i, j )
2485 CALL sspevd(
'V', uplo, n, work, d1, z, ldu,
2486 $ work( indx ), lwedc-indx+1, iwork, liwedc,
2488 IF( iinfo.NE.0 )
THEN
2489 WRITE( nounit, fmt = 9999 )
'SSPEVD(V,' // uplo //
2490 $
')', iinfo, n, jtype, ioldsd
2492 IF( iinfo.LT.0 )
THEN
2495 result( ntest ) = ulpinv
2496 result( ntest+1 ) = ulpinv
2497 result( ntest+2 ) = ulpinv
2504 CALL ssyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2505 $ ldu, tau, work, result( ntest ) )
2507 IF( iuplo.EQ.1 )
THEN
2512 work( indx ) = a( i, j )
2520 work( indx ) = a( i, j )
2528 CALL sspevd(
'N', uplo, n, work, d3, z, ldu,
2529 $ work( indx ), lwedc-indx+1, iwork, liwedc,
2531 IF( iinfo.NE.0 )
THEN
2532 WRITE( nounit, fmt = 9999 )
'SSPEVD(N,' // uplo //
2533 $
')', iinfo, n, jtype, ioldsd
2535 IF( iinfo.LT.0 )
THEN
2538 result( ntest ) = ulpinv
2548 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2549 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2551 result( ntest ) = temp2 / max( unfl,
2552 $ ulp*max( temp1, temp2 ) )
2557 IF( jtype.LE.7 )
THEN
2559 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2568 IF( iuplo.EQ.1 )
THEN
2570 DO 1590 i = max( 1, j-kd ), j
2571 v( kd+1+i-j, j ) = a( i, j )
2576 DO 1610 i = j, min( n, j+kd )
2577 v( 1+i-j, j ) = a( i, j )
2584 CALL ssbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2585 $ lwedc, iwork, liwedc, iinfo )
2586 IF( iinfo.NE.0 )
THEN
2587 WRITE( nounit, fmt = 9999 )
'SSBEVD(V,' // uplo //
2588 $
')', iinfo, n, jtype, ioldsd
2590 IF( iinfo.LT.0 )
THEN
2593 result( ntest ) = ulpinv
2594 result( ntest+1 ) = ulpinv
2595 result( ntest+2 ) = ulpinv
2602 CALL ssyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2603 $ ldu, tau, work, result( ntest ) )
2605 IF( iuplo.EQ.1 )
THEN
2607 DO 1630 i = max( 1, j-kd ), j
2608 v( kd+1+i-j, j ) = a( i, j )
2613 DO 1650 i = j, min( n, j+kd )
2614 v( 1+i-j, j ) = a( i, j )
2621 CALL ssbevd(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2622 $ lwedc, iwork, liwedc, iinfo )
2623 IF( iinfo.NE.0 )
THEN
2624 WRITE( nounit, fmt = 9999 )
'SSBEVD(N,' // uplo //
2625 $
')', iinfo, n, jtype, ioldsd
2627 IF( iinfo.LT.0 )
THEN
2630 result( ntest ) = ulpinv
2640 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2641 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2643 result( ntest ) = temp2 / max( unfl,
2644 $ ulp*max( temp1, temp2 ) )
2649 CALL slacpy(
' ', n, n, a, lda, v, ldu )
2652 CALL ssyevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
2653 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
2654 $ iwork(2*n+1), liwork-2*n, iinfo )
2655 IF( iinfo.NE.0 )
THEN
2656 WRITE( nounit, fmt = 9999 )
'SSYEVR(V,A,' // uplo //
2657 $
')', iinfo, n, jtype, ioldsd
2659 IF( iinfo.LT.0 )
THEN
2662 result( ntest ) = ulpinv
2663 result( ntest+1 ) = ulpinv
2664 result( ntest+2 ) = ulpinv
2671 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2673 CALL ssyt21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
2674 $ ldu, tau, work, result( ntest ) )
2678 CALL ssyevr(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
2679 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2680 $ iwork(2*n+1), liwork-2*n, iinfo )
2681 IF( iinfo.NE.0 )
THEN
2682 WRITE( nounit, fmt = 9999 )
'SSYEVR(N,A,' // uplo //
2683 $
')', iinfo, n, jtype, ioldsd
2685 IF( iinfo.LT.0 )
THEN
2688 result( ntest ) = ulpinv
2698 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
2699 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
2701 result( ntest ) = temp2 / max( unfl,
2702 $ ulp*max( temp1, temp2 ) )
2707 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2709 CALL ssyevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
2710 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2711 $ iwork(2*n+1), liwork-2*n, iinfo )
2712 IF( iinfo.NE.0 )
THEN
2713 WRITE( nounit, fmt = 9999 )
'SSYEVR(V,I,' // uplo //
2714 $
')', iinfo, n, jtype, ioldsd
2716 IF( iinfo.LT.0 )
THEN
2719 result( ntest ) = ulpinv
2720 result( ntest+1 ) = ulpinv
2721 result( ntest+2 ) = ulpinv
2728 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2730 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2731 $ v, ldu, tau, work, result( ntest ) )
2734 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2736 CALL ssyevr(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
2737 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
2738 $ iwork(2*n+1), liwork-2*n, iinfo )
2739 IF( iinfo.NE.0 )
THEN
2740 WRITE( nounit, fmt = 9999 )
'SSYEVR(N,I,' // uplo //
2741 $
')', iinfo, n, jtype, ioldsd
2743 IF( iinfo.LT.0 )
THEN
2746 result( ntest ) = ulpinv
2753 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2754 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2755 result( ntest ) = ( temp1+temp2 ) /
2756 $ max( unfl, ulp*temp3 )
2760 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2762 CALL ssyevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2763 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2764 $ iwork(2*n+1), liwork-2*n, iinfo )
2765 IF( iinfo.NE.0 )
THEN
2766 WRITE( nounit, fmt = 9999 )
'SSYEVR(V,V,' // uplo //
2767 $
')', iinfo, n, jtype, ioldsd
2769 IF( iinfo.LT.0 )
THEN
2772 result( ntest ) = ulpinv
2773 result( ntest+1 ) = ulpinv
2774 result( ntest+2 ) = ulpinv
2781 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2783 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2784 $ v, ldu, tau, work, result( ntest ) )
2787 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2789 CALL ssyevr(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2790 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
2791 $ iwork(2*n+1), liwork-2*n, iinfo )
2792 IF( iinfo.NE.0 )
THEN
2793 WRITE( nounit, fmt = 9999 )
'SSYEVR(N,V,' // uplo //
2794 $
')', iinfo, n, jtype, ioldsd
2796 IF( iinfo.LT.0 )
THEN
2799 result( ntest ) = ulpinv
2804 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2805 result( ntest ) = ulpinv
2811 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2812 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2814 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2818 result( ntest ) = ( temp1+temp2 ) /
2819 $ max( unfl, temp3*ulp )
2821 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2829 ntestt = ntestt + ntest
2831 CALL slafts(
'SST', n, n, jtype, ntest, result, ioldsd,
2832 $ thresh, nounit, nerrs )
2839 CALL alasvm(
'SST', nounit, nerrs, ntestt, 0 )
2841 9999
FORMAT(
' SDRVST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
2842 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )