00001 SUBROUTINE CDRGES( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
00002 $ NOUNIT, A, LDA, B, S, T, Q, LDQ, Z, ALPHA,
00003 $ BETA, WORK, LWORK, RWORK, RESULT, BWORK, INFO )
00004
00005
00006
00007
00008
00009
00010 INTEGER INFO, LDA, LDQ, LWORK, NOUNIT, NSIZES, NTYPES
00011 REAL THRESH
00012
00013
00014 LOGICAL BWORK( * ), DOTYPE( * )
00015 INTEGER ISEED( 4 ), NN( * )
00016 REAL RESULT( 13 ), RWORK( * )
00017 COMPLEX A( LDA, * ), ALPHA( * ), B( LDA, * ),
00018 $ BETA( * ), Q( LDQ, * ), S( LDA, * ),
00019 $ T( LDA, * ), WORK( * ), Z( LDQ, * )
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 REAL ZERO, ONE
00290 PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
00291 COMPLEX CZERO, CONE
00292 PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ),
00293 $ CONE = ( 1.0E+0, 0.0E+0 ) )
00294 INTEGER MAXTYP
00295 PARAMETER ( MAXTYP = 26 )
00296
00297
00298 LOGICAL BADNN, ILABAD
00299 CHARACTER SORT
00300 INTEGER I, IADD, IINFO, IN, ISORT, J, JC, JR, JSIZE,
00301 $ JTYPE, KNTEIG, MAXWRK, MINWRK, MTYPES, N, N1,
00302 $ NB, NERRS, NMATS, NMAX, NTEST, NTESTT, RSUB,
00303 $ SDIM
00304 REAL SAFMAX, SAFMIN, TEMP1, TEMP2, ULP, ULPINV
00305 COMPLEX CTEMP, X
00306
00307
00308 LOGICAL LASIGN( MAXTYP ), LBSIGN( MAXTYP )
00309 INTEGER IOLDSD( 4 ), KADD( 6 ), KAMAGN( MAXTYP ),
00310 $ KATYPE( MAXTYP ), KAZERO( MAXTYP ),
00311 $ KBMAGN( MAXTYP ), KBTYPE( MAXTYP ),
00312 $ KBZERO( MAXTYP ), KCLASS( MAXTYP ),
00313 $ KTRIAN( MAXTYP ), KZ1( 6 ), KZ2( 6 )
00314 REAL RMAGN( 0: 3 )
00315
00316
00317 LOGICAL CLCTES
00318 INTEGER ILAENV
00319 REAL SLAMCH
00320 COMPLEX CLARND
00321 EXTERNAL CLCTES, ILAENV, SLAMCH, CLARND
00322
00323
00324 EXTERNAL ALASVM, CGET51, CGET54, CGGES, CLACPY, CLARFG,
00325 $ CLASET, CLATM4, CUNM2R, SLABAD, XERBLA
00326
00327
00328 INTRINSIC ABS, AIMAG, CONJG, MAX, MIN, REAL, SIGN
00329
00330
00331 REAL ABS1
00332
00333
00334 ABS1( X ) = ABS( REAL( X ) ) + ABS( AIMAG( X ) )
00335
00336
00337 DATA KCLASS / 15*1, 10*2, 1*3 /
00338 DATA KZ1 / 0, 1, 2, 1, 3, 3 /
00339 DATA KZ2 / 0, 0, 1, 2, 1, 1 /
00340 DATA KADD / 0, 0, 0, 0, 3, 2 /
00341 DATA KATYPE / 0, 1, 0, 1, 2, 3, 4, 1, 4, 4, 1, 1, 4,
00342 $ 4, 4, 2, 4, 5, 8, 7, 9, 4*4, 0 /
00343 DATA KBTYPE / 0, 0, 1, 1, 2, -3, 1, 4, 1, 1, 4, 4,
00344 $ 1, 1, -4, 2, -4, 8*8, 0 /
00345 DATA KAZERO / 6*1, 2, 1, 2*2, 2*1, 2*2, 3, 1, 3,
00346 $ 4*5, 4*3, 1 /
00347 DATA KBZERO / 6*1, 1, 2, 2*1, 2*2, 2*1, 4, 1, 4,
00348 $ 4*6, 4*4, 1 /
00349 DATA KAMAGN / 8*1, 2, 3, 2, 3, 2, 3, 7*1, 2, 3, 3,
00350 $ 2, 1 /
00351 DATA KBMAGN / 8*1, 3, 2, 3, 2, 2, 3, 7*1, 3, 2, 3,
00352 $ 2, 1 /
00353 DATA KTRIAN / 16*0, 10*1 /
00354 DATA LASIGN / 6*.FALSE., .TRUE., .FALSE., 2*.TRUE.,
00355 $ 2*.FALSE., 3*.TRUE., .FALSE., .TRUE.,
00356 $ 3*.FALSE., 5*.TRUE., .FALSE. /
00357 DATA LBSIGN / 7*.FALSE., .TRUE., 2*.FALSE.,
00358 $ 2*.TRUE., 2*.FALSE., .TRUE., .FALSE., .TRUE.,
00359 $ 9*.FALSE. /
00360
00361
00362
00363
00364
00365 INFO = 0
00366
00367 BADNN = .FALSE.
00368 NMAX = 1
00369 DO 10 J = 1, NSIZES
00370 NMAX = MAX( NMAX, NN( J ) )
00371 IF( NN( J ).LT.0 )
00372 $ BADNN = .TRUE.
00373 10 CONTINUE
00374
00375 IF( NSIZES.LT.0 ) THEN
00376 INFO = -1
00377 ELSE IF( BADNN ) THEN
00378 INFO = -2
00379 ELSE IF( NTYPES.LT.0 ) THEN
00380 INFO = -3
00381 ELSE IF( THRESH.LT.ZERO ) THEN
00382 INFO = -6
00383 ELSE IF( LDA.LE.1 .OR. LDA.LT.NMAX ) THEN
00384 INFO = -9
00385 ELSE IF( LDQ.LE.1 .OR. LDQ.LT.NMAX ) THEN
00386 INFO = -14
00387 END IF
00388
00389
00390
00391
00392
00393
00394
00395
00396 MINWRK = 1
00397 IF( INFO.EQ.0 .AND. LWORK.GE.1 ) THEN
00398 MINWRK = 3*NMAX*NMAX
00399 NB = MAX( 1, ILAENV( 1, 'CGEQRF', ' ', NMAX, NMAX, -1, -1 ),
00400 $ ILAENV( 1, 'CUNMQR', 'LC', NMAX, NMAX, NMAX, -1 ),
00401 $ ILAENV( 1, 'CUNGQR', ' ', NMAX, NMAX, NMAX, -1 ) )
00402 MAXWRK = MAX( NMAX+NMAX*NB, 3*NMAX*NMAX )
00403 WORK( 1 ) = MAXWRK
00404 END IF
00405
00406 IF( LWORK.LT.MINWRK )
00407 $ INFO = -19
00408
00409 IF( INFO.NE.0 ) THEN
00410 CALL XERBLA( 'CDRGES', -INFO )
00411 RETURN
00412 END IF
00413
00414
00415
00416 IF( NSIZES.EQ.0 .OR. NTYPES.EQ.0 )
00417 $ RETURN
00418
00419 ULP = SLAMCH( 'Precision' )
00420 SAFMIN = SLAMCH( 'Safe minimum' )
00421 SAFMIN = SAFMIN / ULP
00422 SAFMAX = ONE / SAFMIN
00423 CALL SLABAD( SAFMIN, SAFMAX )
00424 ULPINV = ONE / ULP
00425
00426
00427
00428 RMAGN( 0 ) = ZERO
00429 RMAGN( 1 ) = ONE
00430
00431
00432
00433 NTESTT = 0
00434 NERRS = 0
00435 NMATS = 0
00436
00437 DO 190 JSIZE = 1, NSIZES
00438 N = NN( JSIZE )
00439 N1 = MAX( 1, N )
00440 RMAGN( 2 ) = SAFMAX*ULP / REAL( N1 )
00441 RMAGN( 3 ) = SAFMIN*ULPINV*REAL( N1 )
00442
00443 IF( NSIZES.NE.1 ) THEN
00444 MTYPES = MIN( MAXTYP, NTYPES )
00445 ELSE
00446 MTYPES = MIN( MAXTYP+1, NTYPES )
00447 END IF
00448
00449
00450
00451 DO 180 JTYPE = 1, MTYPES
00452 IF( .NOT.DOTYPE( JTYPE ) )
00453 $ GO TO 180
00454 NMATS = NMATS + 1
00455 NTEST = 0
00456
00457
00458
00459 DO 20 J = 1, 4
00460 IOLDSD( J ) = ISEED( J )
00461 20 CONTINUE
00462
00463
00464
00465 DO 30 J = 1, 13
00466 RESULT( J ) = ZERO
00467 30 CONTINUE
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490 IF( MTYPES.GT.MAXTYP )
00491 $ GO TO 110
00492 IINFO = 0
00493 IF( KCLASS( JTYPE ).LT.3 ) THEN
00494
00495
00496
00497 IF( ABS( KATYPE( JTYPE ) ).EQ.3 ) THEN
00498 IN = 2*( ( N-1 ) / 2 ) + 1
00499 IF( IN.NE.N )
00500 $ CALL CLASET( 'Full', N, N, CZERO, CZERO, A, LDA )
00501 ELSE
00502 IN = N
00503 END IF
00504 CALL CLATM4( KATYPE( JTYPE ), IN, KZ1( KAZERO( JTYPE ) ),
00505 $ KZ2( KAZERO( JTYPE ) ), LASIGN( JTYPE ),
00506 $ RMAGN( KAMAGN( JTYPE ) ), ULP,
00507 $ RMAGN( KTRIAN( JTYPE )*KAMAGN( JTYPE ) ), 2,
00508 $ ISEED, A, LDA )
00509 IADD = KADD( KAZERO( JTYPE ) )
00510 IF( IADD.GT.0 .AND. IADD.LE.N )
00511 $ A( IADD, IADD ) = RMAGN( KAMAGN( JTYPE ) )
00512
00513
00514
00515 IF( ABS( KBTYPE( JTYPE ) ).EQ.3 ) THEN
00516 IN = 2*( ( N-1 ) / 2 ) + 1
00517 IF( IN.NE.N )
00518 $ CALL CLASET( 'Full', N, N, CZERO, CZERO, B, LDA )
00519 ELSE
00520 IN = N
00521 END IF
00522 CALL CLATM4( KBTYPE( JTYPE ), IN, KZ1( KBZERO( JTYPE ) ),
00523 $ KZ2( KBZERO( JTYPE ) ), LBSIGN( JTYPE ),
00524 $ RMAGN( KBMAGN( JTYPE ) ), ONE,
00525 $ RMAGN( KTRIAN( JTYPE )*KBMAGN( JTYPE ) ), 2,
00526 $ ISEED, B, LDA )
00527 IADD = KADD( KBZERO( JTYPE ) )
00528 IF( IADD.NE.0 .AND. IADD.LE.N )
00529 $ B( IADD, IADD ) = RMAGN( KBMAGN( JTYPE ) )
00530
00531 IF( KCLASS( JTYPE ).EQ.2 .AND. N.GT.0 ) THEN
00532
00533
00534
00535
00536
00537
00538 DO 50 JC = 1, N - 1
00539 DO 40 JR = JC, N
00540 Q( JR, JC ) = CLARND( 3, ISEED )
00541 Z( JR, JC ) = CLARND( 3, ISEED )
00542 40 CONTINUE
00543 CALL CLARFG( N+1-JC, Q( JC, JC ), Q( JC+1, JC ), 1,
00544 $ WORK( JC ) )
00545 WORK( 2*N+JC ) = SIGN( ONE, REAL( Q( JC, JC ) ) )
00546 Q( JC, JC ) = CONE
00547 CALL CLARFG( N+1-JC, Z( JC, JC ), Z( JC+1, JC ), 1,
00548 $ WORK( N+JC ) )
00549 WORK( 3*N+JC ) = SIGN( ONE, REAL( Z( JC, JC ) ) )
00550 Z( JC, JC ) = CONE
00551 50 CONTINUE
00552 CTEMP = CLARND( 3, ISEED )
00553 Q( N, N ) = CONE
00554 WORK( N ) = CZERO
00555 WORK( 3*N ) = CTEMP / ABS( CTEMP )
00556 CTEMP = CLARND( 3, ISEED )
00557 Z( N, N ) = CONE
00558 WORK( 2*N ) = CZERO
00559 WORK( 4*N ) = CTEMP / ABS( CTEMP )
00560
00561
00562
00563 DO 70 JC = 1, N
00564 DO 60 JR = 1, N
00565 A( JR, JC ) = WORK( 2*N+JR )*
00566 $ CONJG( WORK( 3*N+JC ) )*
00567 $ A( JR, JC )
00568 B( JR, JC ) = WORK( 2*N+JR )*
00569 $ CONJG( WORK( 3*N+JC ) )*
00570 $ B( JR, JC )
00571 60 CONTINUE
00572 70 CONTINUE
00573 CALL CUNM2R( 'L', 'N', N, N, N-1, Q, LDQ, WORK, A,
00574 $ LDA, WORK( 2*N+1 ), IINFO )
00575 IF( IINFO.NE.0 )
00576 $ GO TO 100
00577 CALL CUNM2R( 'R', 'C', N, N, N-1, Z, LDQ, WORK( N+1 ),
00578 $ A, LDA, WORK( 2*N+1 ), IINFO )
00579 IF( IINFO.NE.0 )
00580 $ GO TO 100
00581 CALL CUNM2R( 'L', 'N', N, N, N-1, Q, LDQ, WORK, B,
00582 $ LDA, WORK( 2*N+1 ), IINFO )
00583 IF( IINFO.NE.0 )
00584 $ GO TO 100
00585 CALL CUNM2R( 'R', 'C', N, N, N-1, Z, LDQ, WORK( N+1 ),
00586 $ B, LDA, WORK( 2*N+1 ), IINFO )
00587 IF( IINFO.NE.0 )
00588 $ GO TO 100
00589 END IF
00590 ELSE
00591
00592
00593
00594 DO 90 JC = 1, N
00595 DO 80 JR = 1, N
00596 A( JR, JC ) = RMAGN( KAMAGN( JTYPE ) )*
00597 $ CLARND( 4, ISEED )
00598 B( JR, JC ) = RMAGN( KBMAGN( JTYPE ) )*
00599 $ CLARND( 4, ISEED )
00600 80 CONTINUE
00601 90 CONTINUE
00602 END IF
00603
00604 100 CONTINUE
00605
00606 IF( IINFO.NE.0 ) THEN
00607 WRITE( NOUNIT, FMT = 9999 )'Generator', IINFO, N, JTYPE,
00608 $ IOLDSD
00609 INFO = ABS( IINFO )
00610 RETURN
00611 END IF
00612
00613 110 CONTINUE
00614
00615 DO 120 I = 1, 13
00616 RESULT( I ) = -ONE
00617 120 CONTINUE
00618
00619
00620
00621 DO 150 ISORT = 0, 1
00622 IF( ISORT.EQ.0 ) THEN
00623 SORT = 'N'
00624 RSUB = 0
00625 ELSE
00626 SORT = 'S'
00627 RSUB = 5
00628 END IF
00629
00630
00631
00632 CALL CLACPY( 'Full', N, N, A, LDA, S, LDA )
00633 CALL CLACPY( 'Full', N, N, B, LDA, T, LDA )
00634 NTEST = 1 + RSUB + ISORT
00635 RESULT( 1+RSUB+ISORT ) = ULPINV
00636 CALL CGGES( 'V', 'V', SORT, CLCTES, N, S, LDA, T, LDA,
00637 $ SDIM, ALPHA, BETA, Q, LDQ, Z, LDQ, WORK,
00638 $ LWORK, RWORK, BWORK, IINFO )
00639 IF( IINFO.NE.0 .AND. IINFO.NE.N+2 ) THEN
00640 RESULT( 1+RSUB+ISORT ) = ULPINV
00641 WRITE( NOUNIT, FMT = 9999 )'CGGES', IINFO, N, JTYPE,
00642 $ IOLDSD
00643 INFO = ABS( IINFO )
00644 GO TO 160
00645 END IF
00646
00647 NTEST = 4 + RSUB
00648
00649
00650
00651 IF( ISORT.EQ.0 ) THEN
00652 CALL CGET51( 1, N, A, LDA, S, LDA, Q, LDQ, Z, LDQ,
00653 $ WORK, RWORK, RESULT( 1 ) )
00654 CALL CGET51( 1, N, B, LDA, T, LDA, Q, LDQ, Z, LDQ,
00655 $ WORK, RWORK, RESULT( 2 ) )
00656 ELSE
00657 CALL CGET54( N, A, LDA, B, LDA, S, LDA, T, LDA, Q,
00658 $ LDQ, Z, LDQ, WORK, RESULT( 2+RSUB ) )
00659 END IF
00660
00661 CALL CGET51( 3, N, B, LDA, T, LDA, Q, LDQ, Q, LDQ, WORK,
00662 $ RWORK, RESULT( 3+RSUB ) )
00663 CALL CGET51( 3, N, B, LDA, T, LDA, Z, LDQ, Z, LDQ, WORK,
00664 $ RWORK, RESULT( 4+RSUB ) )
00665
00666
00667
00668
00669
00670 NTEST = 6 + RSUB
00671 TEMP1 = ZERO
00672
00673 DO 130 J = 1, N
00674 ILABAD = .FALSE.
00675 TEMP2 = ( ABS1( ALPHA( J )-S( J, J ) ) /
00676 $ MAX( SAFMIN, ABS1( ALPHA( J ) ), ABS1( S( J,
00677 $ J ) ) )+ABS1( BETA( J )-T( J, J ) ) /
00678 $ MAX( SAFMIN, ABS1( BETA( J ) ), ABS1( T( J,
00679 $ J ) ) ) ) / ULP
00680
00681 IF( J.LT.N ) THEN
00682 IF( S( J+1, J ).NE.ZERO ) THEN
00683 ILABAD = .TRUE.
00684 RESULT( 5+RSUB ) = ULPINV
00685 END IF
00686 END IF
00687 IF( J.GT.1 ) THEN
00688 IF( S( J, J-1 ).NE.ZERO ) THEN
00689 ILABAD = .TRUE.
00690 RESULT( 5+RSUB ) = ULPINV
00691 END IF
00692 END IF
00693 TEMP1 = MAX( TEMP1, TEMP2 )
00694 IF( ILABAD ) THEN
00695 WRITE( NOUNIT, FMT = 9998 )J, N, JTYPE, IOLDSD
00696 END IF
00697 130 CONTINUE
00698 RESULT( 6+RSUB ) = TEMP1
00699
00700 IF( ISORT.GE.1 ) THEN
00701
00702
00703
00704 NTEST = 12
00705 RESULT( 12 ) = ZERO
00706 KNTEIG = 0
00707 DO 140 I = 1, N
00708 IF( CLCTES( ALPHA( I ), BETA( I ) ) )
00709 $ KNTEIG = KNTEIG + 1
00710 140 CONTINUE
00711 IF( SDIM.NE.KNTEIG )
00712 $ RESULT( 13 ) = ULPINV
00713 END IF
00714
00715 150 CONTINUE
00716
00717
00718
00719 160 CONTINUE
00720
00721 NTESTT = NTESTT + NTEST
00722
00723
00724
00725 DO 170 JR = 1, NTEST
00726 IF( RESULT( JR ).GE.THRESH ) THEN
00727
00728
00729
00730
00731 IF( NERRS.EQ.0 ) THEN
00732 WRITE( NOUNIT, FMT = 9997 )'CGS'
00733
00734
00735
00736 WRITE( NOUNIT, FMT = 9996 )
00737 WRITE( NOUNIT, FMT = 9995 )
00738 WRITE( NOUNIT, FMT = 9994 )'Unitary'
00739
00740
00741
00742 WRITE( NOUNIT, FMT = 9993 )'unitary', '''',
00743 $ 'transpose', ( '''', J = 1, 8 )
00744
00745 END IF
00746 NERRS = NERRS + 1
00747 IF( RESULT( JR ).LT.10000.0 ) THEN
00748 WRITE( NOUNIT, FMT = 9992 )N, JTYPE, IOLDSD, JR,
00749 $ RESULT( JR )
00750 ELSE
00751 WRITE( NOUNIT, FMT = 9991 )N, JTYPE, IOLDSD, JR,
00752 $ RESULT( JR )
00753 END IF
00754 END IF
00755 170 CONTINUE
00756
00757 180 CONTINUE
00758 190 CONTINUE
00759
00760
00761
00762 CALL ALASVM( 'CGS', NOUNIT, NERRS, NTESTT, 0 )
00763
00764 WORK( 1 ) = MAXWRK
00765
00766 RETURN
00767
00768 9999 FORMAT( ' CDRGES: ', A, ' returned INFO=', I6, '.', / 9X, 'N=',
00769 $ I6, ', JTYPE=', I6, ', ISEED=(', 4( I4, ',' ), I5, ')' )
00770
00771 9998 FORMAT( ' CDRGES: S not in Schur form at eigenvalue ', I6, '.',
00772 $ / 9X, 'N=', I6, ', JTYPE=', I6, ', ISEED=(', 3( I5, ',' ),
00773 $ I5, ')' )
00774
00775 9997 FORMAT( / 1X, A3, ' -- Complex Generalized Schur from problem ',
00776 $ 'driver' )
00777
00778 9996 FORMAT( ' Matrix types (see CDRGES for details): ' )
00779
00780 9995 FORMAT( ' Special Matrices:', 23X,
00781 $ '(J''=transposed Jordan block)',
00782 $ / ' 1=(0,0) 2=(I,0) 3=(0,I) 4=(I,I) 5=(J'',J'') ',
00783 $ '6=(diag(J'',I), diag(I,J''))', / ' Diagonal Matrices: ( ',
00784 $ 'D=diag(0,1,2,...) )', / ' 7=(D,I) 9=(large*D, small*I',
00785 $ ') 11=(large*I, small*D) 13=(large*D, large*I)', /
00786 $ ' 8=(I,D) 10=(small*D, large*I) 12=(small*I, large*D) ',
00787 $ ' 14=(small*D, small*I)', / ' 15=(D, reversed D)' )
00788 9994 FORMAT( ' Matrices Rotated by Random ', A, ' Matrices U, V:',
00789 $ / ' 16=Transposed Jordan Blocks 19=geometric ',
00790 $ 'alpha, beta=0,1', / ' 17=arithm. alpha&beta ',
00791 $ ' 20=arithmetic alpha, beta=0,1', / ' 18=clustered ',
00792 $ 'alpha, beta=0,1 21=random alpha, beta=0,1',
00793 $ / ' Large & Small Matrices:', / ' 22=(large, small) ',
00794 $ '23=(small,large) 24=(small,small) 25=(large,large)',
00795 $ / ' 26=random O(1) matrices.' )
00796
00797 9993 FORMAT( / ' Tests performed: (S is Schur, T is triangular, ',
00798 $ 'Q and Z are ', A, ',', / 19X,
00799 $ 'l and r are the appropriate left and right', / 19X,
00800 $ 'eigenvectors, resp., a is alpha, b is beta, and', / 19X, A,
00801 $ ' means ', A, '.)', / ' Without ordering: ',
00802 $ / ' 1 = | A - Q S Z', A,
00803 $ ' | / ( |A| n ulp ) 2 = | B - Q T Z', A,
00804 $ ' | / ( |B| n ulp )', / ' 3 = | I - QQ', A,
00805 $ ' | / ( n ulp ) 4 = | I - ZZ', A,
00806 $ ' | / ( n ulp )', / ' 5 = A is in Schur form S',
00807 $ / ' 6 = difference between (alpha,beta)',
00808 $ ' and diagonals of (S,T)', / ' With ordering: ',
00809 $ / ' 7 = | (A,B) - Q (S,T) Z', A, ' | / ( |(A,B)| n ulp )',
00810 $ / ' 8 = | I - QQ', A,
00811 $ ' | / ( n ulp ) 9 = | I - ZZ', A,
00812 $ ' | / ( n ulp )', / ' 10 = A is in Schur form S',
00813 $ / ' 11 = difference between (alpha,beta) and diagonals',
00814 $ ' of (S,T)', / ' 12 = SDIM is the correct number of ',
00815 $ 'selected eigenvalues', / )
00816 9992 FORMAT( ' Matrix order=', I5, ', type=', I2, ', seed=',
00817 $ 4( I4, ',' ), ' result ', I2, ' is', 0P, F8.2 )
00818 9991 FORMAT( ' Matrix order=', I5, ', type=', I2, ', seed=',
00819 $ 4( I4, ',' ), ' result ', I2, ' is', 1P, E10.3 )
00820
00821
00822
00823 END