431 SUBROUTINE cdrvsx( 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,
441 INTEGER INFO, LDA, LDVS, LWORK, NIUNIT, NOUNIT, NSIZES,
446 LOGICAL BWORK( * ), DOTYPE( * )
447 INTEGER ISEED( 4 ), NN( * )
448 REAL RESULT( 17 ), RWORK( * )
449 COMPLEX A( LDA, * ), H( LDA, * ), HT( LDA, * ),
450 $ vs( ldvs, * ), vs1( ldvs, * ), w( * ),
451 $ work( * ), wt( * ), wtmp( * )
458 PARAMETER ( CZERO = ( 0.0e+0, 0.0e+0 ) )
460 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
462 parameter( zero = 0.0e+0, one = 1.0e+0 )
464 parameter( maxtyp = 21 )
469 INTEGER I, IINFO, IMODE, ISRT, ITYPE, IWK, J, ,
470 $ jsize, jtype, mtypes, n, nerrs, nfail,
471 $ nmax, nnwork, nslct, ntest, ntestf, ntestt
472 REAL , COND, CONDS, OVFL, RCDEIN, RCDVIN,
473 $ RTULP, RTULPI, ULP, ULPINV, UNFL
476 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISLCT( 20 ),
477 $ KCONDS( MAXTYP ), KMAGN( MAXTYP ),
478 $ KMODE( MAXTYP ), KTYPE( MAXTYP )
482 REAL SELWI( 20 ), ( 20 )
485 INTEGER SELDIM, SELOPT
488 COMMON / sslct / selopt, seldim, selval, selwr, selwi
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,
507 DATA kconds / 3*0, 5*0, 4*1, 6*2, 3*0 /
511 path( 1: 1 ) =
'Complex precision'
529 nmax =
max( nmax, nn( j ) )
538 ELSE IF( badnn )
THEN
540 ELSEIF( ntypes.LT.0 )
THEN
542 ELSE IF( thresh.LT.zero )
THEN
544 ELSE IF( niunit.LE.0 )
THEN
546 ELSE IF( nounit.LE.0 )
THEN
548 ELSE IF( lda.LT.1 .OR. lda.LT.nmax )
THEN
550 ELSE IF( ldvs.LT.1 .OR. ldvs.LT.nmax
THEN
552 ELSE IF(
max( 3*nmax, 2*nmax**2 ).GT.lwork )
THEN
563.EQ..OR..EQ.
IF( NSIZES0 NTYPES0 )
568 UNFL = SLAMCH( 'safe minimum
' )
570 CALL SLABAD( UNFL, OVFL )
571 ULP = SLAMCH( '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 CLASET( '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 CLATMS( 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 CLATMS( 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 CLATME( 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 CLATMR( 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 CLATMR( 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 CLATMR( 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 CLASET( 'full
', 2, N, CZERO, CZERO, A, LDA )
728 CALL CLASET( 'full
', N-3, 1, CZERO, CZERO, A( 3, 1 ),
730 CALL CLASET( 'full
', N-3, 2, CZERO, CZERO,
732 CALL CLASET( 'full
', 1, N, CZERO, CZERO, A( N, 1 ),
736.EQ.
ELSE IF( ITYPE10 ) THEN
740 CALL CLATMR( 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 CGET24( .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 CGET24( .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 SLASUM( PATH, NOUNIT, NERRS, NTESTT )
871 9999 FORMAT( / 1X, A3, ' --
Complex Schur Form Decomposition Expert
',
872 $ 'Driver
', / ' Matrix types (see CDRVSX 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( ' cdrvsx:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
926 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
subroutine cdrvsx(nsizes, nn, ntypes, dotype, iseed, thresh, niunit, nounit, a, lda, h, ht, w, wt, wtmp, vs, ldvs, vs1, result, work, lwork, rwork, bwork, info)
CDRVSX
subroutine cget24(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)
CGET24
subroutine clatme(n, dist, iseed, d, mode, cond, dmax, rsign, upper, sim, ds, modes, conds, kl, ku, anorm, a, lda, work, info)
CLATME
subroutine clatmr(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)
CLATMR