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