334 SUBROUTINE cdrvst( 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( , * ),
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 ), ( MAXTYP ), KMODE( MAXTYP ),
390 REAL SLAMCH, SLARND, SSXT1
391 EXTERNAL SLAMCH, SLARND, SSXT1
400 INTRINSIC abs, int, log,
max,
min, real, sqrt
403 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
404 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
406 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
419 nmax =
max( nmax, nn( j ) )
426 IF( nsizes.LT.0 )
THEN
428 ELSE IF( badnn )
THEN
430 ELSE IF( ntypes.LT.0 )
THEN
432 ELSE IF( lda.LT.nmax )
THEN
434 ELSE IF( ldu.LT.nmax )
THEN
436 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
441 CALL xerbla(
'CDRVST', -info )
447 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
452 unfl = slamch(
'Safe minimum' )
453 ovfl = slamch(
'Overflow' )
455 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
457 rtunfl = sqrt( unfl )
458 rtovfl = sqrt( ovfl )
463 iseed2( i ) = iseed( i )
464 iseed3( i ) = iseed( i )
470 DO 1220 jsize = 1, nsizes
473 lgn = int( log( real( n ) ) / log( two ) )
478 lwedc =
max( 2*n+n*n, 2*n*n )
479 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
486 aninv = one / real(
max( 1, n ) )
488 IF( nsizes.NE.1 )
THEN
489 mtypes =
min( maxtyp, ntypes )
491 mtypes =
min( maxtyp+1, ntypes )
494 DO 1210 jtype = 1, mtypes
495 IF( .NOT.dotype( jtype ) )
501 ioldsd( j ) = iseed( j )
519 IF( mtypes.GT.maxtyp )
522 itype = ktype( jtype )
523 imode = kmode( jtype )
527 GO TO ( 40, 50, 60 )kmagn( jtype )
534 anorm = ( rtovfl*ulp )*aninv
538 anorm = rtunfl*n*ulpinv
543 CALL claset(
'Full', lda, n, czero, czero, a, lda )
551 IF( itype.EQ.1 )
THEN
554 ELSE IF( itype.EQ.2 )
THEN
559 a( jcol, jcol ) = anorm
562 ELSE IF( itype.EQ.4 )
THEN
566 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
567 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
569 ELSE IF( itype.EQ.5 )
THEN
573 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
574 $ anorm, n, n,
'N', a, lda, work, iinfo )
576 ELSE IF( itype.EQ.7 )
THEN
580 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
581 $
'T',
'N', work( n+1 ), 1, one,
582 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
583 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
585 ELSE IF( itype.EQ.8 )
THEN
589 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
590 $
'T',
'N', work( n+1 ), 1, one,
591 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
592 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
594 ELSE IF( itype.EQ.9 )
THEN
598 ihbw = int( ( n-1 )*slarnd( 1, iseed3 ) )
599 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
600 $ anorm, ihbw, ihbw,
'Z', u, ldu, work,
605 CALL claset(
'Full', lda, n, czero, czero, a, lda )
606 DO 100 idiag = -ihbw, ihbw
607 irow = ihbw - idiag + 1
608 j1 =
max( 1, idiag+1 )
609 j2 =
min( n, n+idiag )
612 a( i, j ) = u( irow, j )
619 IF( iinfo.NE.0 )
THEN
620 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
633 il = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
634 iu = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
646 IF( iuplo.EQ.0 )
THEN
654 CALL clacpy(
' ', n, n, a, lda, v, ldu )
657 CALL cheevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
658 $ rwork, lrwedc, iwork, liwedc, iinfo )
659 IF( iinfo.NE.0 )
THEN
660 WRITE( nounit, fmt = 9999 )
'CHEEVD(V,' // uplo //
661 $
')', iinfo, n, jtype, ioldsd
663 IF( iinfo.LT.0 )
THEN
666 result( ntest ) = ulpinv
667 result( ntest+1 ) = ulpinv
668 result( ntest+2 ) = ulpinv
675 CALL chet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
676 $ ldu, tau, work, rwork, result( ntest ) )
678 CALL clacpy(
' ', n, n, v, ldu, a, lda )
681 CALL cheevd(
'N', uplo, n, a, ldu, d3, work, lwedc,
682 $ rwork, lrwedc, iwork, liwedc, iinfo )
683 IF( iinfo.NE.0 )
THEN
684 WRITE( nounit, fmt = 9999 )
'CHEEVD(N,' // uplo //
685 $
')', iinfo, n, jtype, ioldsd
687 IF( iinfo.LT.0 )
THEN
690 result( ntest ) = ulpinv
700 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
701 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
703 result( ntest ) = temp2 /
max( unfl,
704 $ ulp*
max( temp1, temp2 ) )
707 CALL clacpy(
' ', n, n, v, ldu, a, lda )
712 temp3 =
max( abs( d1( 1 ) ), abs( d1( n ) ) )
714 vl = d1( il ) -
max( half*( d1( il )-d1( il-1 ) ),
715 $ ten*ulp*temp3, ten*rtunfl )
716 ELSE IF( n.GT.0 )
THEN
717 vl = d1( 1 ) -
max( half*( d1( n )-d1( 1 ) ),
718 $ ten*ulp*temp3, ten*rtunfl )
721 vu = d1( iu ) +
max( half*( d1( iu+1 )-d1( iu ) ),
722 $ ten*ulp*temp3, ten*rtunfl )
723 ELSE IF( n.GT.0 )
THEN
724 vu = d1( n ) +
max( half*( d1( n )-d1( 1 ) ),
725 $ ten*ulp*temp3, ten*rtunfl )
733 CALL cheevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
734 $ abstol, m, wa1, z, ldu, work, lwork, rwork,
735 $ iwork, iwork( 5*n+1 ), iinfo )
736 IF( iinfo.NE.0 )
THEN
737 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,A,' // uplo //
738 $
')', iinfo, n, jtype, ioldsd
740 IF( iinfo.LT.0 )
THEN
743 result( ntest ) = ulpinv
744 result( ntest+1 ) = ulpinv
745 result( ntest+2 ) = ulpinv
752 CALL clacpy(
' ', n, n, v, ldu, a, lda )
754 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
755 $ ldu, tau, work, rwork, result( ntest ) )
758 CALL cheevx(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
759 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
760 $ iwork, iwork( 5*n+1 ), iinfo )
761 IF( iinfo.NE.0 )
THEN
762 WRITE( nounit, fmt = 9999 )
'CHEEVX(N,A,' // uplo //
763 $
')', iinfo, n, jtype, ioldsd
765 IF( iinfo.LT.0 )
THEN
768 result( ntest ) = ulpinv
778 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
779 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
781 result( ntest ) = temp2 /
max( unfl,
782 $ ulp*
max( temp1, temp2 ) )
785 CALL clacpy(
' ', n, n, v, ldu, a, lda )
789 CALL cheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
790 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
791 $ iwork, iwork( 5*n+1 ), iinfo )
792 IF( iinfo.NE.0 )
THEN
793 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,I,' // uplo //
794 $
')', iinfo, n, jtype, ioldsd
796 IF( iinfo.LT.0 )
THEN
799 result( ntest ) = ulpinv
806 CALL clacpy(
' ', n, n, v, ldu, a, lda )
808 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
809 $ v, ldu, tau, work, rwork, result( ntest ) )
813 CALL cheevx(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
814 $ abstol, m3, wa3, z, ldu, work, lwork, rwork,
815 $ iwork, iwork( 5*n+1 ), iinfo )
816 IF( iinfo.NE.0 )
THEN
817 WRITE( nounit, fmt = 9999 )
'CHEEVX(N,I,' // uplo //
818 $
')', iinfo, n, jtype, ioldsd
820 IF( iinfo.LT.0 )
THEN
823 result( ntest ) = ulpinv
830 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
831 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
833 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
837 result( ntest ) = ( temp1+temp2 ) /
838 $
max( unfl, temp3*ulp )
841 CALL clacpy(
' ', n, n, v, ldu, a, lda )
845 CALL cheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
846 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
847 $ iwork, iwork( 5*n+1 ), iinfo )
848 IF( iinfo.NE.0 )
THEN
849 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,V,' // uplo //
850 $
')', iinfo, n, jtype, ioldsd
852 IF( iinfo.LT.0 )
THEN
855 result( ntest ) = ulpinv
862 CALL clacpy(
' ', n, n, v, ldu, a, lda )
864 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
865 $ v, ldu, tau, work, rwork, result( ntest ) )
869 CALL cheevx(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
870 $ abstol, m3, wa3, z, ldu, work, lwork, rwork,
871 $ iwork, iwork( 5*n+1 ), iinfo )
872 IF( iinfo.NE.0 )
THEN
873 WRITE( nounit, fmt = 9999 )
'CHEEVX(N,V,' // uplo //
874 $
')', iinfo, n, jtype, ioldsd
876 IF( iinfo.LT.0 )
THEN
879 result( ntest ) = ulpinv
884 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
885 result( ntest ) = ulpinv
891 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
892 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
894 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
898 result( ntest ) = ( temp1+temp2 ) /
899 $
max( unfl, temp3*ulp )
905 CALL clacpy(
' ', n, n, v, ldu, a, lda )
910 IF( iuplo.EQ.1 )
THEN
914 work( indx ) = a( i, j )
922 work( indx ) = a( i, j )
929 indwrk = n*( n+1 ) / 2 + 1
930 CALL chpevd(
'V', uplo, n, work, d1, z, ldu,
931 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
933 IF( iinfo.NE.0 )
THEN
934 WRITE( nounit, fmt = 9999 )
'CHPEVD(V,' // uplo //
935 $
')', iinfo, n, jtype, ioldsd
937 IF( iinfo.LT.0 )
THEN
941 result( ntest+1 ) = ulpinv
942 result( ntest+2 ) = ulpinv
949 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
950 $ ldu, tau, work, rwork, result( ntest ) )
952 IF( iuplo.EQ.1 )
THEN
956 work( indx ) = a( i, j )
964 work( indx ) = a( i, j )
971 indwrk = n*( n+1 ) / 2 + 1
972 CALL chpevd(
'N', uplo, n, work, d3, z, ldu,
973 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
975 IF( iinfo.NE.0 )
THEN
976 WRITE( nounit, fmt = 9999 )
'CHPEVD(N,' // uplo //
977 $
')', iinfo, n, jtype, ioldsd
979 IF( iinfo.LT.0 )
THEN
982 result( ntest ) = ulpinv
992 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
993 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
995 result( ntest ) = temp2 /
max( unfl,
996 $ ulp*
max( temp1, temp2 ) )
1002 IF( iuplo.EQ.1 )
THEN
1006 work( indx ) = a( i, j )
1014 work( indx ) = a( i, j )
1023 temp3 =
max( abs( d1( 1 ) ), abs( d1( n ) ) )
1025 vl = d1( il ) -
max( half*( d1( il )-d1( il-1 ) ),
1026 $ ten*ulp*temp3, ten*rtunfl )
1027 ELSE IF( n.GT.0 )
THEN
1028 vl = d1( 1 ) -
max( half*( d1( n )-d1( 1 ) ),
1029 $ ten*ulp*temp3, ten*rtunfl )
1032 vu = d1( iu ) +
max( half*( d1( iu+1 )-d1( iu ) ),
1033 $ ten*ulp*temp3, ten*rtunfl
1034 ELSE IF( n.GT.0 )
THEN
1035 vu = d1( n ) +
max( half*( d1( n )-d1( 1 ) ),
1036 $ ten*ulp*temp3, ten*rtunfl )
1044 CALL chpevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1045 $ abstol, m, wa1, z, ldu, v, rwork, iwork,
1046 $ iwork( 5*n+1 ), iinfo )
1047 IF( iinfo.NE.0 )
THEN
1048 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,A,' // uplo //
1049 $
')', iinfo, n, jtype, ioldsd
1051 IF( iinfo.LT.0 )
THEN
1054 result( ntest ) = ulpinv
1055 result( ntest+1 ) = ulpinv
1056 result( ntest+2 ) = ulpinv
1063 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1064 $ ldu, tau, work, rwork, result( ntest ) )
1068 IF( iuplo.EQ.1 )
THEN
1072 work( indx ) = a( i, j )
1080 work( indx ) = a( i, j )
1086 CALL chpevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1087 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1088 $ iwork( 5*n+1 ), iinfo )
1089 IF( iinfo.NE.0 )
THEN
1090 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,A,' // uplo //
1091 $
')', iinfo, n, jtype, ioldsd
1093 IF( iinfo.LT.0 )
THEN
1096 result( ntest ) = ulpinv
1106 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1107 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1109 result( ntest ) = temp2 /
max( unfl,
1110 $ ulp*
max( temp1, temp2 ) )
1114 IF( iuplo.EQ.1 )
THEN
1118 work( indx ) = a( i, j )
1126 work( indx ) = a( i, j )
1132 CALL chpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1134 $ iwork( 5*n+1 ), iinfo )
1135 IF( iinfo.NE.0 )
THEN
1136 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,I,' // uplo //
1137 $
')', iinfo, n, jtype, ioldsd
1139 IF( iinfo.LT.0 )
THEN
1142 result( ntest ) = ulpinv
1143 result( ntest+1 ) = ulpinv
1144 result( ntest+2 ) = ulpinv
1151 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1152 $ v, ldu, tau, work, rwork, result( ntest ) )
1156 IF( iuplo.EQ.1 )
THEN
1160 work( indx ) = a( i, j )
1168 work( indx ) = a( i, j )
1174 CALL chpevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1175 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1176 $ iwork( 5*n+1 ), iinfo )
1177 IF( iinfo.NE.0 )
THEN
1178 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,I,' // uplo //
1179 $
')', iinfo, n, jtype, ioldsd
1181 IF( iinfo.LT.0 )
THEN
1184 result( ntest ) = ulpinv
1191 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1192 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1194 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1198 result( ntest ) = ( temp1+temp2 ) /
1199 $
max( unfl, temp3*ulp )
1203 IF( iuplo.EQ.1 )
THEN
1207 work( indx ) = a( i, j )
1215 work( indx ) = a( i, j )
1221 CALL chpevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1222 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1223 $ iwork( 5*n+1 ), iinfo )
1224 IF( iinfo.NE.0 )
THEN
1225 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,V,' // uplo //
1226 $
')', iinfo, n, jtype, ioldsd
1228 IF( iinfo.LT.0 )
THEN
1231 result( ntest ) = ulpinv
1232 result( ntest+1 ) = ulpinv
1233 result( ntest+2 ) = ulpinv
1240 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1241 $ v, ldu, tau, work, rwork, result( ntest ) )
1245 IF( iuplo.EQ.1 )
THEN
1249 work( indx ) = a( i, j )
1257 work( indx ) = a( i, j )
1263 CALL chpevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
1264 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1265 $ iwork( 5*n+1 ), iinfo )
1266 IF( iinfo.NE.0 )
THEN
1267 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,V,' // uplo //
1268 $
')', iinfo, n, jtype, ioldsd
1270 IF( iinfo.LT.0 )
THEN
1273 result( ntest ) = ulpinv
1278 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1279 result( ntest ) = ulpinv
1285 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1286 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1288 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1292 result( ntest ) = ( temp1+temp2 ) /
1293 $
max( unfl, temp3*ulp )
1299 IF( jtype.LE.7 )
THEN
1301 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1310 IF( iuplo.EQ.1 )
THEN
1312 DO 560 i =
max( 1, j-kd ), j
1313 v( kd+1+i-j, j ) = a( i, j )
1318 DO 580 i = j,
min( n, j+kd )
1319 v( 1+i-j, j ) = a( i, j )
1325 CALL chbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1326 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1327 IF( iinfo.NE.0 )
THEN
1328 WRITE( nounit, fmt = 9998 )
'CHBEVD(V,' // uplo //
1329 $
')', iinfo, n, kd, jtype, ioldsd
1331 IF( iinfo.LT.0 )
THEN
1334 result( ntest ) = ulpinv
1335 result( ntest+1 ) = ulpinv
1336 result( ntest+2 ) = ulpinv
1343 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1344 $ ldu, tau, work, rwork, result( ntest ) )
1346 IF( iuplo.EQ.1 )
THEN
1348 DO 600 i =
max( 1, j-kd ), j
1349 v( kd+1+i-j, j ) = a( i, j )
1354 DO 620 i = j,
min( n, j+kd )
1355 v( 1+i-j, j ) = a( i, j )
1361 CALL chbevd(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
1362 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1363 IF( iinfo.NE.0 )
THEN
1364 WRITE( nounit, fmt = 9998 )
'CHBEVD(N,' // uplo //
1365 $
')', iinfo, n, kd, jtype, ioldsd
1367 IF( iinfo.LT.0 )
THEN
1370 result( ntest ) = ulpinv
1380 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1381 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1383 result( ntest ) = temp2 /
max( unfl,
1384 $ ulp*
max( temp1, temp2 ) )
1390 IF( iuplo.EQ.1 )
THEN
1392 DO 660 i =
max( 1, j-kd ), j
1393 v( kd+1+i-j, j ) = a( i, j )
1398 DO 680 i = j,
min( n, j+kd )
1399 v( 1+i-j, j ) = a( i, j )
1405 CALL chbevx(
'V',
'A', uplo
1406 $ vu, il, iu, abstol, m, wa1, z, ldu,
1407 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1408 IF( iinfo.NE.0 )
THEN
1409 WRITE( nounit, fmt = 9999 )
'CHBEVX(V,A,' // uplo //
1410 $
')', iinfo, n, kd, jtype, ioldsd
1412 IF( iinfo.LT.0 )
THEN
1415 result( ntest ) = ulpinv
1416 result( ntest+1 ) = ulpinv
1417 result( ntest+2 ) = ulpinv
1424 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1425 $ ldu, tau, work, rwork, result( ntest ) )
1429 IF( iuplo.EQ.1 )
THEN
1431 DO 700 i =
max( 1, j-kd ), j
1432 v( kd+1+i-j, j ) = a( i, j )
1437 DO 720 i = j,
min( n, j+kd )
1438 v( 1+i-j, j ) = a( i, j )
1443 CALL chbevx(
'N',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
1444 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1445 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1446 IF( iinfo.NE.0 )
THEN
1447 WRITE( nounit, fmt = 9998 )
'CHBEVX(N,A,' // uplo //
1448 $
')', iinfo, n, kd, jtype, ioldsd
1450 IF( iinfo.LT.0 )
THEN
1453 result( ntest ) = ulpinv
1463 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1464 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1466 result( ntest ) = temp2 /
max( unfl,
1467 $ ulp*
max( temp1, temp2 ) )
1474 IF( iuplo.EQ.1 )
THEN
1476 DO 760 i =
max( 1, j-kd ), j
1477 v( kd+1+i-j, j ) = a( i, j )
1482 DO 780 i = j,
min( n, j+kd )
1483 v( 1+i-j, j ) = a( i, j )
1488 CALL chbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1489 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1490 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1491 IF( iinfo.NE.0 )
THEN
1492 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,I,' // uplo //
1493 $
')', iinfo, n, kd, jtype, ioldsd
1495 IF( iinfo.LT.0 )
THEN
1499 result( ntest+1 ) = ulpinv
1500 result( ntest+2 ) = ulpinv
1507 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1508 $ v, ldu, tau, work, rwork, result( ntest ) )
1512 IF( iuplo.EQ.1 )
THEN
1514 DO 800 i =
max( 1, j-kd ), j
1515 v( kd+1+i-j, j ) = a( i, j )
1520 DO 820 i = j,
min( n, j+kd )
1521 v( 1+i-j, j ) = a( i, j )
1525 CALL chbevx(
'N',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1526 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
1527 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1528 IF( iinfo.NE.0 )
THEN
1529 WRITE( nounit, fmt = 9998 )
'CHBEVX(N,I,' // uplo //
1530 $
')', iinfo, n, kd, jtype, ioldsd
1532 IF( iinfo.LT.0 )
THEN
1535 result( ntest ) = ulpinv
1542 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1543 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1545 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1549 result( ntest ) = ( temp1+temp2 ) /
1550 $
max( unfl, temp3*ulp )
1557 IF( iuplo.EQ.1 )
THEN
1559 DO 850 i =
max( 1, j-kd ), j
1560 v( kd+1+i-j, j ) = a( i, j )
1565 DO 870 i = j,
min( n, j+kd )
1566 v( 1+i-j, j ) = a( i, j )
1570 CALL chbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1571 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1572 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1573 IF( iinfo.NE.0 )
THEN
1574 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,V,' // uplo //
1575 $
')', iinfo, n, kd, jtype, ioldsd
1577 IF( iinfo.LT.0 )
THEN
1580 result( ntest ) = ulpinv
1581 result( ntest+1 ) = ulpinv
1582 result( ntest+2 ) = ulpinv
1589 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1590 $ v, ldu, tau, work, rwork, result( ntest ) )
1594 IF( iuplo.EQ.1 )
THEN
1596 DO 890 i =
max( 1, j-kd ), j
1597 v( kd+1+i-j, j ) = a( i, j )
1602 DO 910 i = j,
min( n, j+kd )
1603 v( 1+i-j, j ) = a( i, j )
1607 CALL chbevx(
'N',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1608 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
1609 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1610 IF( iinfo.NE.0 )
THEN
1611 WRITE( nounit, fmt = 9998 )
'CHBEVX(N,V,' // uplo //
1612 $
')', iinfo, n, kd, jtype, ioldsd
1614 IF( iinfo.LT.0 )
THEN
1617 result( ntest ) = ulpinv
1622 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1623 result( ntest ) = ulpinv
1629 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1630 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1632 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1636 result( ntest ) = ( temp1+temp2 ) /
1637 $
max( unfl, temp3*ulp )
1643 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1646 CALL cheev(
'V', uplo, n, a, ldu, d1, work, lwork, rwork,
1648 IF( iinfo.NE.0 )
THEN
1649 WRITE( nounit, fmt = 9999 )
'CHEEV(V,' // uplo //
')',
1650 $ iinfo, n, jtype, ioldsd
1652 IF( iinfo.LT.0 )
THEN
1655 result( ntest ) = ulpinv
1656 result( ntest+1 ) = ulpinv
1657 result( ntest+2 ) = ulpinv
1664 CALL chet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1665 $ ldu, tau, work, rwork, result
1667 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1670 CALL cheev(
'N', uplo, n, a, ldu, d3, work, lwork, rwork,
1672 IF( iinfo.NE.0 )
THEN
1673 WRITE( nounit, fmt = 9999 )
'CHEEV(N,' // uplo //
')',
1674 $ iinfo, n, jtype, ioldsd
1676 IF( iinfo.LT.0 )
THEN
1679 result( ntest ) = ulpinv
1689 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1690 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1692 result( ntest ) = temp2 /
max( unfl,
1693 $ ulp*
max( temp1, temp2 ) )
1697 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1704 IF( iuplo.EQ.1 )
THEN
1708 work( indx ) = a( i, j )
1723 indwrk = n*( n+1 ) / 2 + 1
1724 CALL chpev(
'V', uplo, n, work, d1, z, ldu,
1725 $ work( indwrk ), rwork, iinfo )
1726 IF( iinfo.NE.0 )
THEN
1727 WRITE( nounit, fmt = 9999 )
'CHPEV(V,' // uplo //
')',
1728 $ iinfo, n, jtype, ioldsd
1730 IF( iinfo.LT.0 )
THEN
1733 result( ntest ) = ulpinv
1734 result( ntest+1 ) = ulpinv
1735 result( ntest+2 ) = ulpinv
1742 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1743 $ ldu, tau, work, rwork, result( ntest
1745 IF( iuplo.EQ.1 )
THEN
1749 work( indx ) = a( i, j )
1757 work( indx ) = a( i, j )
1764 indwrk = n*( n+1 ) / 2 + 1
1765 CALL chpev(
'N', uplo, n, work, d3, z, ldu,
1766 $ work( indwrk ), rwork, iinfo )
1767 IF( iinfo.NE.0 )
THEN
1768 WRITE( nounit, fmt = 9999 )
'CHPEV(N,' // uplo //
')',
1769 $ iinfo, n, jtype, ioldsd
1771 IF( iinfo.LT.0 )
THEN
1774 result( ntest ) = ulpinv
1784 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1785 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1787 result( ntest ) = temp2 /
max( unfl,
1788 $ ulp*
max( temp1, temp2 ) )
1794 IF( jtype.LE.7 )
THEN
1796 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1805 IF( iuplo.EQ.1 )
THEN
1807 DO 1060 i =
max( 1, j-kd ), j
1808 v( kd+1+i-j, j ) = a( i, j )
1813 DO 1080 i = j,
min( n, j+kd )
1814 v( 1+i-j, j ) = a( i, j )
1820 CALL chbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1822 IF( iinfo.NE.0 )
THEN
1823 WRITE( nounit, fmt = 9998 )
'CHBEV(V,' // uplo //
')',
1824 $ iinfo, n, kd, jtype, ioldsd
1826 IF( iinfo.LT.0 )
THEN
1829 result( ntest ) = ulpinv
1830 result( ntest+1 ) = ulpinv
1831 result( ntest+2 ) = ulpinv
1838 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1839 $ ldu, tau, work, rwork, result( ntest ) )
1841 IF( iuplo.EQ.1 )
THEN
1843 DO 1100 i =
max( 1, j-kd ), j
1844 v( kd+1+i-j, j ) = a( i, j )
1849 DO 1120 i = j,
min( n, j+kd )
1850 v( 1+i-j, j ) = a( i, j )
1856 CALL chbev(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
1858 IF( iinfo.NE.0 )
THEN
1859 WRITE( nounit, fmt = 9998 )
'CHBEV(N,' // uplo //
')',
1860 $ iinfo, n, kd, jtype, ioldsd
1862 IF( iinfo.LT.0 )
THEN
1865 result( ntest ) = ulpinv
1877 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1878 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1880 result( ntest ) = temp2 /
max( unfl,
1881 $ ulp*
max( temp1, temp2 ) )
1883 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1885 CALL cheevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1886 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
1887 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1889 IF( iinfo.NE.0 )
THEN
1890 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,A,' // uplo //
1891 $
')', iinfo, n, jtype, ioldsd
1893 IF( iinfo.LT.0 )
THEN
1896 result( ntest ) = ulpinv
1897 result( ntest+1 ) = ulpinv
1898 result( ntest+2 ) = ulpinv
1905 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1907 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1908 $ ldu, tau, work, rwork, result( ntest ) )
1911 CALL cheevr(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1912 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1913 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1915 IF( iinfo.NE.0 )
THEN
1916 WRITE( nounit, fmt = 9999 )
'CHEEVR(N,A,' // uplo //
1917 $
')', iinfo, n, jtype, ioldsd
1919 IF( iinfo.LT.0 )
THEN
1922 result( ntest ) = ulpinv
1932 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1933 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1935 result( ntest ) = temp2 /
max( unfl,
1936 $ ulp*
max( temp1, temp2 ) )
1941 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1942 CALL cheevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1943 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1944 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1946 IF( iinfo.NE.0 )
THEN
1947 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,I,' // uplo //
1948 $
')', iinfo, n, jtype, ioldsd
1950 IF( iinfo.LT.0 )
THEN
1953 result( ntest ) = ulpinv
1954 result( ntest+1 ) = ulpinv
1955 result( ntest+2 ) = ulpinv
1962 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1964 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1965 $ v, ldu, tau, work, rwork, result( ntest ) )
1968 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1969 CALL cheevr( 'n
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
1970 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
1971 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
1973.NE.
IF( IINFO0 ) THEN
1974 WRITE( NOUNIT, FMT = 9999 )'cheevr(n,i,
' // UPLO //
1975 $ ')
', IINFO, N, JTYPE, IOLDSD
1977.LT.
IF( IINFO0 ) THEN
1980 RESULT( NTEST ) = ULPINV
1987 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1988 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1989 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1990 $ MAX( UNFL, ULP*TEMP3 )
1994 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
1995 CALL CHEEVR( 'v
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
1996 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
1997 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
1999.NE.
IF( IINFO0 ) THEN
2000 WRITE( NOUNIT, FMT = 9999 )'cheevr(v,v,
' // UPLO //
2001 $ ')
', IINFO, N, JTYPE, IOLDSD
2003.LT.
IF( IINFO0 ) THEN
2006 RESULT( NTEST ) = ULPINV
2007 RESULT( NTEST+1 ) = ULPINV
2008 RESULT( NTEST+2 ) = ULPINV
2015 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
2017 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2018 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
2021 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
2022 CALL CHEEVR( 'n
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
2023 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
2024 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
2026.NE.
IF( IINFO0 ) THEN
2027 WRITE( NOUNIT, FMT = 9999 )'cheevr(n,v,
' // UPLO //
2028 $ ')
', IINFO, N, JTYPE, IOLDSD
2030.LT.
IF( IINFO0 ) THEN
2033 RESULT( NTEST ) = ULPINV
2038.EQ..AND..GT.
IF( M30 N0 ) THEN
2039 RESULT( NTEST ) = ULPINV
2045 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2046 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2048 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
2052 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2053 $ MAX( UNFL, TEMP3*ULP )
2055 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
2069 NTESTT = NTESTT + NTEST
2070 CALL SLAFTS( 'cst
', N, N, JTYPE, NTEST, RESULT, IOLDSD,
2071 $ THRESH, NOUNIT, NERRS )
2078 CALL ALASVM( 'cst
', NOUNIT, NERRS, NTESTT, 0 )
2080 9999 FORMAT( ' cdrvst:
', A, ' returned info=
', I6, / 9X, 'n=
', I6,
2081 $ ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
2082 9998 FORMAT( ' cdrvst:
', A, ' returned info=
', I6, / 9X, 'n=
', I6,
2083 $ ', kd=
', I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5,