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, * ), ( * ), 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, ,
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
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
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
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 //
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.NE.
IF( IINFO0 ) THEN
934 WRITE( NOUNIT, FMT = 9999 )'chpevd(v,
' // UPLO //
935 $ ')
', IINFO, N, JTYPE, IOLDSD
937.LT.
IF( IINFO0 ) THEN
940 RESULT( NTEST ) = ULPINV
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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
976 WRITE( NOUNIT, FMT = 9999 )'chpevd(n,
' // UPLO //
977 $ ')
', IINFO, N, JTYPE, IOLDSD
979.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.GT.
ELSE IF( N0 ) 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.GT.
ELSE IF( N0 ) 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.NE.
IF( IINFO0 ) THEN
1048 WRITE( NOUNIT, FMT = 9999 )'chpevx(v,a,
' // UPLO //
1049 $ ')
', IINFO, N, JTYPE, IOLDSD
1051.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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 )
1132 CALL chpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1133 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
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.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1178 WRITE( NOUNIT, FMT = 9999 )'chpevx(n,i,
' // UPLO //
1179 $ ')
', IINFO, N, JTYPE, IOLDSD
1181.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1225 WRITE( NOUNIT, FMT = 9999 )'chpevx(v,v,
' // UPLO //
1226 $ ')
', IINFO, N, JTYPE, IOLDSD
1228.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1364 WRITE( NOUNIT, FMT = 9998 )'chbevd(n,
' // UPLO //
1365 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1367.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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, N, KD, V, LDU, U, LDU, VL,
1406 $ VU, IL, IU, ABSTOL, M, WA1, Z, LDU, WORK,
1407 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1408.NE.
IF( IINFO0 ) THEN
1409 WRITE( NOUNIT, FMT = 9999 )'chbevx(v,a,
' // UPLO //
1410 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1412.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1447 WRITE( NOUNIT, FMT = 9998 )'chbevx(n,a,
' // UPLO //
1448 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1450.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1492 WRITE( NOUNIT, FMT = 9998 )'chbevx(v,i,
' // UPLO //
1493 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1495.LT.
IF( IINFO0 ) THEN
1498 RESULT( NTEST ) = ULPINV
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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1529 WRITE( NOUNIT, FMT = 9998 )'chbevx(n,i,
' // UPLO //
1530 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1532.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1574 WRITE( NOUNIT, FMT = 9998 )'chbevx(v,v,
' // UPLO //
1575 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1577.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1611 WRITE( NOUNIT, FMT = 9998 )'chbevx(n,v,
' // UPLO //
1612 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1614.LT.
IF( IINFO0 ) THEN
1617 RESULT( NTEST ) = ULPINV
1622.EQ..AND..GT.
IF( M30 N0 ) 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.NE.
IF( IINFO0 ) THEN
1649 WRITE( NOUNIT, FMT = 9999 )'cheev(v,
' // UPLO // ')
',
1650 $ IINFO, N, JTYPE, IOLDSD
1652.LT.
IF( IINFO0 ) 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( NTEST ) )
1667 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
1670 CALL CHEEV( 'n
', UPLO, N, A, LDU, D3, WORK, LWORK, RWORK,
1672.NE.
IF( IINFO0 ) THEN
1673 WRITE( NOUNIT, FMT = 9999 )'cheev(n,
' // UPLO // ')
',
1674 $ IINFO, N, JTYPE, IOLDSD
1676.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) THEN
1708 WORK( INDX ) = A( I, J )
1716 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.NE.
IF( IINFO0 ) THEN
1727 WRITE( NOUNIT, FMT = 9999 )'chpev(v,
' // UPLO // ')
',
1728 $ IINFO, N, JTYPE, IOLDSD
1730.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1768 WRITE( NOUNIT, FMT = 9999 )'chpev(n,
' // UPLO // ')
',
1769 $ IINFO, N, JTYPE, IOLDSD
1771.LT.
IF( IINFO0 ) 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.LE.
IF( JTYPE7 ) THEN
1796.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
1805.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1823 WRITE( NOUNIT, FMT = 9998 )'chbev(v,
' // UPLO // ')
',
1824 $ IINFO, N, KD, JTYPE, IOLDSD
1826.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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.NE.
IF( IINFO0 ) THEN
1859 WRITE( NOUNIT, FMT = 9998 )'chbev(n,
' // UPLO // ')
',
1860 $ IINFO, N, KD, JTYPE, IOLDSD
1862.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1890 WRITE( NOUNIT, FMT = 9999 )'cheevr(v,a,
' // UPLO //
1891 $ ')
', IINFO, N, JTYPE, IOLDSD
1893.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) 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 IF( iinfo.NE.0 )
THEN
2027 WRITE( nounit, fmt = 9999 )
'CHEEVR(N,V,' // uplo //
2028 $
')', iinfo, n, jtype, ioldsd
2030 IF( iinfo.LT.0 )
THEN
2033 result( ntest ) = ulpinv
2038 IF( m3.EQ.0 .AND. n.GT.0 )
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,