449 SUBROUTINE ddrvst( 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, , LWORK, NOUNIT, NSIZES,
461 DOUBLE PRECISION THRESH
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 DOUBLE PRECISION A( LDA, * ), D1( * ), D2( * ), D3( * ),
467 $ d4( * ), eveigs( * ), result( * ), tau( * ),
468 $ u( ldu, * ), v( ldu, * ), wa1( * ), wa2( * ),
469 $ wa3( * ), work( * ), z( ldu, * )
475 DOUBLE PRECISION ZERO, ONE, TWO, TEN
476 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
478 DOUBLE PRECISION HALF
479 parameter( half = 0.5d0 )
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 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
496 INTEGER IDUMMA( 1 ), ( 4 ), ISEED2( 4 ),
497 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
501 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
502 EXTERNAL DLAMCH, DLARND, DSXT1
515 COMMON / srnamc / srnamt
518 INTRINSIC abs, dble, int, log,
max,
min, 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(
'DDRVST', -info )
570 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
575 unfl = dlamch(
'Safe minimum' )
576 ovfl = dlamch( 'overflow
' )
577 CALL DLABAD( UNFL, OVFL )
578 ULP = DLAMCH( 'epsilon
' )*DLAMCH( 'base
' )
580 RTUNFL = SQRT( UNFL )
581 RTOVFL = SQRT( OVFL )
586 ISEED2( I ) = ISEED( I )
587 ISEED3( I ) = ISEED( I )
594 DO 1740 JSIZE = 1, NSIZES
597 LGN = INT( LOG( DBLE( N ) ) / LOG( TWO ) )
602 LWEDC = 1 + 4*N + 2*N*LGN + 4*N**2
610 ANINV = ONE / DBLE( MAX( 1, N ) )
612.NE.
IF( NSIZES1 ) THEN
613 MTYPES = MIN( MAXTYP, NTYPES )
615 MTYPES = MIN( MAXTYP+1, NTYPES )
618 DO 1730 JTYPE = 1, MTYPES
620.NOT.
IF( DOTYPE( JTYPE ) )
626 IOLDSD( J ) = ISEED( J )
644.GT.
IF( MTYPESMAXTYP )
647 ITYPE = KTYPE( JTYPE )
648 IMODE = KMODE( JTYPE )
652 GO TO ( 40, 50, 60 )KMAGN( JTYPE )
659 ANORM = ( RTOVFL*ULP )*ANINV
663 ANORM = RTUNFL*N*ULPINV
668 CALL DLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
676.EQ.
IF( ITYPE1 ) THEN
679.EQ.
ELSE IF( ITYPE2 ) THEN
684 A( JCOL, JCOL ) = ANORM
687.EQ.
ELSE IF( ITYPE4 ) THEN
691 CALL DLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
692 $ ANORM, 0, 0, 'n
', A, LDA, WORK( N+1 ),
695.EQ.
ELSE IF( ITYPE5 ) THEN
699 CALL DLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
700 $ ANORM, N, N, 'n
', A, LDA, WORK( N+1 ),
703.EQ.
ELSE IF( ITYPE7 ) THEN
708 CALL DLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
709 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
710 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
711 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
713.EQ.
ELSE IF( ITYPE8 ) THEN
718 CALL DLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
719 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
720 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
721 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
723.EQ.
ELSE IF( ITYPE9 ) THEN
727 IHBW = INT( ( N-1 )*DLARND( 1, ISEED3 ) )
728 CALL DLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
729 $ ANORM, IHBW, IHBW, 'z
', U, LDU, WORK( N+1 ),
734 CALL DLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
735 DO 100 IDIAG = -IHBW, IHBW
736 IROW = IHBW - IDIAG + 1
737 J1 = MAX( 1, IDIAG+1 )
738 J2 = MIN( N, N+IDIAG )
741 A( I, J ) = U( IROW, J )
748.NE.
IF( IINFO0 ) THEN
749 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
762 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
763 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
773.LE.
IF( JTYPE7 ) THEN
776 D1( I ) = DBLE( A( I, I ) )
779 D2( I ) = DBLE( A( I+1, I ) )
782 CALL DSTEV( 'v
', N, D1, D2, Z, LDU, WORK, IINFO )
783.NE.
IF( IINFO0 ) THEN
784 WRITE( NOUNIT, FMT = 9999 )'dstev(v)
', IINFO, N,
787.LT.
IF( IINFO0 ) THEN
800 D3( I ) = DBLE( A( I, I ) )
803 D4( I ) = DBLE( A( I+1, I ) )
805 CALL DSTT21( N, 0, D3, D4, D1, D2, Z, LDU, WORK,
810 D4( I ) = DBLE( A( I+1, I ) )
813 CALL DSTEV( 'n
', N, D3, D4, Z, LDU, WORK, IINFO )
814.NE.
IF( IINFO0 ) THEN
815 WRITE( NOUNIT, FMT = 9999 )'dstev(n)
', IINFO, N,
818.LT.
IF( IINFO0 ) THEN
831 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
832 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
834 RESULT( 3 ) = TEMP2 / MAX( UNFL,
835 $ ULP*MAX( TEMP1, TEMP2 ) )
841 EVEIGS( I ) = D3( I )
842 D1( I ) = DBLE( A( I, I ) )
845 D2( I ) = DBLE( A( I+1, I ) )
848 CALL DSTEVX( 'v
', 'a
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
849 $ M, WA1, Z, LDU, WORK, IWORK, IWORK( 5*N+1 ),
851.NE.
IF( IINFO0 ) THEN
852 WRITE( NOUNIT, FMT = 9999 )'dstevx(v,a)
', IINFO, N,
855.LT.
IF( IINFO0 ) THEN
865 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
873 D3( I ) = DBLE( A( I, I ) )
876 D4( I ) = DBLE( A( I+1, I ) )
878 CALL DSTT21( N, 0, D3, D4, WA1, D2, Z, LDU, WORK,
883 D4( I ) = DBLE( A( I+1, I ) )
886 CALL DSTEVX( 'n
', 'a
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
887 $ M2, WA2, Z, LDU, WORK, IWORK,
888 $ IWORK( 5*N+1 ), IINFO )
889.NE.
IF( IINFO0 ) THEN
890 WRITE( NOUNIT, FMT = 9999 )'dstevx(n,a)
', IINFO, N,
893.LT.
IF( IINFO0 ) THEN
906 TEMP1 = MAX( TEMP1, ABS( WA2( J ) ),
907 $ ABS( EVEIGS( J ) ) )
908 TEMP2 = MAX( TEMP2, ABS( WA2( J )-EVEIGS( J ) ) )
910 RESULT( 6 ) = TEMP2 / MAX( UNFL,
911 $ ULP*MAX( TEMP1, TEMP2 ) )
917 D1( I ) = DBLE( A( I, I ) )
920 D2( I ) = DBLE( A( I+1, I ) )
923 CALL DSTEVR( 'v
', 'a
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
924 $ M, WA1, Z, LDU, IWORK, WORK, LWORK,
925 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
926.NE.
IF( IINFO0 ) THEN
927 WRITE( NOUNIT, FMT = 9999 )'dstevr(v,a)
', IINFO, N,
930.LT.
IF( IINFO0 ) THEN
939 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
947 D3( I ) = DBLE( A( I, I ) )
950 D4( I ) = DBLE( A( I+1, I ) )
952 CALL DSTT21( N, 0, D3, D4, WA1, D2, Z, LDU, WORK,
957 D4( I ) = DBLE( A( I+1, I ) )
960 CALL DSTEVR( 'n
', 'a
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
961 $ M2, WA2, Z, LDU, IWORK, WORK, LWORK,
962 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
963.NE.
IF( IINFO0 ) THEN
964 WRITE( NOUNIT, FMT = 9999 )'dstevr(n,a)
', IINFO, N,
967.LT.
IF( IINFO0 ) THEN
980 TEMP1 = MAX( TEMP1, ABS( WA2( J ) ),
981 $ ABS( EVEIGS( J ) ) )
982 TEMP2 = MAX( TEMP2, ABS( WA2( J )-EVEIGS( J ) ) )
984 RESULT( 9 ) = TEMP2 / MAX( UNFL,
985 $ ULP*MAX( TEMP1, TEMP2 ) )
992 D1( I ) = DBLE( A( I, I ) )
995 D2( I ) = DBLE( A( I+1, I ) )
998 CALL DSTEVX( 'v
', 'i
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
999 $ M2, WA2, Z, LDU, WORK, IWORK,
1000 $ IWORK( 5*N+1 ), IINFO )
1001.NE.
IF( IINFO0 ) THEN
1002 WRITE( NOUNIT, FMT = 9999 )'dstevx(v,i)
', IINFO, N,
1005.LT.
IF( IINFO0 ) THEN
1008 RESULT( 10 ) = ULPINV
1009 RESULT( 11 ) = ULPINV
1010 RESULT( 12 ) = ULPINV
1018 D3( I ) = DBLE( A( I, I ) )
1021 D4( I ) = DBLE( A( I+1, I ) )
1023 CALL DSTT22( N, M2, 0, D3, D4, WA2, D2, Z, LDU, WORK,
1024 $ MAX( 1, M2 ), RESULT( 10 ) )
1029 D4( I ) = DBLE( A( I+1, I ) )
1032 CALL DSTEVX( 'n
', 'i
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
1033 $ M3, WA3, Z, LDU, WORK, IWORK,
1034 $ IWORK( 5*N+1 ), IINFO )
1035.NE.
IF( IINFO0 ) THEN
1036 WRITE( NOUNIT, FMT = 9999 )'dstevx(n,i)
', IINFO, N,
1039.LT.
IF( IINFO0 ) THEN
1042 RESULT( 12 ) = ULPINV
1049 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1050 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1051 RESULT( 12 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, ULP*TEMP3 )
1058 VL = WA1( IL ) - MAX( HALF*
1059 $ ( WA1( IL )-WA1( IL-1 ) ), TEN*ULP*TEMP3,
1062 VL = WA1( 1 ) - MAX( HALF*( WA1( N )-WA1( 1 ) ),
1063 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1066 VU = WA1( IU ) + MAX( HALF*
1067 $ ( WA1( IU+1 )-WA1( IU ) ), TEN*ULP*TEMP3,
1070 VU = WA1( N ) + MAX( HALF*( WA1( N )-WA1( 1 ) ),
1071 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1079 D1( I ) = DBLE( A( I, I ) )
1082 D2( I ) = DBLE( A( I+1, I ) )
1085 CALL DSTEVX( 'v
', 'v
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
1086 $ M2, WA2, Z, LDU, WORK, IWORK,
1087 $ IWORK( 5*N+1 ), IINFO )
1088.NE.
IF( IINFO0 ) THEN
1089 WRITE( NOUNIT, FMT = 9999 )'dstevx(v,v)
', IINFO, N,
1092.LT.
IF( IINFO0 ) THEN
1095 RESULT( 13 ) = ULPINV
1096 RESULT( 14 ) = ULPINV
1097 RESULT( 15 ) = ULPINV
1102.EQ..AND..GT.
IF( M20 N0 ) THEN
1103 RESULT( 13 ) = ULPINV
1104 RESULT( 14 ) = ULPINV
1105 RESULT( 15 ) = ULPINV
1112 D3( I ) = DBLE( A( I, I ) )
1115 D4( I ) = DBLE( A( I+1, I ) )
1117 CALL DSTT22( N, M2, 0, D3, D4, WA2, D2, Z, LDU, WORK,
1118 $ MAX( 1, M2 ), RESULT( 13 ) )
1122 D4( I ) = DBLE( A( I+1, I ) )
1125 CALL DSTEVX( 'n
', 'v
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
1126 $ M3, WA3, Z, LDU, WORK, IWORK,
1127 $ IWORK( 5*N+1 ), IINFO )
1128.NE.
IF( IINFO0 ) THEN
1129 WRITE( NOUNIT, FMT = 9999 )'dstevx(n,v)
', IINFO, N,
1132.LT.
IF( IINFO0 ) THEN
1135 RESULT( 15 ) = ULPINV
1142 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1143 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1144 RESULT( 15 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1150 D1( I ) = DBLE( A( I, I ) )
1153 D2( I ) = DBLE( A( I+1, I ) )
1156 CALL DSTEVD( 'v
', N, D1, D2, Z, LDU, WORK, LWEDC, IWORK,
1158.NE.
IF( IINFO0 ) THEN
1159 WRITE( NOUNIT, FMT = 9999 )'dstevd(v)
', IINFO, N,
1162.LT.
IF( IINFO0 ) THEN
1165 RESULT( 16 ) = ULPINV
1166 RESULT( 17 ) = ULPINV
1167 RESULT( 18 ) = ULPINV
1175 D3( I ) = DBLE( A( I, I ) )
1178 D4( I ) = DBLE( A( I+1, I ) )
1180 CALL DSTT21( N, 0, D3, D4, D1, D2, Z, LDU, WORK,
1185 D4( I ) = DBLE( A( I+1, I ) )
1188 CALL DSTEVD( 'n
', N, D3, D4, Z, LDU, WORK, LWEDC, IWORK,
1190.NE.
IF( IINFO0 ) THEN
1191 WRITE( NOUNIT, FMT = 9999 )'dstevd(n)
', IINFO, N,
1194.LT.
IF( IINFO0 ) THEN
1197 RESULT( 18 ) = ULPINV
1207 TEMP1 = MAX( TEMP1, ABS( EVEIGS( J ) ),
1209 TEMP2 = MAX( TEMP2, ABS( EVEIGS( J )-D3( J ) ) )
1211 RESULT( 18 ) = TEMP2 / MAX( UNFL,
1212 $ ULP*MAX( TEMP1, TEMP2 ) )
1218 D1( I ) = DBLE( A( I, I ) )
1221 D2( I ) = DBLE( A( I+1, I ) )
1224 CALL DSTEVR( 'v
', 'i
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
1225 $ M2, WA2, Z, LDU, IWORK, WORK, LWORK,
1226 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
1227.NE.
IF( IINFO0 ) THEN
1228 WRITE( NOUNIT, FMT = 9999 )'dstevr(v,i)
', IINFO, N,
1231.LT.
IF( IINFO0 ) THEN
1234 RESULT( 19 ) = ULPINV
1235 RESULT( 20 ) = ULPINV
1236 RESULT( 21 ) = ULPINV
1244 D3( I ) = DBLE( A( I, I ) )
1247 D4( I ) = DBLE( A( I+1, I ) )
1249 CALL DSTT22( N, M2, 0, D3, D4, WA2, D2, Z, LDU, WORK,
1250 $ MAX( 1, M2 ), RESULT( 19 ) )
1255 D4( I ) = DBLE( A( I+1, I ) )
1258 CALL DSTEVR( 'n
', 'i
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
1259 $ M3, WA3, Z, LDU, IWORK, WORK, LWORK,
1260 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
1261.NE.
IF( IINFO0 ) THEN
1262 WRITE( NOUNIT, FMT = 9999 )'dstevr(n,i)
', IINFO, N,
1265.LT.
IF( IINFO0 ) THEN
1268 RESULT( 21 ) = ULPINV
1275 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1276 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1277 RESULT( 21 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, ULP*TEMP3 )
1284 VL = WA1( IL ) - MAX( HALF*
1285 $ ( WA1( IL )-WA1( IL-1 ) ), TEN*ULP*TEMP3,
1288 VL = WA1( 1 ) - MAX( HALF*( WA1( N )-WA1( 1 ) ),
1289 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1292 VU = WA1( IU ) + MAX( HALF*
1293 $ ( WA1( IU+1 )-WA1( IU ) ), TEN*ULP*TEMP3,
1296 VU = WA1( N ) + MAX( HALF*( WA1( N )-WA1( 1 ) ),
1297 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1305 D1( I ) = DBLE( A( I, I ) )
1308 D2( I ) = DBLE( A( I+1, I ) )
1311 CALL DSTEVR( 'v
', 'v
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
1312 $ M2, WA2, Z, LDU, IWORK, WORK, LWORK,
1313 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
1314.NE.
IF( IINFO0 ) THEN
1315 WRITE( NOUNIT, FMT = 9999 )'dstevr(v,v)
', IINFO, N,
1318.LT.
IF( IINFO0 ) THEN
1321 RESULT( 22 ) = ULPINV
1322 RESULT( 23 ) = ULPINV
1323 RESULT( 24 ) = ULPINV
1328.EQ..AND..GT.
IF( M20 N0 ) THEN
1329 RESULT( 22 ) = ULPINV
1330 RESULT( 23 ) = ULPINV
1331 RESULT( 24 ) = ULPINV
1338 D3( I ) = DBLE( A( I, I ) )
1341 D4( I ) = DBLE( A( I+1, I ) )
1343 CALL DSTT22( N, M2, 0, D3, D4, WA2, D2, Z, LDU, WORK,
1344 $ MAX( 1, M2 ), RESULT( 22 ) )
1348 D4( I ) = DBLE( A( I+1, I ) )
1351 CALL DSTEVR( 'n
', 'v
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
1352 $ M3, WA3, Z, LDU, IWORK, WORK, LWORK,
1353 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
1354.NE.
IF( IINFO0 ) THEN
1355 WRITE( NOUNIT, FMT = 9999 )'dstevr(n,v)
', IINFO, N,
1358.LT.
IF( IINFO0 ) THEN
1361 RESULT( 24 ) = ULPINV
1368 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1369 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1370 RESULT( 24 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1387 DO 1720 IUPLO = 0, 1
1388.EQ.
IF( IUPLO0 ) THEN
1396 CALL DLACPY( ' ', N, N, A, LDA, V, LDU )
1400 CALL DSYEV( 'v
', UPLO, N, A, LDU, D1, WORK, LWORK,
1402.NE.
IF( IINFO0 ) THEN
1403 WRITE( NOUNIT, FMT = 9999 )'dsyev(v,
' // UPLO // ')
',
1404 $ IINFO, N, JTYPE, IOLDSD
1406.LT.
IF( IINFO0 ) THEN
1409 RESULT( NTEST ) = ULPINV
1410 RESULT( NTEST+1 ) = ULPINV
1411 RESULT( NTEST+2 ) = ULPINV
1418 CALL DSYT21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
1419 $ LDU, TAU, WORK, RESULT( NTEST ) )
1421 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1425 CALL DSYEV( 'n
', UPLO, N, A, LDU, D3, WORK, LWORK,
1427.NE.
IF( IINFO0 ) THEN
1428 WRITE( NOUNIT, FMT = 9999 )'dsyev(n,
' // UPLO // ')
',
1429 $ IINFO, N, JTYPE, IOLDSD
1431.LT.
IF( IINFO0 ) THEN
1434 RESULT( NTEST ) = ULPINV
1444 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1445 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1447 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1448 $ ULP*MAX( TEMP1, TEMP2 ) )
1451 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1456 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
1458 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
1459 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1460.GT.
ELSE IF( N0 ) THEN
1461 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
1462 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1465 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
1466 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1467.GT.
ELSE IF( N0 ) THEN
1468 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
1469 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1478 CALL DSYEVX( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
1479 $ ABSTOL, M, WA1, Z, LDU, WORK, LWORK, IWORK,
1480 $ IWORK( 5*N+1 ), IINFO )
1481.NE.
IF( IINFO0 ) THEN
1482 WRITE( NOUNIT, FMT = 9999 )'dsyevx(v,a,
' // UPLO //
1483 $ ')
', IINFO, N, JTYPE, IOLDSD
1485.LT.
IF( IINFO0 ) THEN
1488 RESULT( NTEST ) = ULPINV
1489 RESULT( NTEST+1 ) = ULPINV
1490 RESULT( NTEST+2 ) = ULPINV
1497 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1499 CALL DSYT21( 1, UPLO, N, 0, A, LDU, D1, D2, Z, LDU, V,
1500 $ LDU, TAU, WORK, RESULT( NTEST ) )
1504 CALL DSYEVX( 'n
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
1505 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, IWORK,
1506 $ IWORK( 5*N+1 ), IINFO )
1507.NE.
IF( IINFO0 ) THEN
1508 WRITE( NOUNIT, FMT = 9999 )'dsyevx(n,a,
' // UPLO //
1509 $ ')
', IINFO, N, JTYPE, IOLDSD
1511.LT.
IF( IINFO0 ) THEN
1514 RESULT( NTEST ) = ULPINV
1524 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1525 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1527 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1528 $ ULP*MAX( TEMP1, TEMP2 ) )
1533 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1535 CALL DSYEVX( 'v
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
1536 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, IWORK,
1537 $ IWORK( 5*N+1 ), IINFO )
1538.NE.
IF( IINFO0 ) THEN
1539 WRITE( NOUNIT, FMT = 9999 )'dsyevx(v,i,
' // UPLO //
1540 $ ')
', IINFO, N, JTYPE, IOLDSD
1542.LT.
IF( IINFO0 ) THEN
1545 RESULT( NTEST ) = ULPINV
1546 RESULT( NTEST+1 ) = ULPINV
1547 RESULT( NTEST+2 ) = ULPINV
1554 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1556 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1557 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1560 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1562 CALL DSYEVX( 'n
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
1563 $ ABSTOL, M3, WA3, Z, LDU, WORK, LWORK, IWORK,
1564 $ IWORK( 5*N+1 ), IINFO )
1565.NE.
IF( IINFO0 ) THEN
1566 WRITE( NOUNIT, FMT = 9999 )'dsyevx(n,i,
' // UPLO //
1567 $ ')
', IINFO, N, JTYPE, IOLDSD
1569.LT.
IF( IINFO0 ) THEN
1572 RESULT( NTEST ) = ULPINV
1579 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1580 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1581 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1582 $ MAX( UNFL, ULP*TEMP3 )
1586 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1588 CALL DSYEVX( 'v
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
1589 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, IWORK,
1590 $ IWORK( 5*N+1 ), IINFO )
1591.NE.
IF( IINFO0 ) THEN
1592 WRITE( NOUNIT, FMT = 9999 )'dsyevx(v,v,
' // UPLO //
1593 $ ')
', IINFO, N, JTYPE, IOLDSD
1595.LT.
IF( IINFO0 ) THEN
1598 RESULT( NTEST ) = ULPINV
1599 RESULT( NTEST+1 ) = ULPINV
1600 RESULT( NTEST+2 ) = ULPINV
1607 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1609 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1610 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1613 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1615 CALL DSYEVX( 'n
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
1616 $ ABSTOL, M3, WA3, Z, LDU, WORK, LWORK, IWORK,
1617 $ IWORK( 5*N+1 ), IINFO )
1618.NE.
IF( IINFO0 ) THEN
1619 WRITE( NOUNIT, FMT = 9999 )'dsyevx(n,v,
' // UPLO //
1620 $ ')
', IINFO, N, JTYPE, IOLDSD
1622.LT.
IF( IINFO0 ) THEN
1625 RESULT( NTEST ) = ULPINV
1630.EQ..AND..GT.
IF( M30 N0 ) THEN
1631 RESULT( NTEST ) = ULPINV
1637 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1638 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1640 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1644 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1645 $ MAX( UNFL, TEMP3*ULP )
1651 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1656.EQ.
IF( IUPLO1 ) THEN
1660 WORK( INDX ) = A( I, J )
1668 WORK( INDX ) = A( I, J )
1676 CALL DSPEV( 'v
', UPLO, N, WORK, D1, Z, LDU, V, IINFO )
1677.NE.
IF( IINFO0 ) THEN
1678 WRITE( NOUNIT, FMT = 9999 )'dspev(v,
' // UPLO // ')
',
1679 $ IINFO, N, JTYPE, IOLDSD
1681.LT.
IF( IINFO0 ) THEN
1684 RESULT( NTEST ) = ULPINV
1685 RESULT( NTEST+1 ) = ULPINV
1686 RESULT( NTEST+2 ) = ULPINV
1693 CALL DSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
1694 $ LDU, TAU, WORK, RESULT( NTEST ) )
1696.EQ.
IF( IUPLO1 ) THEN
1700 WORK( INDX ) = A( I, J )
1708 WORK( INDX ) = A( I, J )
1716 CALL DSPEV( 'n
', UPLO, N, WORK, D3, Z, LDU, V, IINFO )
1717.NE.
IF( IINFO0 ) THEN
1718 WRITE( NOUNIT, FMT = 9999 )'dspev(n,
' // UPLO // ')
',
1719 $ IINFO, N, JTYPE, IOLDSD
1721.LT.
IF( IINFO0 ) THEN
1724 RESULT( NTEST ) = ULPINV
1734 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1735 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1737 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1738 $ ULP*MAX( TEMP1, TEMP2 ) )
1744.EQ.
IF( IUPLO1 ) THEN
1748 WORK( INDX ) = A( I, J )
1756 WORK( INDX ) = A( I, J )
1765 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
1767 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
1768 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1769.GT.
ELSE IF( N0 ) THEN
1770 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
1771 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1774 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
1775 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1776.GT.
ELSE IF( N0 ) THEN
1777 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
1778 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1787 CALL DSPEVX( 'v
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1788 $ ABSTOL, M, WA1, Z, LDU, V, IWORK,
1789 $ IWORK( 5*N+1 ), IINFO )
1790.NE.
IF( IINFO0 ) THEN
1791 WRITE( NOUNIT, FMT = 9999 )'dspevx(v,a,
' // UPLO //
1792 $ ')
', IINFO, N, JTYPE, IOLDSD
1794.LT.
IF( IINFO0 ) THEN
1797 RESULT( NTEST ) = ULPINV
1798 RESULT( NTEST+1 ) = ULPINV
1799 RESULT( NTEST+2 ) = ULPINV
1806 CALL DSYT21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
1807 $ LDU, TAU, WORK, RESULT( NTEST ) )
1811.EQ.
IF( IUPLO1 ) THEN
1815 WORK( INDX ) = A( I, J )
1823 WORK( INDX ) = A( I, J )
1830 CALL DSPEVX( 'n
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1831 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1832 $ IWORK( 5*N+1 ), IINFO )
1833.NE.
IF( IINFO0 ) THEN
1834 WRITE( NOUNIT, FMT = 9999 )'dspevx(n,a,
' // UPLO //
1835 $ ')
', IINFO, N, JTYPE, IOLDSD
1837.LT.
IF( IINFO0 ) THEN
1840 RESULT( NTEST ) = ULPINV
1850 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1851 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1853 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1854 $ ULP*MAX( TEMP1, TEMP2 ) )
1857.EQ.
IF( IUPLO1 ) THEN
1861 WORK( INDX ) = A( I, J )
1869 WORK( INDX ) = A( I, J )
1878 CALL DSPEVX( 'v
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1879 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1880 $ IWORK( 5*N+1 ), IINFO )
1881.NE.
IF( IINFO0 ) THEN
1882 WRITE( NOUNIT, FMT = 9999 )'dspevx(v,i,
' // UPLO //
1883 $ ')
', IINFO, N, JTYPE, IOLDSD
1885.LT.
IF( IINFO0 ) THEN
1888 RESULT( NTEST ) = ULPINV
1889 RESULT( NTEST+1 ) = ULPINV
1890 RESULT( NTEST+2 ) = ULPINV
1897 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1898 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1902.EQ.
IF( IUPLO1 ) THEN
1906 WORK( INDX ) = A( I, J )
1914 WORK( INDX ) = A( I, J )
1921 CALL DSPEVX( 'n
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1922 $ ABSTOL, M3, WA3, Z, LDU, V, IWORK,
1923 $ IWORK( 5*N+1 ), IINFO )
1924.NE.
IF( IINFO0 ) THEN
1925 WRITE( NOUNIT, FMT = 9999 )'dspevx(n,i,
' // UPLO //
1926 $ ')
', IINFO, N, JTYPE, IOLDSD
1928.LT.
IF( IINFO0 ) THEN
1931 RESULT( NTEST ) = ULPINV
1936.EQ..AND..GT.
IF( M30 N0 ) THEN
1937 RESULT( NTEST ) = ULPINV
1943 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1944 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1946 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1950 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1951 $ MAX( UNFL, TEMP3*ULP )
1954.EQ.
IF( IUPLO1 ) THEN
1958 WORK( INDX ) = A( I, J )
1966 WORK( INDX ) = A( I, J )
1975 CALL DSPEVX( 'v
', 'v
', UPLO, N, WORK, VL, VU, IL, IU,
1976 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1977 $ IWORK( 5*N+1 ), IINFO )
1978.NE.
IF( IINFO0 ) THEN
1979 WRITE( NOUNIT, FMT = 9999 )'dspevx(v,v,
' // UPLO //
1980 $ ')
', IINFO, N, JTYPE, IOLDSD
1982.LT.
IF( IINFO0 ) THEN
1985 RESULT( NTEST ) = ULPINV
1986 RESULT( NTEST+1 ) = ULPINV
1987 RESULT( NTEST+2 ) = ULPINV
1994 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1995 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1999.EQ.
IF( IUPLO1 ) THEN
2003 WORK( INDX ) = A( I, J )
2011 WORK( INDX ) = A( I, J )
2018 CALL DSPEVX( 'n',
'V', uplo, n, work, vl, vu, il, iu,
2019 $ abstol, m3, wa3, z, ldu, v, iwork,
2020 $ iwork( 5*n+1 ), iinfo )
2021 IF( iinfo.NE.0 )
THEN
2022 WRITE( nounit, fmt = 9999 )
'DSPEVX(N,V,' // uplo //
2023 $
')', iinfo, n, jtype, ioldsd
2025 IF( iinfo.LT.0 )
THEN
2028 result( ntest ) = ulpinv
2033 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2034 result( ntest ) = ulpinv
2040 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2041 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2043 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2047 result( ntest ) = ( temp1+temp2 ) /
2048 $
max( unfl, temp3*ulp )
2054 IF( jtype.LE.7 )
THEN
2056 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2065 IF( iuplo.EQ.1 )
THEN
2067 DO 1090 i =
max( 1, j-kd ), j
2068 v( kd+1+i-j, j ) = a( i, j )
2073 DO 1110 i = j,
min( n, j+kd )
2074 v( 1+i-j, j ) = a( i, j )
2081 CALL dsbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2083 IF( iinfo.NE.0 )
THEN
2084 WRITE( nounit, fmt = 9999 )
'DSBEV(V,' // uplo //
')',
2085 $ iinfo, n, jtype, ioldsd
2087 IF( iinfo.LT.0 )
THEN
2090 result( ntest ) = ulpinv
2091 result( ntest+1 ) = ulpinv
2092 result( ntest+2 ) = ulpinv
2099 CALL dsyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2100 $ ldu, tau, work, result( ntest ) )
2102 IF( iuplo.EQ.1 )
THEN
2104 DO 1130 i =
max( 1, j-kd ), j
2105 v( kd+1+i-j, j ) = a( i, j )
2110 DO 1150 i = j,
min( n, j+kd )
2111 v( 1+i-j, j ) = a( i, j )
2118 CALL dsbev(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2120 IF( iinfo.NE.0 )
THEN
2121 WRITE( nounit, fmt = 9999 )
'DSBEV(N,' // uplo //
')',
2122 $ iinfo, n, jtype, ioldsd
2124 IF( iinfo.LT.0 )
THEN
2127 result( ntest ) = ulpinv
2137 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2138 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
2140 result( ntest ) = temp2 /
max( unfl,
2141 $ ulp*
max( temp1, temp2 ) )
2147 IF( iuplo.EQ.1 )
THEN
2149 DO 1190 i =
max( 1, j-kd ), j
2150 v( kd+1+i-j, j ) = a( i, j )
2155 DO 1210 i = j,
min( n, j+kd )
2156 v( 1+i-j, j ) = a( i, j )
2163 CALL dsbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2164 $ vu, il, iu, abstol, m, wa2, z, ldu, work,
2165 $ iwork, iwork( 5*n+1 ), iinfo )
2166 IF( iinfo.NE.0 )
THEN
2167 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,A,' // uplo //
2168 $
')', iinfo, n, jtype, ioldsd
2170 IF( iinfo.LT.0 )
THEN
2173 result( ntest ) = ulpinv
2174 result( ntest+1 ) = ulpinv
2175 result( ntest+2 ) = ulpinv
2182 CALL dsyt21( 1, uplo, n, 0, a, ldu, wa2, d2, z, ldu, v,
2183 $ ldu, tau, work, result( ntest ) )
2187 IF( iuplo.EQ.1 )
THEN
2189 DO 1230 i =
max( 1, j-kd ), j
2190 v( kd+1+i-j, j ) = a( i, j )
2195 DO 1250 i = j,
min( n, j+kd )
2196 v( 1+i-j, j ) = a( i, j )
2202 CALL dsbevx(
'N',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2203 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2204 $ iwork, iwork( 5*n+1 ), iinfo )
2205 IF( iinfo.NE.0 )
THEN
2206 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,A,' // uplo //
2207 $
')', iinfo, n, jtype, ioldsd
2209 IF( iinfo.LT.0 )
THEN
2212 result( ntest ) = ulpinv
2222 temp1 =
max( temp1, abs( wa2( j ) ), abs( wa3( j ) ) )
2223 temp2 =
max( temp2, abs( wa2( j )-wa3( j ) ) )
2225 result( ntest ) = temp2 /
max( unfl,
2226 $ ulp*
max( temp1, temp2 ) )
2230 IF( iuplo.EQ.1 )
THEN
2232 DO 1290 i =
max( 1, j-kd ), j
2233 v( kd+1+i-j, j ) = a( i, j )
2238 DO 1310 i = j,
min( n, j+kd )
2239 v( 1+i-j, j ) = a( i, j )
2245 CALL dsbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2246 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2247 $ iwork, iwork( 5*n+1 ), iinfo )
2248 IF( iinfo.NE.0 )
THEN
2249 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,I,' // uplo //
2250 $
')', iinfo, n, jtype, ioldsd
2252 IF( iinfo.LT.0 )
THEN
2255 result( ntest ) = ulpinv
2256 result( ntest+1 ) = ulpinv
2257 result( ntest+2 ) = ulpinv
2264 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2265 $ v, ldu, tau, work, result( ntest ) )
2269 IF( iuplo.EQ.1 )
THEN
2271 DO 1330 i =
max( 1, j-kd ), j
2272 v( kd+1+i-j, j ) = a( i, j )
2277 DO 1350 i = j,
min( n, j+kd )
2278 v( 1+i-j, j ) = a( i, j )
2284 CALL dsbevx(
'N',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2285 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2286 $ iwork, iwork( 5*n+1 ), iinfo )
2287 IF( iinfo.NE.0 )
THEN
2288 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,I,' // uplo //
2289 $
')', iinfo, n, jtype, ioldsd
2291 IF( iinfo.LT.0 )
THEN
2294 result( ntest ) = ulpinv
2301 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2302 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2304 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2308 result( ntest ) = ( temp1+temp2 ) /
2309 $
max( unfl, temp3*ulp )
2313 IF( iuplo.EQ.1 )
THEN
2315 DO 1380 i =
max( 1, j-kd ), j
2316 v( kd+1+i-j, j ) = a( i, j )
2321 DO 1400 i = j,
min( n, j+kd )
2322 v( 1+i-j, j ) = a( i, j )
2328 CALL dsbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2329 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2330 $ iwork, iwork( 5*n+1 ), iinfo )
2331 IF( iinfo.NE.0 )
THEN
2332 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,V,' // uplo //
2333 $
')', iinfo, n, jtype, ioldsd
2335 IF( iinfo.LT.0 )
THEN
2338 result( ntest ) = ulpinv
2339 result( ntest+1 ) = ulpinv
2340 result( ntest+2 ) = ulpinv
2347 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2348 $ v, ldu, tau, work, result( ntest ) )
2352 IF( iuplo.EQ.1 )
THEN
2354 DO 1420 i =
max( 1, j-kd ), j
2355 v( kd+1+i-j, j ) = a( i, j )
2360 DO 1440 i = j,
min( n, j+kd )
2361 v( 1+i-j, j ) = a( i, j )
2367 CALL dsbevx(
'N',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2368 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2369 $ iwork, iwork( 5*n+1 ), iinfo )
2370 IF( iinfo.NE.0 )
THEN
2371 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,V,' // uplo //
2372 $
')', iinfo, n, jtype, ioldsd
2374 IF( iinfo.LT.0 )
THEN
2377 result( ntest ) = ulpinv
2382 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2383 result( ntest ) = ulpinv
2389 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2390 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2392 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2396 result( ntest ) = ( temp1+temp2 ) /
2397 $
max( unfl, temp3*ulp )
2403 CALL dlacpy(
' ', n, n, a, lda, v, ldu )
2407 CALL dsyevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
2408 $ iwork, liwedc, iinfo )
2409 IF( iinfo.NE.0 )
THEN
2410 WRITE( nounit, fmt = 9999 )
'DSYEVD(V,' // uplo //
2411 $
')', iinfo, n, jtype, ioldsd
2413 IF( iinfo.LT.0 )
THEN
2416 result( ntest ) = ulpinv
2417 result( ntest+1 ) = ulpinv
2418 result( ntest+2 ) = ulpinv
2425 CALL dsyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2426 $ ldu, tau, work, result( ntest ) )
2428 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2432 CALL dsyevd(
'N', uplo, n, a, ldu, d3, work, lwedc,
2433 $ iwork, liwedc, iinfo )
2434 IF( iinfo.NE.0 )
THEN
2435 WRITE( nounit, fmt = 9999 )
'DSYEVD(N,' // uplo //
2436 $
')', iinfo, n, jtype, ioldsd
2438 IF( iinfo.LT.0 )
THEN
2441 result( ntest ) = ulpinv
2451 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2452 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
2454 result( ntest ) = temp2 /
max( unfl,
2455 $ ulp*
max( temp1, temp2 ) )
2461 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2466 IF( iuplo.EQ.1 )
THEN
2470 work( indx ) = a( i, j )
2478 work( indx ) = a( i, j )
2486 CALL DSPEVD( 'v
', UPLO, N, WORK, D1, Z, LDU,
2487 $ WORK( INDX ), LWEDC-INDX+1, IWORK, LIWEDC,
2489.NE.
IF( IINFO0 ) THEN
2490 WRITE( NOUNIT, FMT = 9999 )'dspevd(v,
' // UPLO //
2491 $ ')
', IINFO, N, JTYPE, IOLDSD
2493.LT.
IF( IINFO0 ) THEN
2496 RESULT( NTEST ) = ULPINV
2497 RESULT( NTEST+1 ) = ULPINV
2498 RESULT( NTEST+2 ) = ULPINV
2505 CALL DSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
2506 $ LDU, TAU, WORK, RESULT( NTEST ) )
2508.EQ.
IF( IUPLO1 ) THEN
2513 WORK( INDX ) = A( I, J )
2521 WORK( INDX ) = A( I, J )
2529 CALL DSPEVD( 'n
', UPLO, N, WORK, D3, Z, LDU,
2530 $ WORK( INDX ), LWEDC-INDX+1, IWORK, LIWEDC,
2532.NE.
IF( IINFO0 ) THEN
2533 WRITE( NOUNIT, FMT = 9999 )'dspevd(n,
' // UPLO //
2534 $ ')
', IINFO, N, JTYPE, IOLDSD
2536.LT.
IF( IINFO0 ) THEN
2539 RESULT( NTEST ) = ULPINV
2549 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
2550 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
2552 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2553 $ ULP*MAX( TEMP1, TEMP2 ) )
2558.LE.
IF( JTYPE7 ) THEN
2560.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
2569.EQ.
IF( IUPLO1 ) THEN
2571 DO 1590 I = MAX( 1, J-KD ), J
2572 V( KD+1+I-J, J ) = A( I, J )
2577 DO 1610 I = J, MIN( N, J+KD )
2578 V( 1+I-J, J ) = A( I, J )
2585 CALL DSBEVD( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
2586 $ LWEDC, IWORK, LIWEDC, IINFO )
2587.NE.
IF( IINFO0 ) THEN
2588 WRITE( NOUNIT, FMT = 9999 )'dsbevd(v,
' // UPLO //
2589 $ ')
', IINFO, N, JTYPE, IOLDSD
2591.LT.
IF( IINFO0 ) THEN
2594 RESULT( NTEST ) = ULPINV
2595 RESULT( NTEST+1 ) = ULPINV
2596 RESULT( NTEST+2 ) = ULPINV
2603 CALL DSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
2604 $ LDU, TAU, WORK, RESULT( NTEST ) )
2606.EQ.
IF( IUPLO1 ) THEN
2608 DO 1630 I = MAX( 1, J-KD ), J
2609 V( KD+1+I-J, J ) = A( I, J )
2614 DO 1650 I = J, MIN( N, J+KD )
2615 V( 1+I-J, J ) = A( I, J )
2622 CALL DSBEVD( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
2623 $ LWEDC, IWORK, LIWEDC, IINFO )
2624.NE.
IF( IINFO0 ) THEN
2625 WRITE( NOUNIT, FMT = 9999 )'dsbevd(n,
' // UPLO //
2626 $ ')
', IINFO, N, JTYPE, IOLDSD
2628.LT.
IF( IINFO0 ) THEN
2631 RESULT( NTEST ) = ULPINV
2641 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
2642 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
2644 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2645 $ ULP*MAX( TEMP1, TEMP2 ) )
2650 CALL DLACPY( ' ', N, N, A, LDA, V, LDU )
2653 CALL DSYEVR( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
2654 $ ABSTOL, M, WA1, Z, LDU, IWORK, WORK, LWORK,
2655 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2656.NE.
IF( IINFO0 ) THEN
2657 WRITE( NOUNIT, FMT = 9999 )'dsyevr(v,a,
' // UPLO //
2658 $ ')
', IINFO, N, JTYPE, IOLDSD
2660.LT.
IF( IINFO0 ) THEN
2663 RESULT( NTEST ) = ULPINV
2664 RESULT( NTEST+1 ) = ULPINV
2665 RESULT( NTEST+2 ) = ULPINV
2672 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2674 CALL DSYT21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
2675 $ LDU, TAU, WORK, RESULT( NTEST ) )
2679 CALL DSYEVR( 'n
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
2680 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
2681 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2682.NE.
IF( IINFO0 ) THEN
2683 WRITE( NOUNIT, FMT = 9999 )'dsyevr(n,a,
' // UPLO //
2684 $ ')
', IINFO, N, JTYPE, IOLDSD
2686.LT.
IF( IINFO0 ) THEN
2689 RESULT( NTEST ) = ULPINV
2699 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
2700 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
2702 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2703 $ ULP*MAX( TEMP1, TEMP2 ) )
2708 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2710 CALL DSYEVR( 'v
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
2711 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
2712 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2713.NE.
IF( IINFO0 ) THEN
2714 WRITE( NOUNIT, FMT = 9999 )'dsyevr(v,i,
' // UPLO //
2715 $ ')
', IINFO, N, JTYPE, IOLDSD
2717.LT.
IF( IINFO0 ) THEN
2720 RESULT( NTEST ) = ULPINV
2721 RESULT( NTEST+1 ) = ULPINV
2722 RESULT( NTEST+2 ) = ULPINV
2729 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2731 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2732 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2735 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2737 CALL DSYEVR( 'n
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
2738 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
2739 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2740.NE.
IF( IINFO0 ) THEN
2741 WRITE( NOUNIT, FMT = 9999 )'dsyevr(n,i,
' // UPLO //
2742 $ ')
', IINFO, N, JTYPE, IOLDSD
2744.LT.
IF( IINFO0 ) THEN
2747 RESULT( NTEST ) = ULPINV
2754 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2755 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2756 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2757 $ MAX( UNFL, ULP*TEMP3 )
2761 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2763 CALL DSYEVR( 'v
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
2764 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
2765 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2766.NE.
IF( IINFO0 ) THEN
2767 WRITE( NOUNIT, FMT = 9999 )'dsyevr(v,v,
' // UPLO //
2768 $ ')
', IINFO, N, JTYPE, IOLDSD
2770.LT.
IF( IINFO0 ) THEN
2773 RESULT( NTEST ) = ULPINV
2774 RESULT( NTEST+1 ) = ULPINV
2775 RESULT( NTEST+2 ) = ULPINV
2782 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2784 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2785 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2788 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2790 CALL DSYEVR( 'n
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
2791 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
2792 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2793.NE.
IF( IINFO0 ) THEN
2794 WRITE( NOUNIT, FMT = 9999 )'dsyevr(n,v,
' // UPLO //
2795 $ ')
', IINFO, N, JTYPE, IOLDSD
2797.LT.
IF( IINFO0 ) THEN
2800 RESULT( NTEST ) = ULPINV
2805.EQ..AND..GT.
IF( M30 N0 ) THEN
2806 RESULT( NTEST ) = ULPINV
2812 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2813 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2815 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
2819 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2820 $ MAX( UNFL, TEMP3*ULP )
2822 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2828 NTESTT = NTESTT + NTEST
2830 CALL DLAFTS( 'dst
', N, N, JTYPE, NTEST, RESULT, IOLDSD,
2831 $ THRESH, NOUNIT, NERRS )
2838 CALL ALASVM( 'dst
', NOUNIT, NERRS, NTESTT, 0 )
2840 9999 FORMAT( ' ddrvst:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
2841 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')' )