00001 SUBROUTINE DDRVES( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
00002 $ NOUNIT, A, LDA, H, HT, WR, WI, WRT, WIT, VS,
00003 $ LDVS, RESULT, WORK, NWORK, IWORK, BWORK, INFO )
00004
00005
00006
00007
00008
00009
00010 INTEGER INFO, LDA, LDVS, NOUNIT, NSIZES, NTYPES, NWORK
00011 DOUBLE PRECISION THRESH
00012
00013
00014 LOGICAL BWORK( * ), DOTYPE( * )
00015 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
00016 DOUBLE PRECISION A( LDA, * ), H( LDA, * ), HT( LDA, * ),
00017 $ RESULT( 13 ), VS( LDVS, * ), WI( * ), WIT( * ),
00018 $ WORK( * ), WR( * ), WRT( * )
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292 DOUBLE PRECISION ZERO, ONE
00293 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
00294 INTEGER MAXTYP
00295 PARAMETER ( MAXTYP = 21 )
00296
00297
00298 LOGICAL BADNN
00299 CHARACTER SORT
00300 CHARACTER*3 PATH
00301 INTEGER I, IINFO, IMODE, ISORT, ITYPE, IWK, J, JCOL,
00302 $ JSIZE, JTYPE, KNTEIG, LWORK, MTYPES, N, NERRS,
00303 $ NFAIL, NMAX, NNWORK, NTEST, NTESTF, NTESTT,
00304 $ RSUB, SDIM
00305 DOUBLE PRECISION ANORM, COND, CONDS, OVFL, RTULP, RTULPI, TMP,
00306 $ ULP, ULPINV, UNFL
00307
00308
00309 CHARACTER ADUMMA( 1 )
00310 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), KCONDS( MAXTYP ),
00311 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
00312 $ KTYPE( MAXTYP )
00313 DOUBLE PRECISION RES( 2 )
00314
00315
00316 LOGICAL SELVAL( 20 )
00317 DOUBLE PRECISION SELWI( 20 ), SELWR( 20 )
00318
00319
00320 INTEGER SELDIM, SELOPT
00321
00322
00323 COMMON / SSLCT / SELOPT, SELDIM, SELVAL, SELWR, SELWI
00324
00325
00326 LOGICAL DSLECT
00327 DOUBLE PRECISION DLAMCH
00328 EXTERNAL DSLECT, DLAMCH
00329
00330
00331 EXTERNAL DGEES, DHST01, DLABAD, DLACPY, DLASET, DLASUM,
00332 $ DLATME, DLATMR, DLATMS, XERBLA
00333
00334
00335 INTRINSIC ABS, MAX, SIGN, SQRT
00336
00337
00338 DATA KTYPE / 1, 2, 3, 5*4, 4*6, 6*6, 3*9 /
00339 DATA KMAGN / 3*1, 1, 1, 1, 2, 3, 4*1, 1, 1, 1, 1, 2,
00340 $ 3, 1, 2, 3 /
00341 DATA KMODE / 3*0, 4, 3, 1, 4, 4, 4, 3, 1, 5, 4, 3,
00342 $ 1, 5, 5, 5, 4, 3, 1 /
00343 DATA KCONDS / 3*0, 5*0, 4*1, 6*2, 3*0 /
00344
00345
00346
00347 PATH( 1: 1 ) = 'Double precision'
00348 PATH( 2: 3 ) = 'ES'
00349
00350
00351
00352 NTESTT = 0
00353 NTESTF = 0
00354 INFO = 0
00355 SELOPT = 0
00356
00357
00358
00359 BADNN = .FALSE.
00360 NMAX = 0
00361 DO 10 J = 1, NSIZES
00362 NMAX = MAX( NMAX, NN( J ) )
00363 IF( NN( J ).LT.0 )
00364 $ BADNN = .TRUE.
00365 10 CONTINUE
00366
00367
00368
00369 IF( NSIZES.LT.0 ) THEN
00370 INFO = -1
00371 ELSE IF( BADNN ) THEN
00372 INFO = -2
00373 ELSE IF( NTYPES.LT.0 ) THEN
00374 INFO = -3
00375 ELSE IF( THRESH.LT.ZERO ) THEN
00376 INFO = -6
00377 ELSE IF( NOUNIT.LE.0 ) THEN
00378 INFO = -7
00379 ELSE IF( LDA.LT.1 .OR. LDA.LT.NMAX ) THEN
00380 INFO = -9
00381 ELSE IF( LDVS.LT.1 .OR. LDVS.LT.NMAX ) THEN
00382 INFO = -17
00383 ELSE IF( 5*NMAX+2*NMAX**2.GT.NWORK ) THEN
00384 INFO = -20
00385 END IF
00386
00387 IF( INFO.NE.0 ) THEN
00388 CALL XERBLA( 'DDRVES', -INFO )
00389 RETURN
00390 END IF
00391
00392
00393
00394 IF( NSIZES.EQ.0 .OR. NTYPES.EQ.0 )
00395 $ RETURN
00396
00397
00398
00399 UNFL = DLAMCH( 'Safe minimum' )
00400 OVFL = ONE / UNFL
00401 CALL DLABAD( UNFL, OVFL )
00402 ULP = DLAMCH( 'Precision' )
00403 ULPINV = ONE / ULP
00404 RTULP = SQRT( ULP )
00405 RTULPI = ONE / RTULP
00406
00407
00408
00409 NERRS = 0
00410
00411 DO 270 JSIZE = 1, NSIZES
00412 N = NN( JSIZE )
00413 MTYPES = MAXTYP
00414 IF( NSIZES.EQ.1 .AND. NTYPES.EQ.MAXTYP+1 )
00415 $ MTYPES = MTYPES + 1
00416
00417 DO 260 JTYPE = 1, MTYPES
00418 IF( .NOT.DOTYPE( JTYPE ) )
00419 $ GO TO 260
00420
00421
00422
00423 DO 20 J = 1, 4
00424 IOLDSD( J ) = ISEED( J )
00425 20 CONTINUE
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443 IF( MTYPES.GT.MAXTYP )
00444 $ GO TO 90
00445
00446 ITYPE = KTYPE( JTYPE )
00447 IMODE = KMODE( JTYPE )
00448
00449
00450
00451 GO TO ( 30, 40, 50 )KMAGN( JTYPE )
00452
00453 30 CONTINUE
00454 ANORM = ONE
00455 GO TO 60
00456
00457 40 CONTINUE
00458 ANORM = OVFL*ULP
00459 GO TO 60
00460
00461 50 CONTINUE
00462 ANORM = UNFL*ULPINV
00463 GO TO 60
00464
00465 60 CONTINUE
00466
00467 CALL DLASET( 'Full', LDA, N, ZERO, ZERO, A, LDA )
00468 IINFO = 0
00469 COND = ULPINV
00470
00471
00472
00473
00474
00475 IF( ITYPE.EQ.1 ) THEN
00476 IINFO = 0
00477
00478 ELSE IF( ITYPE.EQ.2 ) THEN
00479
00480
00481
00482 DO 70 JCOL = 1, N
00483 A( JCOL, JCOL ) = ANORM
00484 70 CONTINUE
00485
00486 ELSE IF( ITYPE.EQ.3 ) THEN
00487
00488
00489
00490 DO 80 JCOL = 1, N
00491 A( JCOL, JCOL ) = ANORM
00492 IF( JCOL.GT.1 )
00493 $ A( JCOL, JCOL-1 ) = ONE
00494 80 CONTINUE
00495
00496 ELSE IF( ITYPE.EQ.4 ) THEN
00497
00498
00499
00500 CALL DLATMS( N, N, 'S', ISEED, 'S', WORK, IMODE, COND,
00501 $ ANORM, 0, 0, 'N', A, LDA, WORK( N+1 ),
00502 $ IINFO )
00503
00504 ELSE IF( ITYPE.EQ.5 ) THEN
00505
00506
00507
00508 CALL DLATMS( N, N, 'S', ISEED, 'S', WORK, IMODE, COND,
00509 $ ANORM, N, N, 'N', A, LDA, WORK( N+1 ),
00510 $ IINFO )
00511
00512 ELSE IF( ITYPE.EQ.6 ) THEN
00513
00514
00515
00516 IF( KCONDS( JTYPE ).EQ.1 ) THEN
00517 CONDS = ONE
00518 ELSE IF( KCONDS( JTYPE ).EQ.2 ) THEN
00519 CONDS = RTULPI
00520 ELSE
00521 CONDS = ZERO
00522 END IF
00523
00524 ADUMMA( 1 ) = ' '
00525 CALL DLATME( N, 'S', ISEED, WORK, IMODE, COND, ONE,
00526 $ ADUMMA, 'T', 'T', 'T', WORK( N+1 ), 4,
00527 $ CONDS, N, N, ANORM, A, LDA, WORK( 2*N+1 ),
00528 $ IINFO )
00529
00530 ELSE IF( ITYPE.EQ.7 ) THEN
00531
00532
00533
00534 CALL DLATMR( N, N, 'S', ISEED, 'S', WORK, 6, ONE, ONE,
00535 $ 'T', 'N', WORK( N+1 ), 1, ONE,
00536 $ WORK( 2*N+1 ), 1, ONE, 'N', IDUMMA, 0, 0,
00537 $ ZERO, ANORM, 'NO', A, LDA, IWORK, IINFO )
00538
00539 ELSE IF( ITYPE.EQ.8 ) THEN
00540
00541
00542
00543 CALL DLATMR( N, N, 'S', ISEED, 'S', WORK, 6, ONE, ONE,
00544 $ 'T', 'N', WORK( N+1 ), 1, ONE,
00545 $ WORK( 2*N+1 ), 1, ONE, 'N', IDUMMA, N, N,
00546 $ ZERO, ANORM, 'NO', A, LDA, IWORK, IINFO )
00547
00548 ELSE IF( ITYPE.EQ.9 ) THEN
00549
00550
00551
00552 CALL DLATMR( N, N, 'S', ISEED, 'N', WORK, 6, ONE, ONE,
00553 $ 'T', 'N', WORK( N+1 ), 1, ONE,
00554 $ WORK( 2*N+1 ), 1, ONE, 'N', IDUMMA, N, N,
00555 $ ZERO, ANORM, 'NO', A, LDA, IWORK, IINFO )
00556 IF( N.GE.4 ) THEN
00557 CALL DLASET( 'Full', 2, N, ZERO, ZERO, A, LDA )
00558 CALL DLASET( 'Full', N-3, 1, ZERO, ZERO, A( 3, 1 ),
00559 $ LDA )
00560 CALL DLASET( 'Full', N-3, 2, ZERO, ZERO, A( 3, N-1 ),
00561 $ LDA )
00562 CALL DLASET( 'Full', 1, N, ZERO, ZERO, A( N, 1 ),
00563 $ LDA )
00564 END IF
00565
00566 ELSE IF( ITYPE.EQ.10 ) THEN
00567
00568
00569
00570 CALL DLATMR( N, N, 'S', ISEED, 'N', WORK, 6, ONE, ONE,
00571 $ 'T', 'N', WORK( N+1 ), 1, ONE,
00572 $ WORK( 2*N+1 ), 1, ONE, 'N', IDUMMA, N, 0,
00573 $ ZERO, ANORM, 'NO', A, LDA, IWORK, IINFO )
00574
00575 ELSE
00576
00577 IINFO = 1
00578 END IF
00579
00580 IF( IINFO.NE.0 ) THEN
00581 WRITE( NOUNIT, FMT = 9992 )'Generator', IINFO, N, JTYPE,
00582 $ IOLDSD
00583 INFO = ABS( IINFO )
00584 RETURN
00585 END IF
00586
00587 90 CONTINUE
00588
00589
00590
00591 DO 250 IWK = 1, 2
00592 IF( IWK.EQ.1 ) THEN
00593 NNWORK = 3*N
00594 ELSE
00595 NNWORK = 5*N + 2*N**2
00596 END IF
00597 NNWORK = MAX( NNWORK, 1 )
00598
00599
00600
00601 DO 100 J = 1, 13
00602 RESULT( J ) = -ONE
00603 100 CONTINUE
00604
00605
00606
00607 DO 210 ISORT = 0, 1
00608 IF( ISORT.EQ.0 ) THEN
00609 SORT = 'N'
00610 RSUB = 0
00611 ELSE
00612 SORT = 'S'
00613 RSUB = 6
00614 END IF
00615
00616
00617
00618 CALL DLACPY( 'F', N, N, A, LDA, H, LDA )
00619 CALL DGEES( 'V', SORT, DSLECT, N, H, LDA, SDIM, WR,
00620 $ WI, VS, LDVS, WORK, NNWORK, BWORK, IINFO )
00621 IF( IINFO.NE.0 .AND. IINFO.NE.N+2 ) THEN
00622 RESULT( 1+RSUB ) = ULPINV
00623 WRITE( NOUNIT, FMT = 9992 )'DGEES1', IINFO, N,
00624 $ JTYPE, IOLDSD
00625 INFO = ABS( IINFO )
00626 GO TO 220
00627 END IF
00628
00629
00630
00631 RESULT( 1+RSUB ) = ZERO
00632 DO 120 J = 1, N - 2
00633 DO 110 I = J + 2, N
00634 IF( H( I, J ).NE.ZERO )
00635 $ RESULT( 1+RSUB ) = ULPINV
00636 110 CONTINUE
00637 120 CONTINUE
00638 DO 130 I = 1, N - 2
00639 IF( H( I+1, I ).NE.ZERO .AND. H( I+2, I+1 ).NE.
00640 $ ZERO )RESULT( 1+RSUB ) = ULPINV
00641 130 CONTINUE
00642 DO 140 I = 1, N - 1
00643 IF( H( I+1, I ).NE.ZERO ) THEN
00644 IF( H( I, I ).NE.H( I+1, I+1 ) .OR.
00645 $ H( I, I+1 ).EQ.ZERO .OR.
00646 $ SIGN( ONE, H( I+1, I ) ).EQ.
00647 $ SIGN( ONE, H( I, I+1 ) ) )RESULT( 1+RSUB )
00648 $ = ULPINV
00649 END IF
00650 140 CONTINUE
00651
00652
00653
00654 LWORK = MAX( 1, 2*N*N )
00655 CALL DHST01( N, 1, N, A, LDA, H, LDA, VS, LDVS, WORK,
00656 $ LWORK, RES )
00657 RESULT( 2+RSUB ) = RES( 1 )
00658 RESULT( 3+RSUB ) = RES( 2 )
00659
00660
00661
00662 RESULT( 4+RSUB ) = ZERO
00663 DO 150 I = 1, N
00664 IF( H( I, I ).NE.WR( I ) )
00665 $ RESULT( 4+RSUB ) = ULPINV
00666 150 CONTINUE
00667 IF( N.GT.1 ) THEN
00668 IF( H( 2, 1 ).EQ.ZERO .AND. WI( 1 ).NE.ZERO )
00669 $ RESULT( 4+RSUB ) = ULPINV
00670 IF( H( N, N-1 ).EQ.ZERO .AND. WI( N ).NE.ZERO )
00671 $ RESULT( 4+RSUB ) = ULPINV
00672 END IF
00673 DO 160 I = 1, N - 1
00674 IF( H( I+1, I ).NE.ZERO ) THEN
00675 TMP = SQRT( ABS( H( I+1, I ) ) )*
00676 $ SQRT( ABS( H( I, I+1 ) ) )
00677 RESULT( 4+RSUB ) = MAX( RESULT( 4+RSUB ),
00678 $ ABS( WI( I )-TMP ) /
00679 $ MAX( ULP*TMP, UNFL ) )
00680 RESULT( 4+RSUB ) = MAX( RESULT( 4+RSUB ),
00681 $ ABS( WI( I+1 )+TMP ) /
00682 $ MAX( ULP*TMP, UNFL ) )
00683 ELSE IF( I.GT.1 ) THEN
00684 IF( H( I+1, I ).EQ.ZERO .AND. H( I, I-1 ).EQ.
00685 $ ZERO .AND. WI( I ).NE.ZERO )RESULT( 4+RSUB )
00686 $ = ULPINV
00687 END IF
00688 160 CONTINUE
00689
00690
00691
00692 CALL DLACPY( 'F', N, N, A, LDA, HT, LDA )
00693 CALL DGEES( 'N', SORT, DSLECT, N, HT, LDA, SDIM, WRT,
00694 $ WIT, VS, LDVS, WORK, NNWORK, BWORK,
00695 $ IINFO )
00696 IF( IINFO.NE.0 .AND. IINFO.NE.N+2 ) THEN
00697 RESULT( 5+RSUB ) = ULPINV
00698 WRITE( NOUNIT, FMT = 9992 )'DGEES2', IINFO, N,
00699 $ JTYPE, IOLDSD
00700 INFO = ABS( IINFO )
00701 GO TO 220
00702 END IF
00703
00704 RESULT( 5+RSUB ) = ZERO
00705 DO 180 J = 1, N
00706 DO 170 I = 1, N
00707 IF( H( I, J ).NE.HT( I, J ) )
00708 $ RESULT( 5+RSUB ) = ULPINV
00709 170 CONTINUE
00710 180 CONTINUE
00711
00712
00713
00714 RESULT( 6+RSUB ) = ZERO
00715 DO 190 I = 1, N
00716 IF( WR( I ).NE.WRT( I ) .OR. WI( I ).NE.WIT( I ) )
00717 $ RESULT( 6+RSUB ) = ULPINV
00718 190 CONTINUE
00719
00720
00721
00722 IF( ISORT.EQ.1 ) THEN
00723 RESULT( 13 ) = ZERO
00724 KNTEIG = 0
00725 DO 200 I = 1, N
00726 IF( DSLECT( WR( I ), WI( I ) ) .OR.
00727 $ DSLECT( WR( I ), -WI( I ) ) )
00728 $ KNTEIG = KNTEIG + 1
00729 IF( I.LT.N ) THEN
00730 IF( ( DSLECT( WR( I+1 ),
00731 $ WI( I+1 ) ) .OR. DSLECT( WR( I+1 ),
00732 $ -WI( I+1 ) ) ) .AND.
00733 $ ( .NOT.( DSLECT( WR( I ),
00734 $ WI( I ) ) .OR. DSLECT( WR( I ),
00735 $ -WI( I ) ) ) ) .AND. IINFO.NE.N+2 )
00736 $ RESULT( 13 ) = ULPINV
00737 END IF
00738 200 CONTINUE
00739 IF( SDIM.NE.KNTEIG ) THEN
00740 RESULT( 13 ) = ULPINV
00741 END IF
00742 END IF
00743
00744 210 CONTINUE
00745
00746
00747
00748 220 CONTINUE
00749
00750 NTEST = 0
00751 NFAIL = 0
00752 DO 230 J = 1, 13
00753 IF( RESULT( J ).GE.ZERO )
00754 $ NTEST = NTEST + 1
00755 IF( RESULT( J ).GE.THRESH )
00756 $ NFAIL = NFAIL + 1
00757 230 CONTINUE
00758
00759 IF( NFAIL.GT.0 )
00760 $ NTESTF = NTESTF + 1
00761 IF( NTESTF.EQ.1 ) THEN
00762 WRITE( NOUNIT, FMT = 9999 )PATH
00763 WRITE( NOUNIT, FMT = 9998 )
00764 WRITE( NOUNIT, FMT = 9997 )
00765 WRITE( NOUNIT, FMT = 9996 )
00766 WRITE( NOUNIT, FMT = 9995 )THRESH
00767 WRITE( NOUNIT, FMT = 9994 )
00768 NTESTF = 2
00769 END IF
00770
00771 DO 240 J = 1, 13
00772 IF( RESULT( J ).GE.THRESH ) THEN
00773 WRITE( NOUNIT, FMT = 9993 )N, IWK, IOLDSD, JTYPE,
00774 $ J, RESULT( J )
00775 END IF
00776 240 CONTINUE
00777
00778 NERRS = NERRS + NFAIL
00779 NTESTT = NTESTT + NTEST
00780
00781 250 CONTINUE
00782 260 CONTINUE
00783 270 CONTINUE
00784
00785
00786
00787 CALL DLASUM( PATH, NOUNIT, NERRS, NTESTT )
00788
00789 9999 FORMAT( / 1X, A3, ' -- Real Schur Form Decomposition Driver',
00790 $ / ' Matrix types (see DDRVES for details): ' )
00791
00792 9998 FORMAT( / ' Special Matrices:', / ' 1=Zero matrix. ',
00793 $ ' ', ' 5=Diagonal: geometr. spaced entries.',
00794 $ / ' 2=Identity matrix. ', ' 6=Diagona',
00795 $ 'l: clustered entries.', / ' 3=Transposed Jordan block. ',
00796 $ ' ', ' 7=Diagonal: large, evenly spaced.', / ' ',
00797 $ '4=Diagonal: evenly spaced entries. ', ' 8=Diagonal: s',
00798 $ 'mall, evenly spaced.' )
00799 9997 FORMAT( ' Dense, Non-Symmetric Matrices:', / ' 9=Well-cond., ev',
00800 $ 'enly spaced eigenvals.', ' 14=Ill-cond., geomet. spaced e',
00801 $ 'igenals.', / ' 10=Well-cond., geom. spaced eigenvals. ',
00802 $ ' 15=Ill-conditioned, clustered e.vals.', / ' 11=Well-cond',
00803 $ 'itioned, clustered e.vals. ', ' 16=Ill-cond., random comp',
00804 $ 'lex ', / ' 12=Well-cond., random complex ', 6X, ' ',
00805 $ ' 17=Ill-cond., large rand. complx ', / ' 13=Ill-condi',
00806 $ 'tioned, evenly spaced. ', ' 18=Ill-cond., small rand.',
00807 $ ' complx ' )
00808 9996 FORMAT( ' 19=Matrix with random O(1) entries. ', ' 21=Matrix ',
00809 $ 'with small random entries.', / ' 20=Matrix with large ran',
00810 $ 'dom entries. ', / )
00811 9995 FORMAT( ' Tests performed with test threshold =', F8.2,
00812 $ / ' ( A denotes A on input and T denotes A on output)',
00813 $ / / ' 1 = 0 if T in Schur form (no sort), ',
00814 $ ' 1/ulp otherwise', /
00815 $ ' 2 = | A - VS T transpose(VS) | / ( n |A| ulp ) (no sort)',
00816 $ / ' 3 = | I - VS transpose(VS) | / ( n ulp ) (no sort) ', /
00817 $ ' 4 = 0 if WR+sqrt(-1)*WI are eigenvalues of T (no sort),',
00818 $ ' 1/ulp otherwise', /
00819 $ ' 5 = 0 if T same no matter if VS computed (no sort),',
00820 $ ' 1/ulp otherwise', /
00821 $ ' 6 = 0 if WR, WI same no matter if VS computed (no sort)',
00822 $ ', 1/ulp otherwise' )
00823 9994 FORMAT( ' 7 = 0 if T in Schur form (sort), ', ' 1/ulp otherwise',
00824 $ / ' 8 = | A - VS T transpose(VS) | / ( n |A| ulp ) (sort)',
00825 $ / ' 9 = | I - VS transpose(VS) | / ( n ulp ) (sort) ',
00826 $ / ' 10 = 0 if WR+sqrt(-1)*WI are eigenvalues of T (sort),',
00827 $ ' 1/ulp otherwise', /
00828 $ ' 11 = 0 if T same no matter if VS computed (sort),',
00829 $ ' 1/ulp otherwise', /
00830 $ ' 12 = 0 if WR, WI same no matter if VS computed (sort),',
00831 $ ' 1/ulp otherwise', /
00832 $ ' 13 = 0 if sorting succesful, 1/ulp otherwise', / )
00833 9993 FORMAT( ' N=', I5, ', IWK=', I2, ', seed=', 4( I4, ',' ),
00834 $ ' type ', I2, ', test(', I2, ')=', G10.3 )
00835 9992 FORMAT( ' DDRVES: ', A, ' returned INFO=', I6, '.', / 9X, 'N=',
00836 $ I6, ', JTYPE=', I6, ', ISEED=(', 3( I5, ',' ), I5, ')' )
00837
00838 RETURN
00839
00840
00841
00842 END