334 SUBROUTINE zdrvst( 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,
346 DOUBLE PRECISION THRESH
350 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
351 DOUBLE PRECISION D1( * ), D2( * ), D3( * ), RESULT( * ),
352 $ rwork( * ), wa1( * ), wa2( * ), wa3( * )
353 COMPLEX*16 A( LDA, * ), TAU( * ), U( LDU, * ),
354 $ v( ldu, * ), work( * ), z( ldu, * )
361 DOUBLE PRECISION ZERO, ONE, TWO, TEN
362 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0, two = 2.0d+0,
364 DOUBLE PRECISION HALF
365 parameter( half = one / two )
366 COMPLEX*16 CZERO, CONE
367 parameter( czero = ( 0.0d+0, 0.0d+0 ),
368 $ cone = ( 1.0d+0, 0.0d+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 DOUBLE PRECISION 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 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
391 EXTERNAL DLAMCH, DLARND, DSXT1
400 INTRINSIC abs, dble, int, log,
max,
min, 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(
'ZDRVST', -info )
447 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
452 unfl = dlamch(
'Safe minimum' )
453 ovfl = dlamch(
'Overflow' )
455 ulp = dlamch(
'Epsilon' )*dlamch(
'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( dble( 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 / dble(
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 zlaset(
'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 zlatms( 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 zlatms( 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 zlatmr( 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 zlatmr( 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 )*dlarnd( 1, iseed3 ) )
599 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
600 $ anorm, ihbw, ihbw, 'z
', U, LDU, WORK,
605 CALL ZLASET( '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.NE.
IF( IINFO0 ) THEN
620 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
633 IL = 1 + INT( ( N-1 )*DLARND( 1, ISEED2 ) )
634 IU = 1 + INT( ( N-1 )*DLARND( 1, ISEED2 ) )
646.EQ.
IF( IUPLO0 ) THEN
654 CALL ZLACPY( ' ', N, N, A, LDA, V, LDU )
657 CALL ZHEEVD( 'v
', UPLO, N, A, LDU, D1, WORK, LWEDC,
658 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
659.NE.
IF( IINFO0 ) THEN
660 WRITE( NOUNIT, FMT = 9999 )'zheevd(v,
' // UPLO //
661 $ ')
', IINFO, N, JTYPE, IOLDSD
663.LT.
IF( IINFO0 ) THEN
666 RESULT( NTEST ) = ULPINV
667 RESULT( NTEST+1 ) = ULPINV
668 RESULT( NTEST+2 ) = ULPINV
675 CALL ZHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
676 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
678 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
681 CALL ZHEEVD( 'n
', UPLO, N, A, LDU, D3, WORK, LWEDC,
682 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
683.NE.
IF( IINFO0 ) THEN
684 WRITE( NOUNIT, FMT = 9999 )'zheevd(n,
' // UPLO //
685 $ ')
', IINFO, N, JTYPE, IOLDSD
687.LT.
IF( IINFO0 ) 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 ZLACPY( ' ', 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.GT.
ELSE IF( N0 ) 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.GT.
ELSE IF( N0 ) THEN
724 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
725 $ TEN*ULP*TEMP3, TEN*RTUNFL )
733 CALL ZHEEVX( '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.NE.
IF( IINFO0 ) THEN
737 WRITE( NOUNIT, FMT = 9999 )'zheevx(v,a,
' // UPLO //
738 $ ')
', IINFO, N, JTYPE, IOLDSD
740.LT.
IF( IINFO0 ) THEN
743 RESULT( NTEST ) = ULPINV
744 RESULT( NTEST+1 ) = ULPINV
745 RESULT( NTEST+2 ) = ULPINV
752 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
754 CALL ZHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
755 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
758 CALL ZHEEVX( '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.NE.
IF( IINFO0 ) THEN
762 WRITE( NOUNIT, FMT = 9999 )'zheevx(n,a,
' // UPLO //
763 $ ')
', IINFO, N, JTYPE, IOLDSD
765.LT.
IF( IINFO0 ) 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 ZLACPY( ' ', N, N, V, LDU, A, LDA )
789 CALL ZHEEVX( '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.NE.
IF( IINFO0 ) THEN
793 WRITE( NOUNIT, FMT = 9999 )'zheevx(v,i,
' // UPLO //
794 $ ')
', IINFO, N, JTYPE, IOLDSD
796.LT.
IF( IINFO0 ) THEN
799 RESULT( NTEST ) = ULPINV
806 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
808 CALL ZHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
809 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
813 CALL ZHEEVX( '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.NE.
IF( IINFO0 ) THEN
817 WRITE( NOUNIT, FMT = 9999 )'zheevx(n,i,
' // UPLO //
818 $ ')
', IINFO, N, JTYPE, IOLDSD
820.LT.
IF( IINFO0 ) THEN
823 RESULT( NTEST ) = ULPINV
830 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
831 TEMP2 = DSXT1( 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 ZLACPY( ' ', N, N, V, LDU, A, LDA )
845 CALL ZHEEVX( '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 )
'ZHEEVX(V,V,' // uplo //
850 $
')', iinfo, n, jtype, ioldsd
852 IF( iinfo.LT.0 )
THEN
855 result( ntest ) = ulpinv
862 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
864 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
865 $ v, ldu, tau, work, rwork, result( ntest ) )
869 CALL zheevx(
'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 )
'ZHEEVX(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 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
892 temp2 = dsxt1( 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 zlacpy(
' ', 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 zhpevd(
'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 )
'ZHPEVD(V,' // uplo //
935 $
')', iinfo, n, jtype, ioldsd
937 IF( iinfo.LT.0 )
THEN
940 result( ntest ) = ulpinv
941 result( ntest+1 ) = ulpinv
942 result( ntest+2 ) = ulpinv
949 CALL zhet21( 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 zhpevd(
'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 )
'ZHPEVD(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 zhpevx( '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 )'zhpevx(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 ZHET21( 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 ZHPEVX( '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.NE.
IF( IINFO0 ) THEN
1090 WRITE( NOUNIT, FMT = 9999 )'zhpevx(n,a,
' // UPLO //
1091 $ ')
', IINFO, N, JTYPE, IOLDSD
1093.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) THEN
1118 WORK( INDX ) = A( I, J )
1126 WORK( INDX ) = A( I, J )
1132 CALL ZHPEVX( '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.NE.
IF( IINFO0 ) THEN
1136 WRITE( NOUNIT, FMT = 9999 )'zhpevx(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 ZHET22( 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 ZHPEVX( '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 )'zhpevx(n,i,
' // UPLO //
1179 $ ')
', IINFO, N, JTYPE, IOLDSD
1181.LT.
IF( IINFO0 ) THEN
1184 RESULT( NTEST ) = ULPINV
1191 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1192 TEMP2 = DSXT1( 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 ZHPEVX( '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 )'zhpevx(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 ZHET22( 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 ZHPEVX( '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 )'zhpevx(n,v,
' // UPLO //
1268 $ ')
', IINFO, N, JTYPE, IOLDSD
1270.LT.
IF( IINFO0 ) THEN
1273 RESULT( NTEST ) = ULPINV
1278.EQ..AND..GT.
IF( M30 N0 ) THEN
1279 RESULT( NTEST ) = ULPINV
1285 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1286 TEMP2 = DSXT1( 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.LE.
IF( JTYPE7 ) THEN
1301.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
1310.EQ.
IF( IUPLO1 ) 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 ZHBEVD( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
1326 $ LWEDC, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
1327.NE.
IF( IINFO0 ) THEN
1328 WRITE( NOUNIT, FMT = 9998 )'zhbevd(v,
' // UPLO //
1329 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1331.LT.
IF( IINFO0 ) THEN
1334 RESULT( NTEST ) = ULPINV
1335 RESULT( NTEST+1 ) = ULPINV
1336 RESULT( NTEST+2 ) = ULPINV
1343 CALL ZHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
1344 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1346.EQ.
IF( IUPLO1 ) 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 ZHBEVD( '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 )'zhbevd(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 ZHBEVX( '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 )'zhbevx(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 ZHET21( 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 ZHBEVX( '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 )'zhbevx(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 ZHBEVX( '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 )'zhbevx(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 ZHET22( 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 ZHBEVX( '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 )'zhbevx(n,i,
' // UPLO //
1530 $ ')
', IINFO, N, KD, JTYPE, IOLDSD
1532.LT.
IF( IINFO0 ) THEN
1535 RESULT( NTEST ) = ULPINV
1542 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1543 TEMP2 = DSXT1( 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 ZHBEVX( '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 )'zhbevx(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 ZHET22( 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 ZHBEVX( '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 )'zhbevx(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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1630 TEMP2 = DSXT1( 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 ZLACPY( ' ', N, N, A, LDA, V, LDU )
1646 CALL ZHEEV( 'v
', UPLO, N, A, LDU, D1, WORK, LWORK, RWORK,
1648.NE.
IF( IINFO0 ) THEN
1649 WRITE( NOUNIT, FMT = 9999 )'zheev(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 ZHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
1665 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
1667 CALL ZLACPY( ' ', N, N, V, LDU, A, LDA )
1670 CALL ZHEEV( 'n
', UPLO, N, A, LDU, D3, WORK, LWORK, RWORK,
1672.NE.
IF( IINFO0 ) THEN
1673 WRITE( NOUNIT, FMT = 9999 )'zheev(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 ZLACPY( ' ', 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 ZHPEV( 'v
', UPLO, N, WORK, D1, Z, LDU,
1725 $ WORK( INDWRK ), RWORK, IINFO )
1726.NE.
IF( IINFO0 ) THEN
1727 WRITE( NOUNIT, FMT = 9999 )'zhpev(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 ZHET21( 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 ZHPEV( 'n
', UPLO, N, WORK, D3, Z, LDU,
1766 $ WORK( INDWRK ), RWORK, IINFO )
1767.NE.
IF( IINFO0 ) THEN
1768 WRITE( NOUNIT, FMT = 9999 )'zhpev(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 ZHBEV( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
1822.NE.
IF( IINFO0 ) THEN
1823 WRITE( NOUNIT, FMT = 9998 )'zhbev(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 ZHET21( 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 ZHBEV( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
1858.NE.
IF( IINFO0 ) THEN
1859 WRITE( NOUNIT, FMT = 9998 )'zhbev(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 ZLACPY( ' ', N, N, A, LDA, V, LDU )
1885 CALL ZHEEVR( '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 )'zheevr(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 zlacpy(
' ', n, n, v, ldu, a, lda )
1907 CALL zhet21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1908 $ ldu, tau, work, rwork, result( ntest ) )
1911 CALL zheevr(
'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 )
'ZHEEVR(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 zlacpy(
' ', n, n, v, ldu, a, lda )
1942 CALL zheevr(
'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 )
'ZHEEVR(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 zlacpy(
' ', n, n, v, ldu, a, lda )
1964 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1965 $ v, ldu, tau, work, rwork, result( ntest ) )
1968 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1969 CALL zheevr(
'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 IF( iinfo.NE.0 )
THEN
1974 WRITE( nounit, fmt = 9999 )
'ZHEEVR(N,I,' // uplo //
1975 $
')', iinfo, n, jtype, ioldsd
1977 IF( iinfo.LT.0 )
THEN
1980 result( ntest ) = ulpinv
1987 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1988 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1989 result( ntest ) = ( temp1+temp2 ) /
1990 $
max( unfl, ulp*temp3 )
1994 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
1995 CALL zheevr(
'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 IF( iinfo.NE.0 )
THEN
2000 WRITE( nounit, fmt = 9999 )
'ZHEEVR(V,V,' // uplo //
2001 $
')', iinfo, n, jtype, ioldsd
2003 IF( iinfo.LT.0 )
THEN
2006 result( ntest ) = ulpinv
2007 result( ntest+1 ) = ulpinv
2008 result( ntest+2 ) = ulpinv
2015 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2017 CALL zhet22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2018 $ v, ldu, tau, work, rwork, result( ntest ) )
2021 CALL zlacpy(
' ', n, n, v, ldu, a, lda )
2022 CALL zheevr( '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 )'zheevr(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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2046 TEMP2 = DSXT1( 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 ZLACPY( ' ', N, N, V, LDU, A, LDA )
2069 NTESTT = NTESTT + NTEST
2070 CALL DLAFTS( 'zst
', N, N, JTYPE, NTEST, RESULT, IOLDSD,
2071 $ THRESH, NOUNIT, NERRS )
2078 CALL ALASVM( 'zst
', NOUNIT, NERRS, NTESTT, 0 )
2080 9999 FORMAT( ' zdrvst:
', A, ' returned info=
', I6, / 9X, 'n=
', I6,
2081 $ ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
2082 9998 FORMAT( ' zdrvst: ', a,
' returned INFO=', i6, / 9x,
'N=', i6,
2083 $
', KD=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,