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, * ),
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,
378 $ m, m2, m3, mtypes, n, nerrs, nmats, nmax,
380 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
381 $ RTUNFL, , TEMP2, TEMP3, ULP, ULPINV, UNFL,
386( MAXTYP ), KMODE( MAXTYP ),
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,
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' )
457 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
459 rtunfl = sqrt( unfl )
460 rtovfl = sqrt( ovfl )
465 iseed2( i ) = iseed( i )
466 iseed3( i ) = iseed( i )
472 DO 1220 jsize = 1, nsizes
475 lgn = int( log( real( n ) ) / log( two ) )
480 lwedc =
max( 2*n+n*n, 2*n*n )
481 lrwedc = 1 + 4*n + 2*n*lgn + 3*n**2
488 aninv = one / real(
max( 1, n ) )
490 IF( nsizes.NE.1 )
THEN
491 mtypes =
min( maxtyp, ntypes )
493 mtypes =
min( maxtyp+1, ntypes )
496 DO 1210 jtype = 1, mtypes
497 IF( .NOT.dotype( jtype ) )
503 ioldsd( j ) = iseed( j )
521 IF( mtypes.GT.maxtyp )
524 itype = ktype( jtype )
525 imode = kmode( jtype )
529 GO TO ( 40, 50, 60 )kmagn( jtype )
536 anorm = ( rtovfl*ulp )*aninv
540 anorm = rtunfl*n*ulpinv
545 CALL claset(
'Full', lda, n, czero, czero, a, lda )
553 IF( itype.EQ.1 )
THEN
556 ELSE IF( itype.EQ.2 )
THEN
561 a( jcol, jcol ) = anorm
564 ELSE IF( itype.EQ.4 )
THEN
568 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
569 $ anorm, 0, 0,
'N', a, lda, work, iinfo
571 ELSE IF( itype.EQ.5 )
THEN
575 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
576 $ anorm, n, n,
'N', a, lda, work, iinfo )
578 ELSE IF( itype.EQ.7 )
THEN
582 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
583 $
'T',
'N', work( n+1 ), 1, one,
584 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
585 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
587 ELSE IF( itype.EQ.8 )
THEN
591 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
592 $
'T',
'N', work( n+1 ), 1, one,
593 $ work( 2*n+1 ), 1, one, 'n
', IDUMMA, N, N,
594 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
596.EQ.
ELSE IF( ITYPE9 ) THEN
600 IHBW = INT( ( N-1 )*SLARND( 1, ISEED3 ) )
601 CALL CLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
602 $ ANORM, IHBW, IHBW, 'z
', U, LDU, WORK,
607 CALL CLASET( 'full
', LDA, N, CZERO, CZERO, A, LDA )
608 DO 100 IDIAG = -IHBW, IHBW
609 IROW = IHBW - IDIAG + 1
610 J1 = MAX( 1, IDIAG+1 )
611 J2 = MIN( N, N+IDIAG )
614 A( I, J ) = U( IROW, J )
621.NE.
IF( IINFO0 ) THEN
622 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
635 IL = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
636 IU = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
648.EQ.
IF( IUPLO0 ) THEN
656 CALL CLACPY( ' ', N, N, A, LDA, V, LDU )
659 CALL CHEEVD( 'v
', UPLO, N, A, LDU, D1, WORK, LWEDC,
660 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
661.NE.
IF( IINFO0 ) THEN
662 WRITE( NOUNIT, FMT = 9999 )'cheevd(v,
' // UPLO //
663 $ ')
', IINFO, N, JTYPE, IOLDSD
665.LT.
IF( IINFO0 ) THEN
668 RESULT( NTEST ) = ULPINV
669 RESULT( NTEST+1 ) = ULPINV
670 RESULT( NTEST+2 ) = ULPINV
677 CALL CHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
678 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
680 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
683 CALL CHEEVD_2STAGE( 'n
', UPLO, N, A, LDU, D3, WORK,
684 $ LWORK, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
685.NE.
IF( IINFO0 ) THEN
686 WRITE( NOUNIT, FMT = 9999 )
688 $ ')
', IINFO, N, JTYPE, IOLDSD
690.LT.
IF( IINFO0 ) THEN
693 RESULT( NTEST ) = ULPINV
703 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
704 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
706 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
707 $ ULP*MAX( TEMP1, TEMP2 ) )
710 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
715 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
717 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
718 $ TEN*ULP*TEMP3, TEN*RTUNFL )
719.GT.
ELSE IF( N0 ) THEN
720 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
721 $ TEN*ULP*TEMP3, TEN*RTUNFL )
724 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
725 $ TEN*ULP*TEMP3, TEN*RTUNFL )
726.GT.
ELSE IF( N0 ) THEN
727 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
728 $ TEN*ULP*TEMP3, TEN*RTUNFL )
736 CALL CHEEVX( 'v',
'A', uplo, n, a, ldu, vl, vu, il, iu,
737 $ abstol, m, wa1, z, ldu, work, lwork, rwork,
738 $ iwork, iwork( 5*n+1 ), iinfo )
739 IF( iinfo.NE.0 )
THEN
740 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,A,' // uplo //
741 $
')', iinfo, n, jtype, ioldsd
743 IF( iinfo.LT.0 )
THEN
746 result( ntest ) = ulpinv
747 result( ntest+1 ) = ulpinv
748 result( ntest+2 ) = ulpinv
755 CALL clacpy(
' ', n, n, v, ldu, a, lda )
757 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
758 $ ldu, tau, work, rwork, result( ntest ) )
762 $ il, iu, abstol, m2, wa2, z, ldu,
763 $ work, lwork, rwork, iwork,
764 $ iwork( 5*n+1 ), iinfo )
765 IF( iinfo.NE.0 )
THEN
766 WRITE( nounit, fmt = 9999 )
767 $
'CHEEVX_2STAGE(N,A,' // uplo //
768 $
')', iinfo, n, jtype, ioldsd
770 IF( iinfo.LT.0 )
THEN
773 result( ntest ) = ulpinv
783 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
784 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
786 result( ntest ) = temp2 /
max( unfl,
787 $ ulp*
max( temp1, temp2 ) )
790 CALL clacpy(
' ', n, n, v, ldu, a, lda )
794 CALL cheevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
795 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
796 $ iwork, iwork( 5*n+1 ), iinfo )
797 IF( iinfo.NE.0 )
THEN
798 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,I,' // uplo //
799 $
')', iinfo, n, jtype, ioldsd
801 IF( iinfo.LT.0 )
THEN
804 result( ntest ) = ulpinv
811 CALL clacpy(
' ', n, n, v, ldu, a, lda )
813 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
814 $ v, ldu, tau, work, rwork, result( ntest ) )
819 $ il, iu, abstol, m3, wa3, z, ldu,
820 $ work, lwork, rwork, iwork,
821 $ iwork( 5*n+1 ), iinfo )
822 IF( iinfo.NE.0 )
THEN
823 WRITE( nounit, fmt = 9999 )
824 $
'CHEEVX_2STAGE(N,I,' // uplo //
825 $
')', iinfo, n, jtype, ioldsd
827 IF( iinfo.LT.0 )
THEN
830 result( ntest ) = ulpinv
837 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
838 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
840 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
844 result( ntest ) = ( temp1+temp2 ) /
845 $
max( unfl, temp3*ulp )
848 CALL clacpy(
' ', n, n, v, ldu, a, lda )
852 CALL cheevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
853 $ abstol, m2, wa2, z, ldu, work, lwork, rwork,
854 $ iwork, iwork( 5*n+1 ),
855 IF( iinfo.NE.0 )
THEN
856 WRITE( nounit, fmt = 9999 )
'CHEEVX(V,V,' // uplo //
857 $
')', iinfo, n, jtype, ioldsd
859 IF( iinfo.LT.0 )
THEN
862 result( ntest ) = ulpinv
869 CALL clacpy(
' ', n, n, v, ldu, a, lda )
871 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
877 $ il, iu, abstol, m3, wa3, z, ldu,
878 $ work, lwork, rwork, iwork,
879 $ iwork( 5*n+1 ), iinfo )
880 IF( iinfo.NE.0 )
THEN
881 WRITE( nounit, fmt = 9999 )
882 $
'CHEEVX_2STAGE(N,V,' // uplo //
883 $
')', iinfo, n, jtype, ioldsd
885 IF( iinfo.LT.0 )
THEN
888 result( ntest ) = ulpinv
893 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
894 result( ntest ) = ulpinv
900 temp1 = ssxt1( 1, wa2, m2
901 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
903 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
907 result( ntest ) = ( temp1+temp2 ) /
908 $
max( unfl, temp3*ulp )
914 CALL clacpy(
' ', n, n, v, ldu, a, lda )
919 IF( iuplo.EQ.1 )
THEN
923 work( indx ) = a( i, j )
931 work( indx ) = a( i, j )
938 indwrk = n*( n+1 ) / 2 + 1
939 CALL chpevd(
'V', uplo, n, work, d1, z, ldu,
940 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
942 IF( iinfo.NE.0 )
THEN
943 WRITE( nounit, fmt = 9999 )
'CHPEVD(V,' // uplo //
944 $
')', iinfo, n, jtype, ioldsd
946 IF( iinfo.LT.0 )
THEN
949 result( ntest ) = ulpinv
950 result( ntest+1 ) = ulpinv
951 result( ntest+2 ) = ulpinv
958 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
959 $ ldu, tau, work, rwork, result( ntest ) )
961 IF( iuplo.EQ.1 )
THEN
965 work( indx ) = a( i, j )
973 work( indx ) = a( i, j )
980 indwrk = n*( n+1 ) / 2 + 1
981 CALL chpevd(
'N', uplo, n, work, d3, z, ldu,
982 $ work( indwrk ), lwedc, rwork, lrwedc, iwork,
984 IF( iinfo.NE.0 )
THEN
985 WRITE( nounit, fmt = 9999 )
'CHPEVD(N,' // uplo //
986 $
')', iinfo, n, jtype, ioldsd
988 IF( iinfo.LT.0 )
THEN
991 result( ntest ) = ulpinv
1001 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1002 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1004 result( ntest ) = temp2 /
max( unfl,
1005 $ ulp*
max( temp1, temp2 ) )
1011 IF( iuplo.EQ.1 )
THEN
1015 work( indx ) = a( i, j )
1023 work( indx ) = a( i, j )
1032 temp3 =
max( abs( d1( 1 ) ), abs( d1( n ) ) )
1034 vl = d1( il ) -
max( half*( d1( il )-d1( il-1 ) ),
1035 $ ten*ulp*temp3, ten*rtunfl )
1036 ELSE IF( n.GT.0 )
THEN
1037 vl = d1( 1 ) -
max( half*( d1( n )-d1( 1 ) ),
1038 $ ten*ulp*temp3, ten*rtunfl )
1041 vu = d1( iu ) +
max( half*( d1( iu+1 )-d1( iu ) ),
1042 $ ten*ulp*temp3, ten*rtunfl )
1043 ELSE IF( n.GT.0 )
THEN
1044 vu = d1( n ) +
max( half*( d1( n )-d1( 1 ) ),
1045 $ ten*ulp*temp3, ten*rtunfl )
1053 CALL chpevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1054 $ abstol, m, wa1, z, ldu, v, rwork, iwork,
1055 $ iwork( 5*n+1 ), iinfo )
1057 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,A,' // uplo //
1058 $
')', iinfo, n, jtype, ioldsd
1060 IF( iinfo.LT.0 )
THEN
1063 result( ntest ) = ulpinv
1064 result( ntest+1 ) = ulpinv
1065 result( ntest+2 ) = ulpinv
1072 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1073 $ ldu, tau, work, rwork, result( ntest ) )
1077 IF( iuplo.EQ.1 )
THEN
1081 work( indx ) = a( i, j )
1089 work( indx ) = a( i, j )
1095 CALL chpevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1096 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1097 $ iwork( 5*n+1 ), iinfo )
1098 IF( iinfo.NE.0 )
THEN
1099 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,A,' // uplo //
1100 $
')', iinfo, n, jtype, ioldsd
1102 IF( iinfo.LT.0 )
THEN
1105 result( ntest ) = ulpinv
1115 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1116 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1118 result( ntest ) = temp2 /
max( unfl,
1119 $ ulp*
max( temp1, temp2 ) )
1123 IF( iuplo.EQ.1 )
THEN
1127 work( indx ) = a( i, j )
1135 work( indx ) = a( i, j )
1141 CALL chpevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1142 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1143 $ iwork( 5*n+1 ), iinfo )
1144 IF( iinfo.NE.0 )
THEN
1145 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,I,' // uplo //
1146 $
')', iinfo, n, jtype, ioldsd
1148 IF( iinfo.LT.0 )
THEN
1151 result( ntest ) = ulpinv
1152 result( ntest+1 ) = ulpinv
1153 result( ntest+2 ) = ulpinv
1160 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1161 $ v, ldu, tau, work, rwork, result( ntest ) )
1165 IF( iuplo.EQ.1 )
THEN
1169 work( indx ) = a( i, j )
1177 work( indx ) = a( i, j )
1183 CALL chpevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1184 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1185 $ iwork( 5*n+1 ), iinfo )
1186 IF( iinfo.NE.0 )
THEN
1187 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,I,' // uplo //
1188 $
')', iinfo, n, jtype, ioldsd
1190 IF( iinfo.LT.0 )
THEN
1193 result( ntest ) = ulpinv
1200 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1201 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1203 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1207 result( ntest ) = ( temp1+temp2 ) /
1208 $
max( unfl, temp3*ulp )
1212 IF( iuplo.EQ.1 )
THEN
1216 work( indx ) = a( i, j )
1224 work( indx ) = a( i, j )
1230 CALL chpevx(
'V',
'V', uplo
1231 $ abstol, m2, wa2, z, ldu, v, rwork, iwork,
1232 $ iwork( 5*n+1 ), iinfo )
1233 IF( iinfo.NE.0 )
THEN
1234 WRITE( nounit, fmt = 9999 )
'CHPEVX(V,V,' // uplo //
1235 $
')', iinfo, n, jtype, ioldsd
1237 IF( iinfo.LT.0 )
THEN
1240 result( ntest ) = ulpinv
1241 result( ntest+1 ) = ulpinv
1242 result( ntest+2 ) = ulpinv
1249 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1250 $ v, ldu, tau, work, rwork, result( ntest ) )
1254 IF( iuplo.EQ.1 )
THEN
1258 work( indx ) = a( i, j )
1266 work( indx ) = a( i, j )
1272 CALL chpevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
1273 $ abstol, m3, wa3, z, ldu, v, rwork, iwork,
1274 $ iwork( 5*n+1 ), iinfo )
1275 IF( iinfo.NE.0 )
THEN
1276 WRITE( nounit, fmt = 9999 )
'CHPEVX(N,V,' // uplo //
1277 $
')', iinfo, n, jtype, ioldsd
1279 IF( iinfo.LT.0 )
THEN
1282 result( ntest ) = ulpinv
1287 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1288 result( ntest ) = ulpinv
1294 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1295 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1297 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1301 result( ntest ) = ( temp1+temp2 ) /
1302 $
max( unfl, temp3*ulp )
1308 IF( jtype.LE.7 )
THEN
1310 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1319 IF( iuplo.EQ.1 )
THEN
1321 DO 560 i =
max( 1, j-kd ), j
1322 v( kd+1+i-j, j ) = a( i, j )
1327 DO 580 i = j,
min( n, j+kd )
1328 v( 1+i-j, j ) = a( i, j )
1334 CALL chbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1335 $ lwedc, rwork, lrwedc, iwork, liwedc, iinfo )
1336 IF( iinfo.NE.0 )
THEN
1337 WRITE( nounit, fmt = 9998 )
'CHBEVD(V,' // uplo //
1338 $
')', iinfo, n, kd, jtype, ioldsd
1340 IF( iinfo.LT.0 )
THEN
1343 result( ntest ) = ulpinv
1344 result( ntest+1 ) = ulpinv
1345 result( ntest+2 ) = ulpinv
1352 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1353 $ ldu, tau, work, rwork, result( ntest ) )
1355 IF( iuplo.EQ.1 )
THEN
1357 DO 600 i =
max( 1, j-kd ), j
1358 v( kd+1+i-j, j ) = a( i, j )
1363 DO 620 i = j,
min( n, j+kd )
1364 v( 1+i-j, j ) = a( i, j )
1371 $ z, ldu, work, lwork, rwork,
1372 $ lrwedc, iwork, liwedc, iinfo )
1373 IF( iinfo.NE.0 )
THEN
1374 WRITE( nounit, fmt = 9998 )
1375 $
'CHBEVD_2STAGE(N,' // uplo //
1376 $
')', iinfo, n, kd, jtype, ioldsd
1378 IF( iinfo.LT.0 )
THEN
1381 result( ntest ) = ulpinv
1391 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1392 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1394 result( ntest ) = temp2 /
max( unfl,
1395 $ ulp*
max( temp1, temp2 ) )
1401 IF( iuplo.EQ.1 )
THEN
1403 DO 660 i =
max( 1, j-kd ), j
1404 v( kd+1+i-j, j ) = a( i, j )
1409 DO 680 i = j,
min( n, j+kd )
1410 v( 1+i-j, j ) = a( i, j )
1416 CALL chbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
1417 $ vu, il, iu, abstol, m, wa1, z, ldu, work,
1418 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1419 IF( iinfo.NE.0 )
THEN
1420 WRITE( nounit, fmt = 9999 )
'CHBEVX(V,A,' // uplo //
1421 $
')', iinfo, n, kd, jtype, ioldsd
1423 IF( iinfo.LT.0 )
THEN
1426 result( ntest ) = ulpinv
1427 result( ntest+1 ) = ulpinv
1428 result( ntest+2 ) = ulpinv
1435 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1436 $ ldu, tau, work, rwork, result( ntest ) )
1440 IF( iuplo.EQ.1 )
THEN
1442 DO 700 i =
max( 1, j-kd ), j
1443 v( kd+1+i-j, j ) = a( i, j )
1448 DO 720 i = j,
min( n, j+kd )
1449 v( 1+i-j, j ) = a( i, j )
1455 $ u, ldu, vl, vu, il, iu, abstol,
1456 $ m2, wa2, z, ldu, work, lwork,
1457 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1458 IF( iinfo.NE.0 )
THEN
1459 WRITE( nounit, fmt = 9998 )
1460 $
'CHBEVX_2STAGE(N,A,' // uplo //
1461 $
')', iinfo, n, kd, jtype, ioldsd
1463 IF( iinfo.LT.0 )
THEN
1466 result( ntest ) = ulpinv
1476 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1477 temp2 =
max( temp2, abs( wa1
1479 result( ntest ) = temp2 /
max( unfl,
1480 $ ulp*
max( temp1, temp2 ) )
1487 IF( iuplo.EQ.1 )
THEN
1489 DO 760 i =
max( 1, j-kd ), j
1490 v( kd+1+i-j, j ) = a( i, j )
1495 DO 780 i = j,
min( n, j+kd )
1496 v( 1+i-j, j ) = a( i, j )
1501 CALL chbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
1502 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1503 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1504 IF( iinfo.NE.0 )
THEN
1505 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,I,' // uplo //
1506 $
')', iinfo, n, kd, jtype, ioldsd
1508 IF( iinfo.LT.0 )
THEN
1511 result( ntest ) = ulpinv
1512 result( ntest+1 ) = ulpinv
1513 result( ntest+2 ) = ulpinv
1521 $ v, ldu, tau, work, rwork, result( ntest ) )
1525 IF( iuplo.EQ.1 )
THEN
1527 DO 800 i =
max( 1, j-kd ), j
1528 v( kd+1+i-j, j ) = a( i, j )
1534 v( 1+i-j, j ) = a( i, j )
1539 $ u, ldu, vl, vu, il, iu, abstol,
1540 $ m3, wa3, z, ldu, work, lwork,
1541 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1542 IF( iinfo.NE.0 )
THEN
1543 WRITE( nounit, fmt = 9998 )
1544 $
'CHBEVX_2STAGE(N,I,' // uplo //
1545 $
')', iinfo, n, kd, jtype, ioldsd
1547 IF( iinfo.LT.0 )
THEN
1550 result( ntest ) = ulpinv
1557 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1558 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1560 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1564 result( ntest ) = ( temp1+temp2 ) /
1572 IF( iuplo.EQ.1 )
THEN
1574 DO 850 i =
max( 1, j-kd ), j
1575 v( kd+1+i-j, j ) = a( i, j )
1580 DO 870 i = j,
min( n, j+kd )
1581 v( 1+i-j, j ) = a( i, j )
1585 CALL chbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
1586 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
1587 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1588 IF( iinfo.NE.0 )
THEN
1589 WRITE( nounit, fmt = 9998 )
'CHBEVX(V,V,' // uplo //
1590 $
')', iinfo, n, kd, jtype, ioldsd
1592 IF( iinfo.LT.0 )
THEN
1595 result( ntest ) = ulpinv
1596 result( ntest+1 ) = ulpinv
1597 result( ntest+2 ) = ulpinv
1604 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1605 $ v, ldu, tau, work, rwork, result( ntest ) )
1609 IF( iuplo.EQ.1 )
THEN
1611 DO 890 i =
max( 1, j-kd ), j
1612 v( kd+1+i-j, j ) = a( i, j )
1617 DO 910 i = j,
min( n, j+kd )
1618 v( 1+i-j, j ) = a( i, j )
1623 $ u, ldu, vl, vu, il, iu, abstol,
1624 $ m3, wa3, z, ldu, work, lwork,
1625 $ rwork, iwork, iwork( 5*n+1 ), iinfo )
1626 IF( iinfo.NE.0 )
THEN
1627 WRITE( nounit, fmt = 9998 )
1628 $
'CHBEVX_2STAGE(N,V,' // uplo //
1629 $
')', iinfo, n, kd, jtype, ioldsd
1631 IF( iinfo.LT.0 )
THEN
1634 result( ntest ) = ulpinv
1639 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1640 result( ntest ) = ulpinv
1646 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1647 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1649 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1653 result( ntest ) = ( temp1+temp2 ) /
1654 $
max( unfl, temp3*ulp )
1660 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1663 CALL cheev(
'V', uplo, n, a, ldu, d1, work, lwork, rwork,
1665 IF( iinfo.NE.0 )
THEN
1666 WRITE( nounit, fmt = 9999 )
'CHEEV(V,' // uplo //
')',
1667 $ iinfo, n, jtype, ioldsd
1669 IF( iinfo.LT.0 )
THEN
1672 result( ntest ) = ulpinv
1673 result( ntest+1 ) = ulpinv
1674 result( ntest+2 ) = ulpinv
1681 CALL chet21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1682 $ ldu, tau, work, rwork, result( ntest ) )
1684 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1688 $ work, lwork, rwork, iinfo )
1689 IF( iinfo.NE.0 )
THEN
1690 WRITE( nounit, fmt = 9999 )
1691 $
'CHEEV_2STAGE(N,' // uplo //
')',
1692 $ iinfo, n, jtype, ioldsd
1694 IF( iinfo.LT.0 )
THEN
1697 result( ntest ) = ulpinv
1707 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1708 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1710 result( ntest ) = temp2 /
max( unfl,
1711 $ ulp*
max( temp1, temp2 ) )
1715 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1722 IF( iuplo.EQ.1 )
THEN
1734 work( indx ) = a( i, j )
1741 indwrk = n*( n+1 ) / 2 + 1
1742 CALL chpev(
'V', uplo, n, work, d1, z, ldu,
1743 $ work( indwrk ), rwork, iinfo )
1744 IF( iinfo.NE.0 )
THEN
1745 WRITE( nounit, fmt = 9999 )
'CHPEV(V,' // uplo //
')',
1746 $ iinfo, n, jtype, ioldsd
1748 IF( iinfo.LT.0 )
THEN
1751 result( ntest ) = ulpinv
1752 result( ntest+1 ) = ulpinv
1753 result( ntest+2 ) = ulpinv
1760 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1761 $ ldu, tau, work, rwork, result( ntest ) )
1763 IF( iuplo.EQ.1 )
THEN
1767 work( indx ) = a( i, j )
1775 work( indx ) = a( i, j )
1782 indwrk = n*( n+1 ) / 2 + 1
1783 CALL chpev(
'N', uplo, n, work, d3, z, ldu,
1784 $ work( indwrk ), rwork, iinfo )
1785 IF( iinfo.NE.0 )
THEN
1786 WRITE( nounit, fmt = 9999 )
'CHPEV(N,' // uplo //
')',
1787 $ iinfo, n, jtype, ioldsd
1789 IF( iinfo.LT.0 )
THEN
1792 result( ntest ) = ulpinv
1802 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1803 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1805 result( ntest ) = temp2 /
max( unfl
1806 $ ulp*
max( temp1, temp2 ) )
1812 IF( jtype.LE.7 )
THEN
1814 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
1823 IF( iuplo.EQ.1 )
THEN
1825 DO 1060 i =
max( 1, j-kd ), j
1826 v( kd+1+i-j, j ) = a( i, j )
1831 DO 1080 i = j,
min( n, j+kd )
1832 v( 1+i-j, j ) = a( i, j )
1838 CALL chbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
1840 IF( iinfo.NE.0 )
THEN
1841 WRITE( nounit, fmt = 9998 )
'CHBEV(V,' // uplo //
')',
1842 $ iinfo, n, kd, jtype, ioldsd
1844 IF( iinfo.LT.0 )
THEN
1847 result( ntest ) = ulpinv
1848 result( ntest+1 ) = ulpinv
1849 result( ntest+2 ) = ulpinv
1856 CALL chet21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1857 $ ldu, tau, work, rwork, result( ntest ) )
1859 IF( iuplo.EQ.1 )
THEN
1861 DO 1100 i =
max( 1, j-kd ), j
1862 v( kd+1+i-j, j ) = a( i, j )
1867 DO 1120 i = j,
min( n, j+kd )
1868 v( 1+i-j, j ) = a( i, j )
1874 CALL chbev_2stage(
'N', uplo, n, kd, v, ldu, d3, z, ldu,
1875 $ work, lwork, rwork, iinfo )
1876 IF( iinfo.NE.0 )
THEN
1877 WRITE( nounit, fmt = 9998 )
1878 $
'CHBEV_2STAGE(N,' // uplo //
')',
1879 $ iinfo, n, kd, jtype, ioldsd
1881 IF( iinfo.LT.0 )
THEN
1884 result( ntest ) = ulpinv
1896 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1897 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
1899 result( ntest ) = temp2 /
max( unfl,
1900 $ ulp*
max( temp1, temp2 ) )
1902 CALL clacpy(
' ', n, n, a, lda, v, ldu )
1904 CALL cheevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1905 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
1906 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1908 IF( iinfo.NE.0 )
THEN
1909 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,A,' // uplo //
1910 $
')', iinfo, n, jtype, ioldsd
1912 IF( iinfo.LT.0 )
THEN
1915 result( ntest ) = ulpinv
1916 result( ntest+1 ) = ulpinv
1917 result( ntest+2 ) = ulpinv
1924 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1926 CALL chet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1927 $ ldu, tau, work, rwork, result( ntest ) )
1931 $ il, iu, abstol, m2, wa2, z, ldu,
1932 $ iwork, work, lwork, rwork, lrwork,
1933 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1934 IF( iinfo.NE.0 )
THEN
1935 WRITE( nounit, fmt = 9999 )
1936 $
'CHEEVR_2STAGE(N,A,' // uplo //
1937 $
')', iinfo, n, jtype, ioldsd
1939 IF( iinfo.LT.0 )
THEN
1942 result( ntest ) = ulpinv
1952 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1953 temp2 =
max( temp2, abs( wa1( j )-wa2( j ) ) )
1955 result( ntest ) = temp2 /
max( unfl,
1956 $ ulp*
max( temp1, temp2 ) )
1961 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1962 CALL cheevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1963 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
1964 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
1966 IF( iinfo.NE.0 )
THEN
1967 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,I,' // uplo //
1968 $
')', iinfo, n, jtype, ioldsd
1970 IF( iinfo.LT.0 )
THEN
1973 result( ntest ) = ulpinv
1974 result( ntest+1 ) = ulpinv
1975 result( ntest+2 ) = ulpinv
1982 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1984 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1985 $ v, ldu, tau, work, rwork, result( ntest ) )
1988 CALL clacpy(
' ', n, n, v, ldu, a, lda )
1990 $ il, iu, abstol, m3, wa3, z, ldu,
1991 $ iwork, work, lwork, rwork, lrwork,
1992 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
1993 IF( iinfo.NE.0 )
THEN
1994 WRITE( nounit, fmt = 9999 )
1995 $
'CHEEVR_2STAGE(N,I,' // uplo //
1996 $
')', iinfo, n, jtype, ioldsd
1998 IF( iinfo.LT.0 )
THEN
2001 result( ntest ) = ulpinv
2008 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2009 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2010 result( ntest ) = ( temp1+temp2 ) /
2011 $
max( unfl, ulp*temp3 )
2015 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2016 CALL cheevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2017 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2018 $ rwork, lrwork, iwork( 2*n+1 ), liwork-2*n,
2020 IF( iinfo.NE.0 )
THEN
2021 WRITE( nounit, fmt = 9999 )
'CHEEVR(V,V,' // uplo //
2022 $
')', iinfo, n, jtype, ioldsd
2024 IF( iinfo.LT.0 )
THEN
2027 result( ntest ) = ulpinv
2028 result( ntest+1 ) = ulpinv
2029 result( ntest+2 ) = ulpinv
2036 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2038 CALL chet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2039 $ v, ldu, tau, work, rwork, result( ntest ) )
2042 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2044 $ il, iu, abstol, m3, wa3, z, ldu,
2045 $ iwork, work, lwork, rwork, lrwork,
2046 $ iwork( 2*n+1 ), liwork-2*n, iinfo )
2047 IF( iinfo.NE.0 )
THEN
2048 WRITE( nounit, fmt = 9999 )
2049 $
'CHEEVR_2STAGE(N,V,' // uplo //
2050 $
')', iinfo, n, jtype, ioldsd
2052 IF( iinfo.LT.0 )
THEN
2055 result( ntest ) = ulpinv
2060 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2061 result( ntest ) = ulpinv
2067 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2068 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2070 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2074 result( ntest ) = ( temp1+temp2 ) /
2075 $
max( unfl, temp3*ulp )
2077 CALL clacpy(
' ', n, n, v, ldu, a, lda )
2091 ntestt = ntestt + ntest
2092 CALL slafts(
'CST', n, n, jtype, ntest, result, ioldsd,
2093 $ thresh, nounit, nerrs )
2100 CALL alasvm(
'CST', nounit, nerrs, ntestt, 0 )
2102 9999
FORMAT(
' CDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2103 $
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2104 9998
FORMAT(
' CDRVST2STG: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2105 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,