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