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