334 SUBROUTINE cdrvst2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
335 $ NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U,
336 $ LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK,
337 $ IWORK, LIWORK, RESULT, INFO )
344 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
350 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
351 REAL D1( * ), D2( * ), D3( * ), RESULT( * ),
352 $ rwork( * ), wa1( * ), wa2( * ), wa3( * )
353 COMPLEX A( LDA, * ), TAU( * ), U( LDU, * ),
354 $ v( ldu, * ), work( * ), z( ldu, * )
361 REAL ZERO, ONE, TWO, TEN
362 PARAMETER ( ZERO = 0.0e+0, one = 1.0e+0, two = 2.0e+0,
365 parameter( half = one / two )
367 parameter( czero = ( 0.0e+0, 0.0e+0 ),
368 $ cone = ( 1.0e+0, 0.0e+0 ) )
370 parameter( maxtyp = 18 )
375 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDWRK, INDX,
376 $ irow, itemp, itype, iu, iuplo, j, j1, j2, jcol,
377 $ jsize, jtype, kd, lgn, liwedc, lrwedc, lwedc,
378 $ m, m2, m3, mtypes, n, nerrs, nmats, nmax,
380 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
381 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
385 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
386 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
390 REAL SLAMCH, SLARND, SSXT1
391 EXTERNAL SLAMCH, SLARND, SSXT1
402 INTRINSIC abs, real, int, log, max, min, sqrt
405 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
406 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
408 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
421 nmax = max( nmax, nn( j ) )
428 IF( nsizes.LT.0 )
THEN
430 ELSE IF( badnn )
THEN
432 ELSE IF( ntypes.LT.0 )
THEN
434 ELSE IF( lda.LT.nmax )
THEN
436 ELSE IF( ldu.LT.nmax )
THEN
438 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
443 CALL xerbla(
'CDRVST2STG', -info )
449 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
454 unfl = slamch(
'Safe minimum' )
455 ovfl = slamch(
'Overflow' )
456 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
458 rtunfl = sqrt( unfl )
459 rtovfl = sqrt( ovfl )
464 iseed2( i ) = iseed( i )
465 iseed3( i ) = iseed( i )
471 DO 1220 jsize = 1, nsizes
474 lgn = int( log( real( n ) ) / log( two ) )
479 lwedc = max( 2*n+n*n, 2*n*n )
480 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
487 aninv = one / real( max( 1, n ) )
489 IF( nsizes.NE.1 )
THEN
490 mtypes = min( maxtyp, ntypes )
492 mtypes = min( maxtyp+1, ntypes )
495 DO 1210 jtype = 1, mtypes
496 IF( .NOT.dotype( jtype ) )
502 ioldsd( j ) = iseed( j )
520 IF( mtypes.GT.maxtyp )
523 itype = ktype( jtype )
524 imode = kmode( jtype )
528 GO TO ( 40, 50, 60 )kmagn( jtype )
535 anorm = ( rtovfl*ulp )*aninv
539 anorm = rtunfl*n*ulpinv
544 CALL claset(
'Full', lda, n, czero, czero, a, lda )
552 IF( itype.EQ.1 )
THEN
555 ELSE IF( itype.EQ.2 )
THEN
560 a( jcol, jcol ) = anorm
563 ELSE IF( itype.EQ.4 )
THEN
567 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
568 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
570 ELSE IF( itype.EQ.5 )
THEN
574 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
575 $ anorm, n, n,
'N', a, lda, work, iinfo )
577 ELSE IF( itype.EQ.7 )
THEN
581 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
582 $
'T',
'N', work( n+1 ), 1, one,
583 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
584 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
586 ELSE IF( itype.EQ.8 )
THEN
590 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
591 $
'T',
'N', work( n+1 ), 1, one,
592 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
593 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
595 ELSE IF( itype.EQ.9 )
THEN
599 ihbw = int( ( n-1 )*slarnd( 1, iseed3 ) )
600 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
601 $ anorm, ihbw, ihbw,
'Z', u, ldu, work,
606 CALL claset(
'Full', lda, n, czero, czero, a, lda )
607 DO 100 idiag = -ihbw, ihbw
608 irow = ihbw - idiag + 1
609 j1 = max( 1, idiag+1 )
610 j2 = min( n, n+idiag )
613 a( i, j ) = u( irow, j )
620 IF( iinfo.NE.0 )
THEN
621 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
634 il = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
635 iu = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
647 IF( iuplo.EQ.0 )
THEN
655 CALL clacpy(
' ', n, n, a, lda, v, ldu )
658 CALL cheevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
659 $ rwork, lrwedc, iwork, liwedc, iinfo )
660 IF( iinfo.NE.0 )
THEN
661 WRITE( nounit, fmt = 9999 )
'CHEEVD(V,' // uplo //
662 $
')', iinfo, n, jtype, ioldsd
664 IF( iinfo.LT.0 )
THEN
667 result( ntest ) = ulpinv
668 result( ntest+1 ) = ulpinv
669 result( ntest+2 ) = ulpinv
676 CALL chet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
677 $ ldu, tau, work, rwork, result( ntest ) )
679 CALL clacpy(
' ', n, n, v, ldu, a, lda )
683 $ lwork, rwork, lrwedc, iwork, liwedc, iinfo )
684 IF( iinfo.NE.0 )
THEN
685 WRITE( nounit, fmt = 9999 )
686 $
'CHEEVD_2STAGE(N,' // uplo //
687 $
')', iinfo, n, jtype, ioldsd
689 IF( iinfo.LT.0 )
THEN
692 result( ntest ) = ulpinv
702 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
703 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
705 result( ntest ) = temp2 / max( unfl,
706 $ ulp*max( temp1, temp2 ) )
709 CALL clacpy(
' ', n, n, v, ldu, a, lda )
714 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
716 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
717 $ ten*ulp*temp3, ten*rtunfl )
718 ELSE IF( n.GT.0 )
THEN
719 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
720 $ ten*ulp*temp3, ten*rtunfl )
723 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
724 $ ten*ulp*temp3, ten*rtunfl )
725 ELSE IF( n.GT.0 )
THEN
726 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
727 $ ten*ulp*temp3, ten*rtunfl )
735 CALL cheevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
736 $ abstol, m, wa1, z, ldu, work, lwork, rwork,
737 $ iwork, iwork( 5*n+1 ), iinfo )
738 IF( iinfo.NE.0 )
THEN
739 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,A,' // uplo //
740 $
')', iinfo, n, jtype, ioldsd
742 IF( iinfo.LT.0 )
THEN
745 result( ntest ) = ulpinv
746 result( ntest+1 ) = ulpinv
747 result( ntest+2 ) = ulpinv
754 CALL clacpy(
' ', n, n, v, ldu, a, lda )
756 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
757 $ ldu, tau, work, rwork, result( ntest ) )
761 $ il, iu, abstol, m2, wa2, z, ldu,
762 $ work, lwork, rwork, iwork,
763 $ iwork( 5*n+1 ), iinfo )
764 IF( iinfo.NE.0 )
THEN
765 WRITE( nounit, fmt = 9999 )
766 $
'CHEEVX_2STAGE(N,A,' // uplo //
767 $
')', iinfo, n, jtype, ioldsd
769 IF( iinfo.LT.0 )
THEN
772 result( ntest ) = ulpinv
782 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
783 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
785 result( ntest ) = temp2 / max( unfl,
786 $ ulp*max( temp1, temp2 ) )
789 CALL clacpy(
' ', n, n, v, ldu, a, lda )
793 CALL cheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
794 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
795 $ iwork, iwork( 5*n+1 ), iinfo )
796 IF( iinfo.NE.0 )
THEN
797 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,I,' // uplo //
798 $
')', iinfo, n, jtype, ioldsd
800 IF( iinfo.LT.0 )
THEN
803 result( ntest ) = ulpinv
810 CALL clacpy(
' ', n, n, v, ldu, a, lda )
812 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
813 $ v, ldu, tau, work, rwork, result( ntest ) )
818 $ il, iu, abstol, m3, wa3, z, ldu,
819 $ work, lwork, rwork, iwork,
820 $ iwork( 5*n+1 ), iinfo )
821 IF( iinfo.NE.0 )
THEN
822 WRITE( nounit, fmt = 9999 )
823 $
'CHEEVX_2STAGE(N,I,' // uplo //
824 $
')', iinfo, n, jtype, ioldsd
826 IF( iinfo.LT.0 )
THEN
829 result( ntest ) = ulpinv
836 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
837 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
839 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
843 result( ntest ) = ( temp1+temp2 ) /
844 $ max( unfl, temp3*ulp )
847 CALL clacpy(
' ', n, n, v, ldu, a, lda )
851 CALL cheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
852 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
853 $ iwork, iwork( 5*n+1 ), iinfo )
854 IF( iinfo.NE.0 )
THEN
855 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,V,' // uplo //
856 $
')', iinfo, n, jtype, ioldsd
858 IF( iinfo.LT.0 )
THEN
861 result( ntest ) = ulpinv
868 CALL clacpy(
' ', n, n, v, ldu, a, lda )
870 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
871 $ v, ldu, tau, work, rwork, result( ntest ) )
876 $ il, iu, abstol, m3, wa3, z, ldu,
877 $ work, lwork, rwork, iwork,
878 $ iwork( 5*n+1 ), iinfo )
879 IF( iinfo.NE.0 )
THEN
880 WRITE( nounit, fmt = 9999 )
881 $
'CHEEVX_2STAGE(N,V,' // uplo //
882 $
')', iinfo, n, jtype, ioldsd
884 IF( iinfo.LT.0 )
THEN
887 result( ntest ) = ulpinv
892 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
893 result( ntest ) = ulpinv
899 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
900 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
902 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
906 result( ntest ) = ( temp1+temp2 ) /
907 $ max( unfl, temp3*ulp )
913 CALL clacpy(
' ', n, n, v, ldu, a, lda )
918 IF( iuplo.EQ.1 )
THEN
922 work( indx ) = a( i, j )
930 work( indx ) = a( i, j )
937 indwrk = n*( n+1 ) / 2 + 1
938 CALL chpevd(
'V', uplo, n, work, d1, z, ldu,
939 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
941 IF( iinfo.NE.0 )
THEN
942 WRITE( nounit, fmt = 9999 )
'CHPEVD(V,' // uplo //
943 $
')', iinfo, n, jtype, ioldsd
945 IF( iinfo.LT.0 )
THEN
948 result( ntest ) = ulpinv
949 result( ntest+1 ) = ulpinv
950 result( ntest+2 ) = ulpinv
957 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
958 $ ldu, tau, work, rwork, result( ntest ) )
960 IF( iuplo.EQ.1 )
THEN
964 work( indx ) = a( i, j )
972 work( indx ) = a( i, j )
979 indwrk = n*( n+1 ) / 2 + 1
980 CALL chpevd(
'N', uplo, n, work, d3, z, ldu,
981 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
983 IF( iinfo.NE.0 )
THEN
984 WRITE( nounit, fmt = 9999 )
'CHPEVD(N,' // uplo //
985 $
')', iinfo, n, jtype, ioldsd
987 IF( iinfo.LT.0 )
THEN
990 result( ntest ) = ulpinv
1000 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1001 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1003 result( ntest ) = temp2 / max( unfl,
1004 $ ulp*max( temp1, temp2 ) )
1010 IF( iuplo.EQ.1 )
THEN
1014 work( indx ) = a( i, j )
1022 work( indx ) = a( i, j )
1031 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1033 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1034 $ ten*ulp*temp3, ten*rtunfl )
1035 ELSE IF( n.GT.0 )
THEN
1036 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1037 $ ten*ulp*temp3, ten*rtunfl )
1040 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1041 $ ten*ulp*temp3, ten*rtunfl )
1042 ELSE IF( n.GT.0 )
THEN
1043 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1044 $ ten*ulp*temp3, ten*rtunfl )
1052 CALL chpevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1053 $ abstol, m, wa1, z, ldu, v, rwork, iwork,
1054 $ iwork( 5*n+1 ), iinfo )
1055 IF( iinfo.NE.0 )
THEN
1056 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,A,' // uplo //
1057 $
')', iinfo, n, jtype, ioldsd
1059 IF( iinfo.LT.0 )
THEN
1062 result( ntest ) = ulpinv
1063 result( ntest+1 ) = ulpinv
1064 result( ntest+2 ) = ulpinv
1071 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1072 $ ldu, tau, work, rwork, result( ntest ) )
1076 IF( iuplo.EQ.1 )
THEN
1080 work( indx ) = a( i, j )
1088 work( indx ) = a( i, j )
1094 CALL chpevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1095 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1096 $ iwork( 5*n+1 ), iinfo )
1097 IF( iinfo.NE.0 )
THEN
1098 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,A,' // uplo //
1099 $
')', iinfo, n, jtype, ioldsd
1101 IF( iinfo.LT.0 )
THEN
1104 result( ntest ) = ulpinv
1114 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1115 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1117 result( ntest ) = temp2 / max( unfl,
1118 $ ulp*max( temp1, temp2 ) )
1122 IF( iuplo.EQ.1 )
THEN
1126 work( indx ) = a( i, j )
1134 work( indx ) = a( i, j )
1140 CALL chpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1141 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1142 $ iwork( 5*n+1 ), iinfo )
1143 IF( iinfo.NE.0 )
THEN
1144 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,I,' // uplo //
1145 $
')', iinfo, n, jtype, ioldsd
1147 IF( iinfo.LT.0 )
THEN
1150 result( ntest ) = ulpinv
1151 result( ntest+1 ) = ulpinv
1152 result( ntest+2 ) = ulpinv
1159 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1160 $ v, ldu, tau, work, rwork, result( ntest ) )
1164 IF( iuplo.EQ.1 )
THEN
1168 work( indx ) = a( i, j )
1176 work( indx ) = a( i, j )
1182 CALL chpevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1183 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1184 $ iwork( 5*n+1 ), iinfo )
1185 IF( iinfo.NE.0 )
THEN
1186 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,I,' // uplo //
1187 $
')', iinfo, n, jtype, ioldsd
1189 IF( iinfo.LT.0 )
THEN
1192 result( ntest ) = ulpinv
1199 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1200 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1202 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1206 result( ntest ) = ( temp1+temp2 ) /
1207 $ max( unfl, temp3*ulp )
1211 IF( iuplo.EQ.1 )
THEN
1215 work( indx ) = a( i, j )
1223 work( indx ) = a( i, j )
1229 CALL chpevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1230 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1231 $ iwork( 5*n+1 ), iinfo )
1232 IF( iinfo.NE.0 )
THEN
1233 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,V,' // uplo //
1234 $
')', iinfo, n, jtype, ioldsd
1236 IF( iinfo.LT.0 )
THEN
1239 result( ntest ) = ulpinv
1240 result( ntest+1 ) = ulpinv
1241 result( ntest+2 ) = ulpinv
1248 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1249 $ v, ldu, tau, work, rwork, result( ntest ) )
1253 IF( iuplo.EQ.1 )
THEN
1257 work( indx ) = a( i, j )
1265 work( indx ) = a( i, j )
1271 CALL chpevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
1272 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1273 $ iwork( 5*n+1 ), iinfo )
1274 IF( iinfo.NE.0 )
THEN
1275 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,V,' // uplo //
1276 $
')', iinfo, n, jtype, ioldsd
1278 IF( iinfo.LT.0 )
THEN
1281 result( ntest ) = ulpinv
1286 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1287 result( ntest ) = ulpinv
1293 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1294 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1296 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1300 result( ntest ) = ( temp1+temp2 ) /
1301 $ max( unfl, temp3*ulp )
1307 IF( jtype.LE.7 )
THEN
1309 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1318 IF( iuplo.EQ.1 )
THEN
1320 DO 560 i = max( 1, j-kd ), j
1321 v( kd+1+i-j, j ) = a( i, j )
1326 DO 580 i = j, min( n, j+kd )
1327 v( 1+i-j, j ) = a( i, j )
1333 CALL chbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1334 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1335 IF( iinfo.NE.0 )
THEN
1336 WRITE( nounit, fmt = 9998 )
'CHBEVD(V,' // uplo //
1337 $
')', iinfo, n, kd, jtype, ioldsd
1339 IF( iinfo.LT.0 )
THEN
1342 result( ntest ) = ulpinv
1343 result( ntest+1 ) = ulpinv
1344 result( ntest+2 ) = ulpinv
1351 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1352 $ ldu, tau, work, rwork, result( ntest ) )
1354 IF( iuplo.EQ.1 )
THEN
1356 DO 600 i = max( 1, j-kd ), j
1357 v( kd+1+i-j, j ) = a( i, j )
1362 DO 620 i = j, min( n, j+kd )
1363 v( 1+i-j, j ) = a( i, j )
1370 $ z, ldu, work, lwork, rwork,
1371 $ lrwedc, iwork, liwedc, iinfo )
1372 IF( iinfo.NE.0 )
THEN
1373 WRITE( nounit, fmt = 9998 )
1374 $
'CHBEVD_2STAGE(N,' // uplo //
1375 $
')', iinfo, n, kd, jtype, ioldsd
1377 IF( iinfo.LT.0 )
THEN
1380 result( ntest ) = ulpinv
1390 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1391 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1393 result( ntest ) = temp2 / max( unfl,
1394 $ ulp*max( temp1, temp2 ) )
1400 IF( iuplo.EQ.1 )
THEN
1402 DO 660 i = max( 1, j-kd ), j
1403 v( kd+1+i-j, j ) = a( i, j )
1408 DO 680 i = j, min( n, j+kd )
1409 v( 1+i-j, j ) = a( i, j )
1415 CALL chbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
1416 $ vu, il, iu, abstol, m, wa1, z, ldu, work,
1417 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1418 IF( iinfo.NE.0 )
THEN
1419 WRITE( nounit, fmt = 9999 )
'CHBEVX(V,A,' // uplo //
1420 $
')', iinfo, n, kd, jtype, ioldsd
1422 IF( iinfo.LT.0 )
THEN
1425 result( ntest ) = ulpinv
1426 result( ntest+1 ) = ulpinv
1427 result( ntest+2 ) = ulpinv
1434 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1435 $ ldu, tau, work, rwork, result( ntest ) )
1439 IF( iuplo.EQ.1 )
THEN
1441 DO 700 i = max( 1, j-kd ), j
1442 v( kd+1+i-j, j ) = a( i, j )
1447 DO 720 i = j, min( n, j+kd )
1448 v( 1+i-j, j ) = a( i, j )
1454 $ u, ldu, vl, vu, il, iu, abstol,
1455 $ m2, wa2, z, ldu, work, lwork,
1456 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1457 IF( iinfo.NE.0 )
THEN
1458 WRITE( nounit, fmt = 9998 )
1459 $
'CHBEVX_2STAGE(N,A,' // uplo //
1460 $
')', iinfo, n, kd, jtype, ioldsd
1462 IF( iinfo.LT.0 )
THEN
1465 result( ntest ) = ulpinv
1475 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1476 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1478 result( ntest ) = temp2 / max( unfl,
1479 $ ulp*max( temp1, temp2 ) )
1486 IF( iuplo.EQ.1 )
THEN
1488 DO 760 i = max( 1, j-kd ), j
1489 v( kd+1+i-j, j ) = a( i, j )
1494 DO 780 i = j, min( n, j+kd )
1495 v( 1+i-j, j ) = a( i, j )
1500 CALL chbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1501 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1502 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1503 IF( iinfo.NE.0 )
THEN
1504 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,I,' // uplo //
1505 $
')', iinfo, n, kd, jtype, ioldsd
1507 IF( iinfo.LT.0 )
THEN
1510 result( ntest ) = ulpinv
1511 result( ntest+1 ) = ulpinv
1512 result( ntest+2 ) = ulpinv
1519 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1520 $ v, ldu, tau, work, rwork, result( ntest ) )
1524 IF( iuplo.EQ.1 )
THEN
1526 DO 800 i = max( 1, j-kd ), j
1527 v( kd+1+i-j, j ) = a( i, j )
1532 DO 820 i = j, min( n, j+kd )
1533 v( 1+i-j, j ) = a( i, j )
1538 $ u, ldu, vl, vu, il, iu, abstol,
1539 $ m3, wa3, z, ldu, work, lwork,
1540 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1541 IF( iinfo.NE.0 )
THEN
1542 WRITE( nounit, fmt = 9998 )
1543 $
'CHBEVX_2STAGE(N,I,' // uplo //
1544 $
')', iinfo, n, kd, jtype, ioldsd
1546 IF( iinfo.LT.0 )
THEN
1549 result( ntest ) = ulpinv
1556 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1557 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1559 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1563 result( ntest ) = ( temp1+temp2 ) /
1564 $ max( unfl, temp3*ulp )
1571 IF( iuplo.EQ.1 )
THEN
1573 DO 850 i = max( 1, j-kd ), j
1574 v( kd+1+i-j, j ) = a( i, j )
1579 DO 870 i = j, min( n, j+kd )
1580 v( 1+i-j, j ) = a( i, j )
1584 CALL chbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1585 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1586 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1587 IF( iinfo.NE.0 )
THEN
1588 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,V,' // uplo //
1589 $
')', iinfo, n, kd, jtype, ioldsd
1591 IF( iinfo.LT.0 )
THEN
1594 result( ntest ) = ulpinv
1595 result( ntest+1 ) = ulpinv
1596 result( ntest+2 ) = ulpinv
1603 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1604 $ v, ldu, tau, work, rwork, result( ntest ) )
1608 IF( iuplo.EQ.1 )
THEN
1610 DO 890 i = max( 1, j-kd ), j
1611 v( kd+1+i-j, j ) = a( i, j )
1616 DO 910 i = j, min( n, j+kd )
1617 v( 1+i-j, j ) = a( i, j )
1622 $ u, ldu, vl, vu, il, iu, abstol,
1623 $ m3, wa3, z, ldu, work, lwork,
1624 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1625 IF( iinfo.NE.0 )
THEN
1626 WRITE( nounit, fmt = 9998 )
1627 $
'CHBEVX_2STAGE(N,V,' // uplo //
1628 $
')', iinfo, n, kd, jtype, ioldsd
1630 IF( iinfo.LT.0 )
THEN
1633 result( ntest ) = ulpinv
1638 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1639 result( ntest ) = ulpinv
1645 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1646 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1648 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1652 result( ntest ) = ( temp1+temp2 ) /
1653 $ max( unfl, temp3*ulp )
1659 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1662 CALL cheev(
'V', uplo, n, a, ldu, d1, work, lwork, rwork,
1664 IF( iinfo.NE.0 )
THEN
1665 WRITE( nounit, fmt = 9999 )
'CHEEV(V,' // uplo //
')',
1666 $ iinfo, n, jtype, ioldsd
1668 IF( iinfo.LT.0 )
THEN
1671 result( ntest ) = ulpinv
1672 result( ntest+1 ) = ulpinv
1673 result( ntest+2 ) = ulpinv
1680 CALL chet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1681 $ ldu, tau, work, rwork, result( ntest ) )
1683 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1687 $ work, lwork, rwork, iinfo )
1688 IF( iinfo.NE.0 )
THEN
1689 WRITE( nounit, fmt = 9999 )
1690 $
'CHEEV_2STAGE(N,' // uplo //
')',
1691 $ iinfo, n, jtype, ioldsd
1693 IF( iinfo.LT.0 )
THEN
1696 result( ntest ) = ulpinv
1706 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1707 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1709 result( ntest ) = temp2 / max( unfl,
1710 $ ulp*max( temp1, temp2 ) )
1714 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1721 IF( iuplo.EQ.1 )
THEN
1725 work( indx ) = a( i, j )
1733 work( indx ) = a( i, j )
1740 indwrk = n*( n+1 ) / 2 + 1
1741 CALL chpev(
'V', uplo, n, work, d1, z, ldu,
1742 $ work( indwrk ), rwork, iinfo )
1743 IF( iinfo.NE.0 )
THEN
1744 WRITE( nounit, fmt = 9999 )
'CHPEV(V,' // uplo //
')',
1745 $ iinfo, n, jtype, ioldsd
1747 IF( iinfo.LT.0 )
THEN
1750 result( ntest ) = ulpinv
1751 result( ntest+1 ) = ulpinv
1752 result( ntest+2 ) = ulpinv
1759 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1760 $ ldu, tau, work, rwork, result( ntest ) )
1762 IF( iuplo.EQ.1 )
THEN
1766 work( indx ) = a( i, j )
1774 work( indx ) = a( i, j )
1781 indwrk = n*( n+1 ) / 2 + 1
1782 CALL chpev(
'N', uplo, n, work, d3, z, ldu,
1783 $ work( indwrk ), rwork, iinfo )
1784 IF( iinfo.NE.0 )
THEN
1785 WRITE( nounit, fmt = 9999 )
'CHPEV(N,' // uplo //
')',
1786 $ iinfo, n, jtype, ioldsd
1788 IF( iinfo.LT.0 )
THEN
1791 result( ntest ) = ulpinv
1801 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1802 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1804 result( ntest ) = temp2 / max( unfl,
1805 $ ulp*max( temp1, temp2 ) )
1811 IF( jtype.LE.7 )
THEN
1813 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1822 IF( iuplo.EQ.1 )
THEN
1824 DO 1060 i = max( 1, j-kd ), j
1825 v( kd+1+i-j, j ) = a( i, j )
1830 DO 1080 i = j, min( n, j+kd )
1831 v( 1+i-j, j ) = a( i, j )
1837 CALL chbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1839 IF( iinfo.NE.0 )
THEN
1840 WRITE( nounit, fmt = 9998 )
'CHBEV(V,' // uplo //
')',
1841 $ iinfo, n, kd, jtype, ioldsd
1843 IF( iinfo.LT.0 )
THEN
1846 result( ntest ) = ulpinv
1847 result( ntest+1 ) = ulpinv
1848 result( ntest+2 ) = ulpinv
1855 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1856 $ ldu, tau, work, rwork, result( ntest ) )
1858 IF( iuplo.EQ.1 )
THEN
1860 DO 1100 i = max( 1, j-kd ), j
1861 v( kd+1+i-j, j ) = a( i, j )
1866 DO 1120 i = j, min( n, j+kd )
1867 v( 1+i-j, j ) = a( i, j )
1873 CALL chbev_2stage(
'N', uplo, n, kd, v, ldu, d3, z, ldu,
1874 $ work, lwork, rwork, iinfo )
1875 IF( iinfo.NE.0 )
THEN
1876 WRITE( nounit, fmt = 9998 )
1877 $
'CHBEV_2STAGE(N,' // uplo //
')',
1878 $ iinfo, n, kd, jtype, ioldsd
1880 IF( iinfo.LT.0 )
THEN
1883 result( ntest ) = ulpinv
1895 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1896 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1898 result( ntest ) = temp2 / max( unfl,
1899 $ ulp*max( temp1, temp2 ) )
1901 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1903 CALL cheevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1904 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
1905 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1907 IF( iinfo.NE.0 )
THEN
1908 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,A,' // uplo //
1909 $
')', iinfo, n, jtype, ioldsd
1911 IF( iinfo.LT.0 )
THEN
1914 result( ntest ) = ulpinv
1915 result( ntest+1 ) = ulpinv
1916 result( ntest+2 ) = ulpinv
1923 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1925 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1926 $ ldu, tau, work, rwork, result( ntest ) )
1930 $ il, iu, abstol, m2, wa2, z, ldu,
1931 $ iwork, work, lwork, rwork, lrwork,
1932 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1933 IF( iinfo.NE.0 )
THEN
1934 WRITE( nounit, fmt = 9999 )
1935 $
'CHEEVR_2STAGE(N,A,' // uplo //
1936 $
')', iinfo, n, jtype, ioldsd
1938 IF( iinfo.LT.0 )
THEN
1941 result( ntest ) = ulpinv
1951 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1952 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1954 result( ntest ) = temp2 / max( unfl,
1955 $ ulp*max( temp1, temp2 ) )
1960 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1961 CALL cheevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1962 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1963 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1965 IF( iinfo.NE.0 )
THEN
1966 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,I,' // uplo //
1967 $
')', iinfo, n, jtype, ioldsd
1969 IF( iinfo.LT.0 )
THEN
1972 result( ntest ) = ulpinv
1973 result( ntest+1 ) = ulpinv
1974 result( ntest+2 ) = ulpinv
1981 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1983 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1984 $ v, ldu, tau, work, rwork, result( ntest ) )
1987 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1989 $ il, iu, abstol, m3, wa3, z, ldu,
1990 $ iwork, work, lwork, rwork, lrwork,
1991 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1992 IF( iinfo.NE.0 )
THEN
1993 WRITE( nounit, fmt = 9999 )
1994 $
'CHEEVR_2STAGE(N,I,' // uplo //
1995 $
')', iinfo, n, jtype, ioldsd
1997 IF( iinfo.LT.0 )
THEN
2000 result( ntest ) = ulpinv
2007 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2008 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2009 result( ntest ) = ( temp1+temp2 ) /
2010 $ max( unfl, ulp*temp3 )
2014 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2015 CALL cheevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2016 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2017 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
2019 IF( iinfo.NE.0 )
THEN
2020 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,V,' // uplo //
2021 $
')', iinfo, n, jtype, ioldsd
2023 IF( iinfo.LT.0 )
THEN
2026 result( ntest ) = ulpinv
2027 result( ntest+1 ) = ulpinv
2028 result( ntest+2 ) = ulpinv
2035 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2037 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2038 $ v, ldu, tau, work, rwork, result( ntest ) )
2041 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2043 $ il, iu, abstol, m3, wa3, z, ldu,
2044 $ iwork, work, lwork, rwork, lrwork,
2045 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
2046 IF( iinfo.NE.0 )
THEN
2047 WRITE( nounit, fmt = 9999 )
2048 $
'CHEEVR_2STAGE(N,V,' // uplo //
2049 $
')', iinfo, n, jtype, ioldsd
2051 IF( iinfo.LT.0 )
THEN
2054 result( ntest ) = ulpinv
2059 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2060 result( ntest ) = ulpinv
2066 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2067 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2069 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2073 result( ntest ) = ( temp1+temp2 ) /
2074 $ max( unfl, temp3*ulp )
2076 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2090 ntestt = ntestt + ntest
2091 CALL slafts(
'CST', n, n, jtype, ntest, result, ioldsd,
2092 $ thresh, nounit, nerrs )
2099 CALL alasvm(
'CST', nounit, nerrs, ntestt, 0 )
2101 9999
FORMAT(
' CDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2102 $
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2103 9998
FORMAT(
' CDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2104 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,