431 SUBROUTINE zdrvsx( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
432 $ NIUNIT, NOUNIT, A, LDA, H, HT, W, WT, WTMP, VS,
433 $ LDVS, VS1, RESULT, WORK, LWORK, RWORK, BWORK,
443DOUBLE PRECISION THRESH
446 LOGICAL BWORK( * ), ( * )
447 INTEGER ISEED( 4 ), NN( * )
448 DOUBLE PRECISION RESULT( 17 ), ( * )
449 COMPLEX*16 A( , * ), H( LDA, * ), ( LDA, * ),
450 $ vs( ldvs, * ), vs1( ldvs, * ), w( * ),
451 $ work( * ), wt( * ), wtmp( * )
458 PARAMETER ( CZERO = ( 0.0d+0, 0.0d+0 ) )
460 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
461 DOUBLE PRECISION ZERO, ONE
462 parameter( zero = 0.0d+0, one
464 parameter( maxtyp = 21 )
469 INTEGER I, IINFO, IMODE, ISRT, ITYPE, IWK, J, JCOL,
470 $ jsize, jtype, mtypes, n, nerrs, nfail, nmax,
471 $ nnwork, nslct, ntest, ntestf, ntestt
472 DOUBLE PRECISION ANORM, COND, CONDS, OVFL, RCDEIN, RCDVIN,
473 $ RTULP, RTULPI, ULP, ULPINV, UNFL
476 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISLCT( 20 ),
477 $ ( MAXTYP ), KMAGN( MAXTYP ),
478 $ KMODE( MAXTYP ), KTYPE( MAXTYP )
482 DOUBLE PRECISION SELWI( 20 ), SELWR( 20 )
485 INTEGER SELDIM, SELOPT
488 COMMON / sslct / selopt, seldim, selval, selwr, selwi
491 DOUBLE PRECISION DLAMCH
499 INTRINSIC abs,
max,
min, sqrt
502 DATA ktype / 1, 2, 3, 5*4, 4*6, 6*6, 3*9 /
503 DATA kmagn / 3*1, 1, 1, 1, 2, 3, 4*1, 1, 1, 1, 1, 2,
505 DATA kmode / 3*0, 4, 3, 1, 4, 4, 4, 3, 1, 5, 4, 3,
506 $ 1, 5, 5, 5, 4, 3, 1 /
507 DATA kconds / 3*0, 5*0, 4*1, 6*2, 3*0 /
511 path( 1: 1 ) =
'Zomplex precision'
529 NMAX = MAX( NMAX, NN( J ) )
536.LT.
IF( NSIZES0 ) THEN
538 ELSE IF( BADNN ) THEN
540.LT.
ELSE IF( NTYPES0 ) THEN
542.LT.
ELSE IF( THRESHZERO ) THEN
544.LE.
ELSE IF( NIUNIT0 ) THEN
546.LE.
ELSE IF( NOUNIT0 ) THEN
548.LT..OR..LT.
ELSE IF( LDA1 LDANMAX ) THEN
550.LT..OR..LT.
ELSE IF( LDVS1 LDVSNMAX ) THEN
552.GT.
ELSE IF( MAX( 3*NMAX, 2*NMAX**2 )LWORK ) THEN
557 CALL XERBLA( 'zdrvsx', -INFO )
563.EQ..OR..EQ.
IF( NSIZES0 NTYPES0 )
568 UNFL = DLAMCH( 'safe minimum
' )
570 CALL DLABAD( UNFL, OVFL )
571 ULP = DLAMCH( 'precision
' )
580 DO 140 JSIZE = 1, NSIZES
582.NE.
IF( NSIZES1 ) THEN
583 MTYPES = MIN( MAXTYP, NTYPES )
585 MTYPES = MIN( MAXTYP+1, NTYPES )
588 DO 130 JTYPE = 1, MTYPES
589.NOT.
IF( DOTYPE( JTYPE ) )
595 IOLDSD( J ) = ISEED( J )
614.GT.
IF( MTYPESMAXTYP )
617 ITYPE = KTYPE( JTYPE )
618 IMODE = KMODE( JTYPE )
622 GO TO ( 30, 40, 50 )KMAGN( JTYPE )
638 CALL ZLASET( 'full
', LDA, N, CZERO, CZERO, A, LDA )
644.EQ.
IF( ITYPE1 ) THEN
650.EQ.
ELSE IF( ITYPE2 ) THEN
655 A( JCOL, JCOL ) = ANORM
658.EQ.
ELSE IF( ITYPE3 ) THEN
663 A( JCOL, JCOL ) = ANORM
665 $ A( JCOL, JCOL-1 ) = CONE
668.EQ.
ELSE IF( ITYPE4 ) THEN
672 CALL ZLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
673 $ ANORM, 0, 0, 'n
', A, LDA, WORK( N+1 ),
676.EQ.
ELSE IF( ITYPE5 ) THEN
680 CALL ZLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
681 $ ANORM, N, N, 'n
', A, LDA, WORK( N+1 ),
684.EQ.
ELSE IF( ITYPE6 ) THEN
688.EQ.
IF( KCONDS( JTYPE )1 ) THEN
690.EQ.
ELSE IF( KCONDS( JTYPE )2 ) THEN
696 CALL ZLATME( N, 'd
', ISEED, WORK, IMODE, COND, CONE,
697 $ 't
', 't
', 't
', RWORK, 4, CONDS, N, N, ANORM,
698 $ A, LDA, WORK( 2*N+1 ), IINFO )
700.EQ.
ELSE IF( ITYPE7 ) THEN
704 CALL ZLATMR( N, N, 'd
', ISEED, 'n
', WORK, 6, ONE, CONE,
705 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
706 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
707 $ ZERO, ANORM, 'no
', A, LDA, IDUMMA, IINFO )
709.EQ.
ELSE IF( ITYPE8 ) THEN
713 CALL ZLATMR( N, N, 'd
', ISEED, 'h
', WORK, 6, ONE, CONE,
714 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
715 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
716 $ ZERO, ANORM, 'no
', A, LDA, IDUMMA, IINFO )
718.EQ.
ELSE IF( ITYPE9 ) THEN
722 CALL ZLATMR( N, N, 'd
', ISEED, 'n
', WORK, 6, ONE, CONE,
723 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
724 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
725 $ ZERO, ANORM, 'no
', A, LDA, IDUMMA, IINFO )
727 CALL ZLASET( 'full
', 2, N, CZERO, CZERO, A, LDA )
728 CALL ZLASET( 'full
', N-3, 1, CZERO, CZERO, A( 3, 1 ),
730 CALL ZLASET( 'full
', N-3, 2, CZERO, CZERO,
732 CALL ZLASET( 'full
', 1, N, CZERO, CZERO, A( N, 1 ),
736.EQ.
ELSE IF( ITYPE10 ) THEN
740 CALL ZLATMR( N, N, 'd
', ISEED, 'n
', WORK, 6, ONE, CONE,
741 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
742 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, 0,
743 $ ZERO, ANORM, 'no
', A, LDA, IDUMMA, IINFO )
750.NE.
IF( IINFO0 ) THEN
751 WRITE( NOUNIT, FMT = 9991 )'generator
', IINFO, N, JTYPE,
765 NNWORK = MAX( 2*N, N*( N+1 ) / 2 )
767 NNWORK = MAX( NNWORK, 1 )
769 CALL ZGET24( .FALSE., JTYPE, THRESH, IOLDSD, NOUNIT, N,
770 $ A, LDA, H, HT, W, WT, WTMP, VS, LDVS, VS1,
771 $ RCDEIN, RCDVIN, NSLCT, ISLCT, 0, RESULT,
772 $ WORK, NNWORK, RWORK, BWORK, INFO )
779.GE.
IF( RESULT( J )ZERO )
781.GE.
IF( RESULT( J )THRESH )
786 $ NTESTF = NTESTF + 1
787.EQ.
IF( NTESTF1 ) THEN
788 WRITE( NOUNIT, FMT = 9999 )PATH
789 WRITE( NOUNIT, FMT = 9998 )
790 WRITE( NOUNIT, FMT = 9997 )
791 WRITE( NOUNIT, FMT = 9996 )
792 WRITE( NOUNIT, FMT = 9995 )THRESH
793 WRITE( NOUNIT, FMT = 9994 )
798.GE.
IF( RESULT( J )THRESH ) THEN
799 WRITE( NOUNIT, FMT = 9993 )N, IWK, IOLDSD, JTYPE,
804 NERRS = NERRS + NFAIL
805 NTESTT = NTESTT + NTEST
818 READ( NIUNIT, FMT = *, END = 200 )N, NSLCT, ISRT
823 READ( NIUNIT, FMT = * )( ISLCT( I ), I = 1, NSLCT )
825 READ( NIUNIT, FMT = * )( A( I, J ), J = 1, N )
827 READ( NIUNIT, FMT = * )RCDEIN, RCDVIN
829 CALL ZGET24( .TRUE., 22, THRESH, ISEED, NOUNIT, N, A, LDA, H, HT,
830 $ W, WT, WTMP, VS, LDVS, VS1, RCDEIN, RCDVIN, NSLCT,
831 $ ISLCT, ISRT, RESULT, WORK, LWORK, RWORK, BWORK,
839.GE.
IF( RESULT( J )ZERO )
841.GE.
IF( RESULT( J )THRESH )
846 $ NTESTF = NTESTF + 1
847.EQ.
IF( NTESTF1 ) THEN
848 WRITE( NOUNIT, FMT = 9999 )PATH
849 WRITE( NOUNIT, FMT = 9998 )
850 WRITE( NOUNIT, FMT = 9997 )
851 WRITE( NOUNIT, FMT = 9996 )
852 WRITE( NOUNIT, FMT = 9995 )THRESH
853 WRITE( NOUNIT, FMT = 9994 )
857.GE.
IF( RESULT( J )THRESH ) THEN
858 WRITE( NOUNIT, FMT = 9992 )N, JTYPE, J, RESULT( J )
862 NERRS = NERRS + NFAIL
863 NTESTT = NTESTT + NTEST
869 CALL DLASUM( PATH, NOUNIT, NERRS, NTESTT )
871 9999 FORMAT( / 1X, A3, ' --
Complex Schur Form Decomposition Expert
',
872 $ 'Driver
', / ' Matrix types (see ZDRVSX for details):
' )
874 9998 FORMAT( / ' Special Matrices:
', / ' 1=zero matrix.
',
875 $ ' ', ' 5=diagonal: geometr. spaced entries.
',
876 $ / ' 2=identity matrix.
', ' 6=diagona
',
877 $ 'l: clustered entries.
', / ' 3=transposed jordan block.
',
878 $ ' ', ' 7=diagonal: large, evenly spaced.
', / ' ',
879 $ '4=diagonal: evenly spaced entries.
', ' 8=diagonal: s
',
880 $ 'mall, evenly spaced.
' )
881 9997 FORMAT( ' dense, non-symmetric matrices:
', / ' 9=well-cond., ev
',
882 $ 'enly spaced eigenvals.
', ' 14=ill-cond., geomet. spaced e
',
883 $ 'igenals.
', / ' 10=well-cond.,
geom. spaced eigenvals.
',
884 $ ' 15=ill-conditioned, clustered e.vals.
', / ' 11=well-cond
',
885 $ 'itioned, clustered e.vals.
', ' 16=ill-cond., random
comp',
886 $ 'lex
', / ' 12=well-cond., random
complex ', ' ',
887 $ ' 17=ill-cond., large rand. complx
', / ' 13=ill-condi
',
888 $ 'tioned, evenly spaced.
', ' 18=ill-cond., small rand.
',
890 9996 FORMAT( ' 19=matrix with random o(1) entries.
', ' 21=matrix
',
891 $ 'with small random entries.
', / ' 20=matrix with large ran
',
892 $ 'dom entries.
', / )
893 9995 FORMAT( ' tests performed with test threshold =
', F8.2,
894 $ / ' ( a denotes a on input and t denotes a on output)
',
895 $ / / ' 1 = 0
if t in schur form(no sort),
',
896 $ ' 1/ulp otherwise
', /
897 $ ' 2 = | a - vs t transpose(vs) | / ( n |a| ulp ) (no sort)
',
898 $ / ' 3 = | i - vs transpose(vs) | / ( n ulp ) (no sort)
',
899 $ / ' 4 = 0
if w are eigenvalues of t(no sort),
',
900 $ ' 1/ulp otherwise
', /
901 $ ' 5 = 0
if t same no matter
if vs computed(no sort),
',
902 $ ' 1/ulp otherwise
', /
903 $ ' 6 = 0
if w same no matter
if vs computed(no sort)
',
904 $ ', 1/ulp otherwise
' )
905 9994 FORMAT( ' 7 = 0
if t in schur form(sort),
', ' 1/ulp otherwise
',
906 $ / ' 8 = | a - vs t transpose(vs) | / ( n |a| ulp ) (sort)
',
907 $ / ' 9 = | i - vs transpose(vs) | / ( n ulp ) (sort)
',
908 $ / ' 10 = 0
if w are eigenvalues of t(sort),
',
909 $ ' 1/ulp otherwise
', /
910 $ ' 11 = 0
if t same no matter what
else computed(sort),
',
911 $ ' 1/ulp otherwise
', /
912 $ ' 12 = 0
if w same no matter what
else computed
',
913 $ '(sort), 1/ulp otherwise
', /
914 $ ' 13 = 0
if sorting successful, 1/ulp otherwise
',
915 $ / ' 14 = 0
if rconde same no matter what
else computed,
',
916 $ ' 1/ulp otherwise
', /
917 $ ' 15 = 0
if rcondv same no matter what
else computed,
',
918 $ ' 1/ulp otherwise
', /
919 $ ' 16 = | rconde - rconde(precomputed) | / cond(rconde),
',
920 $ / ' 17 = | rcondv - rcondv(precomputed) | / cond(rcondv),
' )
921 9993 FORMAT( ' n=
', I5, ', iwk=
', I2, ',
seed=
', 4( I4, ',
' ),
922 $ ' type ', I2, ', test(
', I2, ')=
', G10.3 )
923 9992 FORMAT( ' n=
', I5, ', input example =
', I3, ', test(
', I2, ')=
',
925 9991 FORMAT( ' zdrvsx:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
926 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
subroutine zdrvsx(nsizes, nn, ntypes, dotype, iseed, thresh, niunit, nounit, a, lda, h, ht, w, wt, wtmp, vs, ldvs, vs1, result, work, lwork, rwork, bwork, info)
ZDRVSX
subroutine zget24(comp, jtype, thresh, iseed, nounit, n, a, lda, h, ht, w, wt, wtmp, vs, ldvs, vs1, rcdein, rcdvin, nslct, islct, isrt, result, work, lwork, rwork, bwork, info)
ZGET24
subroutine zlatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
ZLATMR