00001 SUBROUTINE CDRVST( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
00002 $ NOUNIT, A, LDA, D1, D2, D3, WA1, WA2, WA3, U,
00003 $ LDU, V, TAU, Z, WORK, LWORK, RWORK, LRWORK,
00004 $ IWORK, LIWORK, RESULT, INFO )
00005
00006
00007
00008
00009
00010
00011 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
00012 $ NSIZES, NTYPES
00013 REAL THRESH
00014
00015
00016 LOGICAL DOTYPE( * )
00017 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
00018 REAL D1( * ), D2( * ), D3( * ), RESULT( * ),
00019 $ RWORK( * ), WA1( * ), WA2( * ), WA3( * )
00020 COMPLEX A( LDA, * ), TAU( * ), U( LDU, * ),
00021 $ V( LDU, * ), WORK( * ), Z( LDU, * )
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
00310
00311
00312
00313
00314
00315 REAL ZERO, ONE, TWO, TEN
00316 PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0, TWO = 2.0E+0,
00317 $ TEN = 10.0E+0 )
00318 REAL HALF
00319 PARAMETER ( HALF = ONE / TWO )
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 = 18 )
00325
00326
00327 LOGICAL BADNN
00328 CHARACTER UPLO
00329 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDWRK, INDX,
00330 $ IROW, ITEMP, ITYPE, IU, IUPLO, J, J1, J2, JCOL,
00331 $ JSIZE, JTYPE, KD, LGN, LIWEDC, LRWEDC, LWEDC,
00332 $ M, M2, M3, MTYPES, N, NERRS, NMATS, NMAX,
00333 $ NTEST, NTESTT
00334 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
00335 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
00336 $ VL, VU
00337
00338
00339 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
00340 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
00341 $ KTYPE( MAXTYP )
00342
00343
00344 REAL SLAMCH, SLARND, SSXT1
00345 EXTERNAL SLAMCH, SLARND, SSXT1
00346
00347
00348 EXTERNAL ALASVM, CHBEV, CHBEVD, CHBEVX, CHEEV, CHEEVD,
00349 $ CHEEVR, CHEEVX, CHET21, CHET22, CHPEV, CHPEVD,
00350 $ CHPEVX, CLACPY, CLASET, CLATMR, CLATMS, SLABAD,
00351 $ SLAFTS, XERBLA
00352
00353
00354 INTRINSIC ABS, INT, LOG, MAX, MIN, REAL, SQRT
00355
00356
00357 DATA KTYPE / 1, 2, 5*4, 5*5, 3*8, 3*9 /
00358 DATA KMAGN / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
00359 $ 2, 3, 1, 2, 3 /
00360 DATA KMODE / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
00361 $ 0, 0, 4, 4, 4 /
00362
00363
00364
00365
00366
00367 NTESTT = 0
00368 INFO = 0
00369
00370 BADNN = .FALSE.
00371 NMAX = 1
00372 DO 10 J = 1, NSIZES
00373 NMAX = MAX( NMAX, NN( J ) )
00374 IF( NN( J ).LT.0 )
00375 $ BADNN = .TRUE.
00376 10 CONTINUE
00377
00378
00379
00380 IF( NSIZES.LT.0 ) THEN
00381 INFO = -1
00382 ELSE IF( BADNN ) THEN
00383 INFO = -2
00384 ELSE IF( NTYPES.LT.0 ) THEN
00385 INFO = -3
00386 ELSE IF( LDA.LT.NMAX ) THEN
00387 INFO = -9
00388 ELSE IF( LDU.LT.NMAX ) THEN
00389 INFO = -16
00390 ELSE IF( 2*MAX( 2, NMAX )**2.GT.LWORK ) THEN
00391 INFO = -22
00392 END IF
00393
00394 IF( INFO.NE.0 ) THEN
00395 CALL XERBLA( 'CDRVST', -INFO )
00396 RETURN
00397 END IF
00398
00399
00400
00401 IF( NSIZES.EQ.0 .OR. NTYPES.EQ.0 )
00402 $ RETURN
00403
00404
00405
00406 UNFL = SLAMCH( 'Safe minimum' )
00407 OVFL = SLAMCH( 'Overflow' )
00408 CALL SLABAD( UNFL, OVFL )
00409 ULP = SLAMCH( 'Epsilon' )*SLAMCH( 'Base' )
00410 ULPINV = ONE / ULP
00411 RTUNFL = SQRT( UNFL )
00412 RTOVFL = SQRT( OVFL )
00413
00414
00415
00416 DO 20 I = 1, 4
00417 ISEED2( I ) = ISEED( I )
00418 ISEED3( I ) = ISEED( I )
00419 20 CONTINUE
00420
00421 NERRS = 0
00422 NMATS = 0
00423
00424 DO 1220 JSIZE = 1, NSIZES
00425 N = NN( JSIZE )
00426 IF( N.GT.0 ) THEN
00427 LGN = INT( LOG( REAL( N ) ) / LOG( TWO ) )
00428 IF( 2**LGN.LT.N )
00429 $ LGN = LGN + 1
00430 IF( 2**LGN.LT.N )
00431 $ LGN = LGN + 1
00432 LWEDC = MAX( 2*N+N*N, 2*N*N )
00433 LRWEDC = 1 + 4*N + 2*N*LGN + 3*N**2
00434 LIWEDC = 3 + 5*N
00435 ELSE
00436 LWEDC = 2
00437 LRWEDC = 8
00438 LIWEDC = 8
00439 END IF
00440 ANINV = ONE / REAL( MAX( 1, N ) )
00441
00442 IF( NSIZES.NE.1 ) THEN
00443 MTYPES = MIN( MAXTYP, NTYPES )
00444 ELSE
00445 MTYPES = MIN( MAXTYP+1, NTYPES )
00446 END IF
00447
00448 DO 1210 JTYPE = 1, MTYPES
00449 IF( .NOT.DOTYPE( JTYPE ) )
00450 $ GO TO 1210
00451 NMATS = NMATS + 1
00452 NTEST = 0
00453
00454 DO 30 J = 1, 4
00455 IOLDSD( J ) = ISEED( J )
00456 30 CONTINUE
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473 IF( MTYPES.GT.MAXTYP )
00474 $ GO TO 110
00475
00476 ITYPE = KTYPE( JTYPE )
00477 IMODE = KMODE( JTYPE )
00478
00479
00480
00481 GO TO ( 40, 50, 60 )KMAGN( JTYPE )
00482
00483 40 CONTINUE
00484 ANORM = ONE
00485 GO TO 70
00486
00487 50 CONTINUE
00488 ANORM = ( RTOVFL*ULP )*ANINV
00489 GO TO 70
00490
00491 60 CONTINUE
00492 ANORM = RTUNFL*N*ULPINV
00493 GO TO 70
00494
00495 70 CONTINUE
00496
00497 CALL CLASET( 'Full', LDA, N, CZERO, CZERO, A, LDA )
00498 IINFO = 0
00499 COND = ULPINV
00500
00501
00502
00503
00504
00505 IF( ITYPE.EQ.1 ) THEN
00506 IINFO = 0
00507
00508 ELSE IF( ITYPE.EQ.2 ) THEN
00509
00510
00511
00512 DO 80 JCOL = 1, N
00513 A( JCOL, JCOL ) = ANORM
00514 80 CONTINUE
00515
00516 ELSE IF( ITYPE.EQ.4 ) THEN
00517
00518
00519
00520 CALL CLATMS( N, N, 'S', ISEED, 'H', RWORK, IMODE, COND,
00521 $ ANORM, 0, 0, 'N', A, LDA, WORK, IINFO )
00522
00523 ELSE IF( ITYPE.EQ.5 ) THEN
00524
00525
00526
00527 CALL CLATMS( N, N, 'S', ISEED, 'H', RWORK, IMODE, COND,
00528 $ ANORM, N, N, 'N', A, LDA, WORK, IINFO )
00529
00530 ELSE IF( ITYPE.EQ.7 ) THEN
00531
00532
00533
00534 CALL CLATMR( N, N, 'S', ISEED, 'H', WORK, 6, ONE, CONE,
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 CLATMR( N, N, 'S', ISEED, 'H', WORK, 6, ONE, CONE,
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 IHBW = INT( ( N-1 )*SLARND( 1, ISEED3 ) )
00553 CALL CLATMS( N, N, 'S', ISEED, 'H', RWORK, IMODE, COND,
00554 $ ANORM, IHBW, IHBW, 'Z', U, LDU, WORK,
00555 $ IINFO )
00556
00557
00558
00559 CALL CLASET( 'Full', LDA, N, CZERO, CZERO, A, LDA )
00560 DO 100 IDIAG = -IHBW, IHBW
00561 IROW = IHBW - IDIAG + 1
00562 J1 = MAX( 1, IDIAG+1 )
00563 J2 = MIN( N, N+IDIAG )
00564 DO 90 J = J1, J2
00565 I = J - IDIAG
00566 A( I, J ) = U( IROW, J )
00567 90 CONTINUE
00568 100 CONTINUE
00569 ELSE
00570 IINFO = 1
00571 END IF
00572
00573 IF( IINFO.NE.0 ) THEN
00574 WRITE( NOUNIT, FMT = 9999 )'Generator', IINFO, N, JTYPE,
00575 $ IOLDSD
00576 INFO = ABS( IINFO )
00577 RETURN
00578 END IF
00579
00580 110 CONTINUE
00581
00582 ABSTOL = UNFL + UNFL
00583 IF( N.LE.1 ) THEN
00584 IL = 1
00585 IU = N
00586 ELSE
00587 IL = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
00588 IU = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
00589 IF( IL.GT.IU ) THEN
00590 ITEMP = IL
00591 IL = IU
00592 IU = ITEMP
00593 END IF
00594 END IF
00595
00596
00597
00598
00599 DO 1200 IUPLO = 0, 1
00600 IF( IUPLO.EQ.0 ) THEN
00601 UPLO = 'L'
00602 ELSE
00603 UPLO = 'U'
00604 END IF
00605
00606
00607
00608 CALL CLACPY( ' ', N, N, A, LDA, V, LDU )
00609
00610 NTEST = NTEST + 1
00611 CALL CHEEVD( 'V', UPLO, N, A, LDU, D1, WORK, LWEDC,
00612 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
00613 IF( IINFO.NE.0 ) THEN
00614 WRITE( NOUNIT, FMT = 9999 )'CHEEVD(V,' // UPLO //
00615 $ ')', IINFO, N, JTYPE, IOLDSD
00616 INFO = ABS( IINFO )
00617 IF( IINFO.LT.0 ) THEN
00618 RETURN
00619 ELSE
00620 RESULT( NTEST ) = ULPINV
00621 RESULT( NTEST+1 ) = ULPINV
00622 RESULT( NTEST+2 ) = ULPINV
00623 GO TO 130
00624 END IF
00625 END IF
00626
00627
00628
00629 CALL CHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
00630 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
00631
00632 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00633
00634 NTEST = NTEST + 2
00635 CALL CHEEVD( 'N', UPLO, N, A, LDU, D3, WORK, LWEDC,
00636 $ RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
00637 IF( IINFO.NE.0 ) THEN
00638 WRITE( NOUNIT, FMT = 9999 )'CHEEVD(N,' // UPLO //
00639 $ ')', IINFO, N, JTYPE, IOLDSD
00640 INFO = ABS( IINFO )
00641 IF( IINFO.LT.0 ) THEN
00642 RETURN
00643 ELSE
00644 RESULT( NTEST ) = ULPINV
00645 GO TO 130
00646 END IF
00647 END IF
00648
00649
00650
00651 TEMP1 = ZERO
00652 TEMP2 = ZERO
00653 DO 120 J = 1, N
00654 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
00655 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
00656 120 CONTINUE
00657 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
00658 $ ULP*MAX( TEMP1, TEMP2 ) )
00659
00660 130 CONTINUE
00661 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00662
00663 NTEST = NTEST + 1
00664
00665 IF( N.GT.0 ) THEN
00666 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
00667 IF( IL.NE.1 ) THEN
00668 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
00669 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00670 ELSE IF( N.GT.0 ) THEN
00671 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
00672 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00673 END IF
00674 IF( IU.NE.N ) THEN
00675 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
00676 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00677 ELSE IF( N.GT.0 ) THEN
00678 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
00679 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00680 END IF
00681 ELSE
00682 TEMP3 = ZERO
00683 VL = ZERO
00684 VU = ONE
00685 END IF
00686
00687 CALL CHEEVX( 'V', 'A', UPLO, N, A, LDU, VL, VU, IL, IU,
00688 $ ABSTOL, M, WA1, Z, LDU, WORK, LWORK, RWORK,
00689 $ IWORK, IWORK( 5*N+1 ), IINFO )
00690 IF( IINFO.NE.0 ) THEN
00691 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(V,A,' // UPLO //
00692 $ ')', IINFO, N, JTYPE, IOLDSD
00693 INFO = ABS( IINFO )
00694 IF( IINFO.LT.0 ) THEN
00695 RETURN
00696 ELSE
00697 RESULT( NTEST ) = ULPINV
00698 RESULT( NTEST+1 ) = ULPINV
00699 RESULT( NTEST+2 ) = ULPINV
00700 GO TO 150
00701 END IF
00702 END IF
00703
00704
00705
00706 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00707
00708 CALL CHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
00709 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
00710
00711 NTEST = NTEST + 2
00712 CALL CHEEVX( 'N', 'A', UPLO, N, A, LDU, VL, VU, IL, IU,
00713 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, RWORK,
00714 $ IWORK, IWORK( 5*N+1 ), IINFO )
00715 IF( IINFO.NE.0 ) THEN
00716 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(N,A,' // UPLO //
00717 $ ')', IINFO, N, JTYPE, IOLDSD
00718 INFO = ABS( IINFO )
00719 IF( IINFO.LT.0 ) THEN
00720 RETURN
00721 ELSE
00722 RESULT( NTEST ) = ULPINV
00723 GO TO 150
00724 END IF
00725 END IF
00726
00727
00728
00729 TEMP1 = ZERO
00730 TEMP2 = ZERO
00731 DO 140 J = 1, N
00732 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
00733 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
00734 140 CONTINUE
00735 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
00736 $ ULP*MAX( TEMP1, TEMP2 ) )
00737
00738 150 CONTINUE
00739 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00740
00741 NTEST = NTEST + 1
00742
00743 CALL CHEEVX( 'V', 'I', UPLO, N, A, LDU, VL, VU, IL, IU,
00744 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, RWORK,
00745 $ IWORK, IWORK( 5*N+1 ), IINFO )
00746 IF( IINFO.NE.0 ) THEN
00747 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(V,I,' // UPLO //
00748 $ ')', IINFO, N, JTYPE, IOLDSD
00749 INFO = ABS( IINFO )
00750 IF( IINFO.LT.0 ) THEN
00751 RETURN
00752 ELSE
00753 RESULT( NTEST ) = ULPINV
00754 GO TO 160
00755 END IF
00756 END IF
00757
00758
00759
00760 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00761
00762 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
00763 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
00764
00765 NTEST = NTEST + 2
00766
00767 CALL CHEEVX( 'N', 'I', UPLO, N, A, LDU, VL, VU, IL, IU,
00768 $ ABSTOL, M3, WA3, Z, LDU, WORK, LWORK, RWORK,
00769 $ IWORK, IWORK( 5*N+1 ), IINFO )
00770 IF( IINFO.NE.0 ) THEN
00771 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(N,I,' // UPLO //
00772 $ ')', IINFO, N, JTYPE, IOLDSD
00773 INFO = ABS( IINFO )
00774 IF( IINFO.LT.0 ) THEN
00775 RETURN
00776 ELSE
00777 RESULT( NTEST ) = ULPINV
00778 GO TO 160
00779 END IF
00780 END IF
00781
00782
00783
00784 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
00785 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
00786 IF( N.GT.0 ) THEN
00787 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
00788 ELSE
00789 TEMP3 = ZERO
00790 END IF
00791 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
00792 $ MAX( UNFL, TEMP3*ULP )
00793
00794 160 CONTINUE
00795 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00796
00797 NTEST = NTEST + 1
00798
00799 CALL CHEEVX( 'V', 'V', UPLO, N, A, LDU, VL, VU, IL, IU,
00800 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, RWORK,
00801 $ IWORK, IWORK( 5*N+1 ), IINFO )
00802 IF( IINFO.NE.0 ) THEN
00803 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(V,V,' // UPLO //
00804 $ ')', IINFO, N, JTYPE, IOLDSD
00805 INFO = ABS( IINFO )
00806 IF( IINFO.LT.0 ) THEN
00807 RETURN
00808 ELSE
00809 RESULT( NTEST ) = ULPINV
00810 GO TO 170
00811 END IF
00812 END IF
00813
00814
00815
00816 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00817
00818 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
00819 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
00820
00821 NTEST = NTEST + 2
00822
00823 CALL CHEEVX( 'N', 'V', UPLO, N, A, LDU, VL, VU, IL, IU,
00824 $ ABSTOL, M3, WA3, Z, LDU, WORK, LWORK, RWORK,
00825 $ IWORK, IWORK( 5*N+1 ), IINFO )
00826 IF( IINFO.NE.0 ) THEN
00827 WRITE( NOUNIT, FMT = 9999 )'CHEEVX(N,V,' // UPLO //
00828 $ ')', IINFO, N, JTYPE, IOLDSD
00829 INFO = ABS( IINFO )
00830 IF( IINFO.LT.0 ) THEN
00831 RETURN
00832 ELSE
00833 RESULT( NTEST ) = ULPINV
00834 GO TO 170
00835 END IF
00836 END IF
00837
00838 IF( M3.EQ.0 .AND. N.GT.0 ) THEN
00839 RESULT( NTEST ) = ULPINV
00840 GO TO 170
00841 END IF
00842
00843
00844
00845 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
00846 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
00847 IF( N.GT.0 ) THEN
00848 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
00849 ELSE
00850 TEMP3 = ZERO
00851 END IF
00852 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
00853 $ MAX( UNFL, TEMP3*ULP )
00854
00855 170 CONTINUE
00856
00857
00858
00859 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
00860
00861
00862
00863
00864 IF( IUPLO.EQ.1 ) THEN
00865 INDX = 1
00866 DO 190 J = 1, N
00867 DO 180 I = 1, J
00868 WORK( INDX ) = A( I, J )
00869 INDX = INDX + 1
00870 180 CONTINUE
00871 190 CONTINUE
00872 ELSE
00873 INDX = 1
00874 DO 210 J = 1, N
00875 DO 200 I = J, N
00876 WORK( INDX ) = A( I, J )
00877 INDX = INDX + 1
00878 200 CONTINUE
00879 210 CONTINUE
00880 END IF
00881
00882 NTEST = NTEST + 1
00883 INDWRK = N*( N+1 ) / 2 + 1
00884 CALL CHPEVD( 'V', UPLO, N, WORK, D1, Z, LDU,
00885 $ WORK( INDWRK ), LWEDC, RWORK, LRWEDC, IWORK,
00886 $ LIWEDC, IINFO )
00887 IF( IINFO.NE.0 ) THEN
00888 WRITE( NOUNIT, FMT = 9999 )'CHPEVD(V,' // UPLO //
00889 $ ')', IINFO, N, JTYPE, IOLDSD
00890 INFO = ABS( IINFO )
00891 IF( IINFO.LT.0 ) THEN
00892 RETURN
00893 ELSE
00894 RESULT( NTEST ) = ULPINV
00895 RESULT( NTEST+1 ) = ULPINV
00896 RESULT( NTEST+2 ) = ULPINV
00897 GO TO 270
00898 END IF
00899 END IF
00900
00901
00902
00903 CALL CHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
00904 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
00905
00906 IF( IUPLO.EQ.1 ) THEN
00907 INDX = 1
00908 DO 230 J = 1, N
00909 DO 220 I = 1, J
00910 WORK( INDX ) = A( I, J )
00911 INDX = INDX + 1
00912 220 CONTINUE
00913 230 CONTINUE
00914 ELSE
00915 INDX = 1
00916 DO 250 J = 1, N
00917 DO 240 I = J, N
00918 WORK( INDX ) = A( I, J )
00919 INDX = INDX + 1
00920 240 CONTINUE
00921 250 CONTINUE
00922 END IF
00923
00924 NTEST = NTEST + 2
00925 INDWRK = N*( N+1 ) / 2 + 1
00926 CALL CHPEVD( 'N', UPLO, N, WORK, D3, Z, LDU,
00927 $ WORK( INDWRK ), LWEDC, RWORK, LRWEDC, IWORK,
00928 $ LIWEDC, IINFO )
00929 IF( IINFO.NE.0 ) THEN
00930 WRITE( NOUNIT, FMT = 9999 )'CHPEVD(N,' // UPLO //
00931 $ ')', IINFO, N, JTYPE, IOLDSD
00932 INFO = ABS( IINFO )
00933 IF( IINFO.LT.0 ) THEN
00934 RETURN
00935 ELSE
00936 RESULT( NTEST ) = ULPINV
00937 GO TO 270
00938 END IF
00939 END IF
00940
00941
00942
00943 TEMP1 = ZERO
00944 TEMP2 = ZERO
00945 DO 260 J = 1, N
00946 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
00947 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
00948 260 CONTINUE
00949 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
00950 $ ULP*MAX( TEMP1, TEMP2 ) )
00951
00952
00953
00954
00955 270 CONTINUE
00956 IF( IUPLO.EQ.1 ) THEN
00957 INDX = 1
00958 DO 290 J = 1, N
00959 DO 280 I = 1, J
00960 WORK( INDX ) = A( I, J )
00961 INDX = INDX + 1
00962 280 CONTINUE
00963 290 CONTINUE
00964 ELSE
00965 INDX = 1
00966 DO 310 J = 1, N
00967 DO 300 I = J, N
00968 WORK( INDX ) = A( I, J )
00969 INDX = INDX + 1
00970 300 CONTINUE
00971 310 CONTINUE
00972 END IF
00973
00974 NTEST = NTEST + 1
00975
00976 IF( N.GT.0 ) THEN
00977 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
00978 IF( IL.NE.1 ) THEN
00979 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
00980 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00981 ELSE IF( N.GT.0 ) THEN
00982 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
00983 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00984 END IF
00985 IF( IU.NE.N ) THEN
00986 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
00987 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00988 ELSE IF( N.GT.0 ) THEN
00989 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
00990 $ TEN*ULP*TEMP3, TEN*RTUNFL )
00991 END IF
00992 ELSE
00993 TEMP3 = ZERO
00994 VL = ZERO
00995 VU = ONE
00996 END IF
00997
00998 CALL CHPEVX( 'V', 'A', UPLO, N, WORK, VL, VU, IL, IU,
00999 $ ABSTOL, M, WA1, Z, LDU, V, RWORK, IWORK,
01000 $ IWORK( 5*N+1 ), IINFO )
01001 IF( IINFO.NE.0 ) THEN
01002 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(V,A,' // UPLO //
01003 $ ')', IINFO, N, JTYPE, IOLDSD
01004 INFO = ABS( IINFO )
01005 IF( IINFO.LT.0 ) THEN
01006 RETURN
01007 ELSE
01008 RESULT( NTEST ) = ULPINV
01009 RESULT( NTEST+1 ) = ULPINV
01010 RESULT( NTEST+2 ) = ULPINV
01011 GO TO 370
01012 END IF
01013 END IF
01014
01015
01016
01017 CALL CHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
01018 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01019
01020 NTEST = NTEST + 2
01021
01022 IF( IUPLO.EQ.1 ) THEN
01023 INDX = 1
01024 DO 330 J = 1, N
01025 DO 320 I = 1, J
01026 WORK( INDX ) = A( I, J )
01027 INDX = INDX + 1
01028 320 CONTINUE
01029 330 CONTINUE
01030 ELSE
01031 INDX = 1
01032 DO 350 J = 1, N
01033 DO 340 I = J, N
01034 WORK( INDX ) = A( I, J )
01035 INDX = INDX + 1
01036 340 CONTINUE
01037 350 CONTINUE
01038 END IF
01039
01040 CALL CHPEVX( 'N', 'A', UPLO, N, WORK, VL, VU, IL, IU,
01041 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
01042 $ IWORK( 5*N+1 ), IINFO )
01043 IF( IINFO.NE.0 ) THEN
01044 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(N,A,' // UPLO //
01045 $ ')', IINFO, N, JTYPE, IOLDSD
01046 INFO = ABS( IINFO )
01047 IF( IINFO.LT.0 ) THEN
01048 RETURN
01049 ELSE
01050 RESULT( NTEST ) = ULPINV
01051 GO TO 370
01052 END IF
01053 END IF
01054
01055
01056
01057 TEMP1 = ZERO
01058 TEMP2 = ZERO
01059 DO 360 J = 1, N
01060 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
01061 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
01062 360 CONTINUE
01063 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01064 $ ULP*MAX( TEMP1, TEMP2 ) )
01065
01066 370 CONTINUE
01067 NTEST = NTEST + 1
01068 IF( IUPLO.EQ.1 ) THEN
01069 INDX = 1
01070 DO 390 J = 1, N
01071 DO 380 I = 1, J
01072 WORK( INDX ) = A( I, J )
01073 INDX = INDX + 1
01074 380 CONTINUE
01075 390 CONTINUE
01076 ELSE
01077 INDX = 1
01078 DO 410 J = 1, N
01079 DO 400 I = J, N
01080 WORK( INDX ) = A( I, J )
01081 INDX = INDX + 1
01082 400 CONTINUE
01083 410 CONTINUE
01084 END IF
01085
01086 CALL CHPEVX( 'V', 'I', UPLO, N, WORK, VL, VU, IL, IU,
01087 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
01088 $ IWORK( 5*N+1 ), IINFO )
01089 IF( IINFO.NE.0 ) THEN
01090 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(V,I,' // UPLO //
01091 $ ')', IINFO, N, JTYPE, IOLDSD
01092 INFO = ABS( IINFO )
01093 IF( IINFO.LT.0 ) THEN
01094 RETURN
01095 ELSE
01096 RESULT( NTEST ) = ULPINV
01097 RESULT( NTEST+1 ) = ULPINV
01098 RESULT( NTEST+2 ) = ULPINV
01099 GO TO 460
01100 END IF
01101 END IF
01102
01103
01104
01105 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01106 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01107
01108 NTEST = NTEST + 2
01109
01110 IF( IUPLO.EQ.1 ) THEN
01111 INDX = 1
01112 DO 430 J = 1, N
01113 DO 420 I = 1, J
01114 WORK( INDX ) = A( I, J )
01115 INDX = INDX + 1
01116 420 CONTINUE
01117 430 CONTINUE
01118 ELSE
01119 INDX = 1
01120 DO 450 J = 1, N
01121 DO 440 I = J, N
01122 WORK( INDX ) = A( I, J )
01123 INDX = INDX + 1
01124 440 CONTINUE
01125 450 CONTINUE
01126 END IF
01127
01128 CALL CHPEVX( 'N', 'I', UPLO, N, WORK, VL, VU, IL, IU,
01129 $ ABSTOL, M3, WA3, Z, LDU, V, RWORK, IWORK,
01130 $ IWORK( 5*N+1 ), IINFO )
01131 IF( IINFO.NE.0 ) THEN
01132 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(N,I,' // UPLO //
01133 $ ')', IINFO, N, JTYPE, IOLDSD
01134 INFO = ABS( IINFO )
01135 IF( IINFO.LT.0 ) THEN
01136 RETURN
01137 ELSE
01138 RESULT( NTEST ) = ULPINV
01139 GO TO 460
01140 END IF
01141 END IF
01142
01143
01144
01145 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
01146 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
01147 IF( N.GT.0 ) THEN
01148 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
01149 ELSE
01150 TEMP3 = ZERO
01151 END IF
01152 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
01153 $ MAX( UNFL, TEMP3*ULP )
01154
01155 460 CONTINUE
01156 NTEST = NTEST + 1
01157 IF( IUPLO.EQ.1 ) THEN
01158 INDX = 1
01159 DO 480 J = 1, N
01160 DO 470 I = 1, J
01161 WORK( INDX ) = A( I, J )
01162 INDX = INDX + 1
01163 470 CONTINUE
01164 480 CONTINUE
01165 ELSE
01166 INDX = 1
01167 DO 500 J = 1, N
01168 DO 490 I = J, N
01169 WORK( INDX ) = A( I, J )
01170 INDX = INDX + 1
01171 490 CONTINUE
01172 500 CONTINUE
01173 END IF
01174
01175 CALL CHPEVX( 'V', 'V', UPLO, N, WORK, VL, VU, IL, IU,
01176 $ ABSTOL, M2, WA2, Z, LDU, V, RWORK, IWORK,
01177 $ IWORK( 5*N+1 ), IINFO )
01178 IF( IINFO.NE.0 ) THEN
01179 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(V,V,' // UPLO //
01180 $ ')', IINFO, N, JTYPE, IOLDSD
01181 INFO = ABS( IINFO )
01182 IF( IINFO.LT.0 ) THEN
01183 RETURN
01184 ELSE
01185 RESULT( NTEST ) = ULPINV
01186 RESULT( NTEST+1 ) = ULPINV
01187 RESULT( NTEST+2 ) = ULPINV
01188 GO TO 550
01189 END IF
01190 END IF
01191
01192
01193
01194 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01195 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01196
01197 NTEST = NTEST + 2
01198
01199 IF( IUPLO.EQ.1 ) THEN
01200 INDX = 1
01201 DO 520 J = 1, N
01202 DO 510 I = 1, J
01203 WORK( INDX ) = A( I, J )
01204 INDX = INDX + 1
01205 510 CONTINUE
01206 520 CONTINUE
01207 ELSE
01208 INDX = 1
01209 DO 540 J = 1, N
01210 DO 530 I = J, N
01211 WORK( INDX ) = A( I, J )
01212 INDX = INDX + 1
01213 530 CONTINUE
01214 540 CONTINUE
01215 END IF
01216
01217 CALL CHPEVX( 'N', 'V', UPLO, N, WORK, VL, VU, IL, IU,
01218 $ ABSTOL, M3, WA3, Z, LDU, V, RWORK, IWORK,
01219 $ IWORK( 5*N+1 ), IINFO )
01220 IF( IINFO.NE.0 ) THEN
01221 WRITE( NOUNIT, FMT = 9999 )'CHPEVX(N,V,' // UPLO //
01222 $ ')', IINFO, N, JTYPE, IOLDSD
01223 INFO = ABS( IINFO )
01224 IF( IINFO.LT.0 ) THEN
01225 RETURN
01226 ELSE
01227 RESULT( NTEST ) = ULPINV
01228 GO TO 550
01229 END IF
01230 END IF
01231
01232 IF( M3.EQ.0 .AND. N.GT.0 ) THEN
01233 RESULT( NTEST ) = ULPINV
01234 GO TO 550
01235 END IF
01236
01237
01238
01239 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
01240 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
01241 IF( N.GT.0 ) THEN
01242 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
01243 ELSE
01244 TEMP3 = ZERO
01245 END IF
01246 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
01247 $ MAX( UNFL, TEMP3*ULP )
01248
01249 550 CONTINUE
01250
01251
01252
01253 IF( JTYPE.LE.7 ) THEN
01254 KD = 0
01255 ELSE IF( JTYPE.GE.8 .AND. JTYPE.LE.15 ) THEN
01256 KD = MAX( N-1, 0 )
01257 ELSE
01258 KD = IHBW
01259 END IF
01260
01261
01262
01263
01264 IF( IUPLO.EQ.1 ) THEN
01265 DO 570 J = 1, N
01266 DO 560 I = MAX( 1, J-KD ), J
01267 V( KD+1+I-J, J ) = A( I, J )
01268 560 CONTINUE
01269 570 CONTINUE
01270 ELSE
01271 DO 590 J = 1, N
01272 DO 580 I = J, MIN( N, J+KD )
01273 V( 1+I-J, J ) = A( I, J )
01274 580 CONTINUE
01275 590 CONTINUE
01276 END IF
01277
01278 NTEST = NTEST + 1
01279 CALL CHBEVD( 'V', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
01280 $ LWEDC, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
01281 IF( IINFO.NE.0 ) THEN
01282 WRITE( NOUNIT, FMT = 9998 )'CHBEVD(V,' // UPLO //
01283 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01284 INFO = ABS( IINFO )
01285 IF( IINFO.LT.0 ) THEN
01286 RETURN
01287 ELSE
01288 RESULT( NTEST ) = ULPINV
01289 RESULT( NTEST+1 ) = ULPINV
01290 RESULT( NTEST+2 ) = ULPINV
01291 GO TO 650
01292 END IF
01293 END IF
01294
01295
01296
01297 CALL CHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
01298 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01299
01300 IF( IUPLO.EQ.1 ) THEN
01301 DO 610 J = 1, N
01302 DO 600 I = MAX( 1, J-KD ), J
01303 V( KD+1+I-J, J ) = A( I, J )
01304 600 CONTINUE
01305 610 CONTINUE
01306 ELSE
01307 DO 630 J = 1, N
01308 DO 620 I = J, MIN( N, J+KD )
01309 V( 1+I-J, J ) = A( I, J )
01310 620 CONTINUE
01311 630 CONTINUE
01312 END IF
01313
01314 NTEST = NTEST + 2
01315 CALL CHBEVD( 'N', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
01316 $ LWEDC, RWORK, LRWEDC, IWORK, LIWEDC, IINFO )
01317 IF( IINFO.NE.0 ) THEN
01318 WRITE( NOUNIT, FMT = 9998 )'CHBEVD(N,' // UPLO //
01319 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01320 INFO = ABS( IINFO )
01321 IF( IINFO.LT.0 ) THEN
01322 RETURN
01323 ELSE
01324 RESULT( NTEST ) = ULPINV
01325 GO TO 650
01326 END IF
01327 END IF
01328
01329
01330
01331 TEMP1 = ZERO
01332 TEMP2 = ZERO
01333 DO 640 J = 1, N
01334 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
01335 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
01336 640 CONTINUE
01337 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01338 $ ULP*MAX( TEMP1, TEMP2 ) )
01339
01340
01341
01342
01343 650 CONTINUE
01344 IF( IUPLO.EQ.1 ) THEN
01345 DO 670 J = 1, N
01346 DO 660 I = MAX( 1, J-KD ), J
01347 V( KD+1+I-J, J ) = A( I, J )
01348 660 CONTINUE
01349 670 CONTINUE
01350 ELSE
01351 DO 690 J = 1, N
01352 DO 680 I = J, MIN( N, J+KD )
01353 V( 1+I-J, J ) = A( I, J )
01354 680 CONTINUE
01355 690 CONTINUE
01356 END IF
01357
01358 NTEST = NTEST + 1
01359 CALL CHBEVX( 'V', 'A', UPLO, N, KD, V, LDU, U, LDU, VL,
01360 $ VU, IL, IU, ABSTOL, M, WA1, Z, LDU, WORK,
01361 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01362 IF( IINFO.NE.0 ) THEN
01363 WRITE( NOUNIT, FMT = 9999 )'CHBEVX(V,A,' // UPLO //
01364 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01365 INFO = ABS( IINFO )
01366 IF( IINFO.LT.0 ) THEN
01367 RETURN
01368 ELSE
01369 RESULT( NTEST ) = ULPINV
01370 RESULT( NTEST+1 ) = ULPINV
01371 RESULT( NTEST+2 ) = ULPINV
01372 GO TO 750
01373 END IF
01374 END IF
01375
01376
01377
01378 CALL CHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
01379 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01380
01381 NTEST = NTEST + 2
01382
01383 IF( IUPLO.EQ.1 ) THEN
01384 DO 710 J = 1, N
01385 DO 700 I = MAX( 1, J-KD ), J
01386 V( KD+1+I-J, J ) = A( I, J )
01387 700 CONTINUE
01388 710 CONTINUE
01389 ELSE
01390 DO 730 J = 1, N
01391 DO 720 I = J, MIN( N, J+KD )
01392 V( 1+I-J, J ) = A( I, J )
01393 720 CONTINUE
01394 730 CONTINUE
01395 END IF
01396
01397 CALL CHBEVX( 'N', 'A', UPLO, N, KD, V, LDU, U, LDU, VL,
01398 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
01399 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01400 IF( IINFO.NE.0 ) THEN
01401 WRITE( NOUNIT, FMT = 9998 )'CHBEVX(N,A,' // UPLO //
01402 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01403 INFO = ABS( IINFO )
01404 IF( IINFO.LT.0 ) THEN
01405 RETURN
01406 ELSE
01407 RESULT( NTEST ) = ULPINV
01408 GO TO 750
01409 END IF
01410 END IF
01411
01412
01413
01414 TEMP1 = ZERO
01415 TEMP2 = ZERO
01416 DO 740 J = 1, N
01417 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
01418 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
01419 740 CONTINUE
01420 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01421 $ ULP*MAX( TEMP1, TEMP2 ) )
01422
01423
01424
01425
01426 750 CONTINUE
01427 NTEST = NTEST + 1
01428 IF( IUPLO.EQ.1 ) THEN
01429 DO 770 J = 1, N
01430 DO 760 I = MAX( 1, J-KD ), J
01431 V( KD+1+I-J, J ) = A( I, J )
01432 760 CONTINUE
01433 770 CONTINUE
01434 ELSE
01435 DO 790 J = 1, N
01436 DO 780 I = J, MIN( N, J+KD )
01437 V( 1+I-J, J ) = A( I, J )
01438 780 CONTINUE
01439 790 CONTINUE
01440 END IF
01441
01442 CALL CHBEVX( 'V', 'I', UPLO, N, KD, V, LDU, U, LDU, VL,
01443 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
01444 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01445 IF( IINFO.NE.0 ) THEN
01446 WRITE( NOUNIT, FMT = 9998 )'CHBEVX(V,I,' // UPLO //
01447 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01448 INFO = ABS( IINFO )
01449 IF( IINFO.LT.0 ) THEN
01450 RETURN
01451 ELSE
01452 RESULT( NTEST ) = ULPINV
01453 RESULT( NTEST+1 ) = ULPINV
01454 RESULT( NTEST+2 ) = ULPINV
01455 GO TO 840
01456 END IF
01457 END IF
01458
01459
01460
01461 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01462 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01463
01464 NTEST = NTEST + 2
01465
01466 IF( IUPLO.EQ.1 ) THEN
01467 DO 810 J = 1, N
01468 DO 800 I = MAX( 1, J-KD ), J
01469 V( KD+1+I-J, J ) = A( I, J )
01470 800 CONTINUE
01471 810 CONTINUE
01472 ELSE
01473 DO 830 J = 1, N
01474 DO 820 I = J, MIN( N, J+KD )
01475 V( 1+I-J, J ) = A( I, J )
01476 820 CONTINUE
01477 830 CONTINUE
01478 END IF
01479 CALL CHBEVX( 'N', 'I', UPLO, N, KD, V, LDU, U, LDU, VL,
01480 $ VU, IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
01481 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01482 IF( IINFO.NE.0 ) THEN
01483 WRITE( NOUNIT, FMT = 9998 )'CHBEVX(N,I,' // UPLO //
01484 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01485 INFO = ABS( IINFO )
01486 IF( IINFO.LT.0 ) THEN
01487 RETURN
01488 ELSE
01489 RESULT( NTEST ) = ULPINV
01490 GO TO 840
01491 END IF
01492 END IF
01493
01494
01495
01496 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
01497 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
01498 IF( N.GT.0 ) THEN
01499 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
01500 ELSE
01501 TEMP3 = ZERO
01502 END IF
01503 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
01504 $ MAX( UNFL, TEMP3*ULP )
01505
01506
01507
01508
01509 840 CONTINUE
01510 NTEST = NTEST + 1
01511 IF( IUPLO.EQ.1 ) THEN
01512 DO 860 J = 1, N
01513 DO 850 I = MAX( 1, J-KD ), J
01514 V( KD+1+I-J, J ) = A( I, J )
01515 850 CONTINUE
01516 860 CONTINUE
01517 ELSE
01518 DO 880 J = 1, N
01519 DO 870 I = J, MIN( N, J+KD )
01520 V( 1+I-J, J ) = A( I, J )
01521 870 CONTINUE
01522 880 CONTINUE
01523 END IF
01524 CALL CHBEVX( 'V', 'V', UPLO, N, KD, V, LDU, U, LDU, VL,
01525 $ VU, IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
01526 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01527 IF( IINFO.NE.0 ) THEN
01528 WRITE( NOUNIT, FMT = 9998 )'CHBEVX(V,V,' // UPLO //
01529 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01530 INFO = ABS( IINFO )
01531 IF( IINFO.LT.0 ) THEN
01532 RETURN
01533 ELSE
01534 RESULT( NTEST ) = ULPINV
01535 RESULT( NTEST+1 ) = ULPINV
01536 RESULT( NTEST+2 ) = ULPINV
01537 GO TO 930
01538 END IF
01539 END IF
01540
01541
01542
01543 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01544 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01545
01546 NTEST = NTEST + 2
01547
01548 IF( IUPLO.EQ.1 ) THEN
01549 DO 900 J = 1, N
01550 DO 890 I = MAX( 1, J-KD ), J
01551 V( KD+1+I-J, J ) = A( I, J )
01552 890 CONTINUE
01553 900 CONTINUE
01554 ELSE
01555 DO 920 J = 1, N
01556 DO 910 I = J, MIN( N, J+KD )
01557 V( 1+I-J, J ) = A( I, J )
01558 910 CONTINUE
01559 920 CONTINUE
01560 END IF
01561 CALL CHBEVX( 'N', 'V', UPLO, N, KD, V, LDU, U, LDU, VL,
01562 $ VU, IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
01563 $ RWORK, IWORK, IWORK( 5*N+1 ), IINFO )
01564 IF( IINFO.NE.0 ) THEN
01565 WRITE( NOUNIT, FMT = 9998 )'CHBEVX(N,V,' // UPLO //
01566 $ ')', IINFO, N, KD, JTYPE, IOLDSD
01567 INFO = ABS( IINFO )
01568 IF( IINFO.LT.0 ) THEN
01569 RETURN
01570 ELSE
01571 RESULT( NTEST ) = ULPINV
01572 GO TO 930
01573 END IF
01574 END IF
01575
01576 IF( M3.EQ.0 .AND. N.GT.0 ) THEN
01577 RESULT( NTEST ) = ULPINV
01578 GO TO 930
01579 END IF
01580
01581
01582
01583 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
01584 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
01585 IF( N.GT.0 ) THEN
01586 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
01587 ELSE
01588 TEMP3 = ZERO
01589 END IF
01590 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
01591 $ MAX( UNFL, TEMP3*ULP )
01592
01593 930 CONTINUE
01594
01595
01596
01597 CALL CLACPY( ' ', N, N, A, LDA, V, LDU )
01598
01599 NTEST = NTEST + 1
01600 CALL CHEEV( 'V', UPLO, N, A, LDU, D1, WORK, LWORK, RWORK,
01601 $ IINFO )
01602 IF( IINFO.NE.0 ) THEN
01603 WRITE( NOUNIT, FMT = 9999 )'CHEEV(V,' // UPLO // ')',
01604 $ IINFO, N, JTYPE, IOLDSD
01605 INFO = ABS( IINFO )
01606 IF( IINFO.LT.0 ) THEN
01607 RETURN
01608 ELSE
01609 RESULT( NTEST ) = ULPINV
01610 RESULT( NTEST+1 ) = ULPINV
01611 RESULT( NTEST+2 ) = ULPINV
01612 GO TO 950
01613 END IF
01614 END IF
01615
01616
01617
01618 CALL CHET21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
01619 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01620
01621 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01622
01623 NTEST = NTEST + 2
01624 CALL CHEEV( 'N', UPLO, N, A, LDU, D3, WORK, LWORK, RWORK,
01625 $ IINFO )
01626 IF( IINFO.NE.0 ) THEN
01627 WRITE( NOUNIT, FMT = 9999 )'CHEEV(N,' // UPLO // ')',
01628 $ IINFO, N, JTYPE, IOLDSD
01629 INFO = ABS( IINFO )
01630 IF( IINFO.LT.0 ) THEN
01631 RETURN
01632 ELSE
01633 RESULT( NTEST ) = ULPINV
01634 GO TO 950
01635 END IF
01636 END IF
01637
01638
01639
01640 TEMP1 = ZERO
01641 TEMP2 = ZERO
01642 DO 940 J = 1, N
01643 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
01644 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
01645 940 CONTINUE
01646 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01647 $ ULP*MAX( TEMP1, TEMP2 ) )
01648
01649 950 CONTINUE
01650
01651 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01652
01653
01654
01655
01656
01657
01658 IF( IUPLO.EQ.1 ) THEN
01659 INDX = 1
01660 DO 970 J = 1, N
01661 DO 960 I = 1, J
01662 WORK( INDX ) = A( I, J )
01663 INDX = INDX + 1
01664 960 CONTINUE
01665 970 CONTINUE
01666 ELSE
01667 INDX = 1
01668 DO 990 J = 1, N
01669 DO 980 I = J, N
01670 WORK( INDX ) = A( I, J )
01671 INDX = INDX + 1
01672 980 CONTINUE
01673 990 CONTINUE
01674 END IF
01675
01676 NTEST = NTEST + 1
01677 INDWRK = N*( N+1 ) / 2 + 1
01678 CALL CHPEV( 'V', UPLO, N, WORK, D1, Z, LDU,
01679 $ WORK( INDWRK ), RWORK, IINFO )
01680 IF( IINFO.NE.0 ) THEN
01681 WRITE( NOUNIT, FMT = 9999 )'CHPEV(V,' // UPLO // ')',
01682 $ IINFO, N, JTYPE, IOLDSD
01683 INFO = ABS( IINFO )
01684 IF( IINFO.LT.0 ) THEN
01685 RETURN
01686 ELSE
01687 RESULT( NTEST ) = ULPINV
01688 RESULT( NTEST+1 ) = ULPINV
01689 RESULT( NTEST+2 ) = ULPINV
01690 GO TO 1050
01691 END IF
01692 END IF
01693
01694
01695
01696 CALL CHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
01697 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01698
01699 IF( IUPLO.EQ.1 ) THEN
01700 INDX = 1
01701 DO 1010 J = 1, N
01702 DO 1000 I = 1, J
01703 WORK( INDX ) = A( I, J )
01704 INDX = INDX + 1
01705 1000 CONTINUE
01706 1010 CONTINUE
01707 ELSE
01708 INDX = 1
01709 DO 1030 J = 1, N
01710 DO 1020 I = J, N
01711 WORK( INDX ) = A( I, J )
01712 INDX = INDX + 1
01713 1020 CONTINUE
01714 1030 CONTINUE
01715 END IF
01716
01717 NTEST = NTEST + 2
01718 INDWRK = N*( N+1 ) / 2 + 1
01719 CALL CHPEV( 'N', UPLO, N, WORK, D3, Z, LDU,
01720 $ WORK( INDWRK ), RWORK, IINFO )
01721 IF( IINFO.NE.0 ) THEN
01722 WRITE( NOUNIT, FMT = 9999 )'CHPEV(N,' // UPLO // ')',
01723 $ IINFO, N, JTYPE, IOLDSD
01724 INFO = ABS( IINFO )
01725 IF( IINFO.LT.0 ) THEN
01726 RETURN
01727 ELSE
01728 RESULT( NTEST ) = ULPINV
01729 GO TO 1050
01730 END IF
01731 END IF
01732
01733
01734
01735 TEMP1 = ZERO
01736 TEMP2 = ZERO
01737 DO 1040 J = 1, N
01738 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
01739 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
01740 1040 CONTINUE
01741 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01742 $ ULP*MAX( TEMP1, TEMP2 ) )
01743
01744 1050 CONTINUE
01745
01746
01747
01748 IF( JTYPE.LE.7 ) THEN
01749 KD = 0
01750 ELSE IF( JTYPE.GE.8 .AND. JTYPE.LE.15 ) THEN
01751 KD = MAX( N-1, 0 )
01752 ELSE
01753 KD = IHBW
01754 END IF
01755
01756
01757
01758
01759 IF( IUPLO.EQ.1 ) THEN
01760 DO 1070 J = 1, N
01761 DO 1060 I = MAX( 1, J-KD ), J
01762 V( KD+1+I-J, J ) = A( I, J )
01763 1060 CONTINUE
01764 1070 CONTINUE
01765 ELSE
01766 DO 1090 J = 1, N
01767 DO 1080 I = J, MIN( N, J+KD )
01768 V( 1+I-J, J ) = A( I, J )
01769 1080 CONTINUE
01770 1090 CONTINUE
01771 END IF
01772
01773 NTEST = NTEST + 1
01774 CALL CHBEV( 'V', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
01775 $ RWORK, IINFO )
01776 IF( IINFO.NE.0 ) THEN
01777 WRITE( NOUNIT, FMT = 9998 )'CHBEV(V,' // UPLO // ')',
01778 $ IINFO, N, KD, JTYPE, IOLDSD
01779 INFO = ABS( IINFO )
01780 IF( IINFO.LT.0 ) THEN
01781 RETURN
01782 ELSE
01783 RESULT( NTEST ) = ULPINV
01784 RESULT( NTEST+1 ) = ULPINV
01785 RESULT( NTEST+2 ) = ULPINV
01786 GO TO 1140
01787 END IF
01788 END IF
01789
01790
01791
01792 CALL CHET21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
01793 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01794
01795 IF( IUPLO.EQ.1 ) THEN
01796 DO 1110 J = 1, N
01797 DO 1100 I = MAX( 1, J-KD ), J
01798 V( KD+1+I-J, J ) = A( I, J )
01799 1100 CONTINUE
01800 1110 CONTINUE
01801 ELSE
01802 DO 1130 J = 1, N
01803 DO 1120 I = J, MIN( N, J+KD )
01804 V( 1+I-J, J ) = A( I, J )
01805 1120 CONTINUE
01806 1130 CONTINUE
01807 END IF
01808
01809 NTEST = NTEST + 2
01810 CALL CHBEV( 'N', UPLO, N, KD, V, LDU, D3, Z, LDU, WORK,
01811 $ RWORK, IINFO )
01812 IF( IINFO.NE.0 ) THEN
01813 WRITE( NOUNIT, FMT = 9998 )'CHBEV(N,' // UPLO // ')',
01814 $ IINFO, N, KD, JTYPE, IOLDSD
01815 INFO = ABS( IINFO )
01816 IF( IINFO.LT.0 ) THEN
01817 RETURN
01818 ELSE
01819 RESULT( NTEST ) = ULPINV
01820 GO TO 1140
01821 END IF
01822 END IF
01823
01824 1140 CONTINUE
01825
01826
01827
01828 TEMP1 = ZERO
01829 TEMP2 = ZERO
01830 DO 1150 J = 1, N
01831 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
01832 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
01833 1150 CONTINUE
01834 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01835 $ ULP*MAX( TEMP1, TEMP2 ) )
01836
01837 CALL CLACPY( ' ', N, N, A, LDA, V, LDU )
01838 NTEST = NTEST + 1
01839 CALL CHEEVR( 'V', 'A', UPLO, N, A, LDU, VL, VU, IL, IU,
01840 $ ABSTOL, M, WA1, Z, LDU, IWORK, WORK, LWORK,
01841 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01842 $ IINFO )
01843 IF( IINFO.NE.0 ) THEN
01844 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(V,A,' // UPLO //
01845 $ ')', IINFO, N, JTYPE, IOLDSD
01846 INFO = ABS( IINFO )
01847 IF( IINFO.LT.0 ) THEN
01848 RETURN
01849 ELSE
01850 RESULT( NTEST ) = ULPINV
01851 RESULT( NTEST+1 ) = ULPINV
01852 RESULT( NTEST+2 ) = ULPINV
01853 GO TO 1170
01854 END IF
01855 END IF
01856
01857
01858
01859 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01860
01861 CALL CHET21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
01862 $ LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01863
01864 NTEST = NTEST + 2
01865 CALL CHEEVR( 'N', 'A', UPLO, N, A, LDU, VL, VU, IL, IU,
01866 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
01867 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01868 $ IINFO )
01869 IF( IINFO.NE.0 ) THEN
01870 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(N,A,' // UPLO //
01871 $ ')', IINFO, N, JTYPE, IOLDSD
01872 INFO = ABS( IINFO )
01873 IF( IINFO.LT.0 ) THEN
01874 RETURN
01875 ELSE
01876 RESULT( NTEST ) = ULPINV
01877 GO TO 1170
01878 END IF
01879 END IF
01880
01881
01882
01883 TEMP1 = ZERO
01884 TEMP2 = ZERO
01885 DO 1160 J = 1, N
01886 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
01887 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
01888 1160 CONTINUE
01889 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
01890 $ ULP*MAX( TEMP1, TEMP2 ) )
01891
01892 1170 CONTINUE
01893
01894 NTEST = NTEST + 1
01895 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01896 CALL CHEEVR( 'V', 'I', UPLO, N, A, LDU, VL, VU, IL, IU,
01897 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
01898 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01899 $ IINFO )
01900 IF( IINFO.NE.0 ) THEN
01901 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(V,I,' // UPLO //
01902 $ ')', IINFO, N, JTYPE, IOLDSD
01903 INFO = ABS( IINFO )
01904 IF( IINFO.LT.0 ) THEN
01905 RETURN
01906 ELSE
01907 RESULT( NTEST ) = ULPINV
01908 RESULT( NTEST+1 ) = ULPINV
01909 RESULT( NTEST+2 ) = ULPINV
01910 GO TO 1180
01911 END IF
01912 END IF
01913
01914
01915
01916 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01917
01918 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01919 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01920
01921 NTEST = NTEST + 2
01922 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01923 CALL CHEEVR( 'N', 'I', UPLO, N, A, LDU, VL, VU, IL, IU,
01924 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
01925 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01926 $ IINFO )
01927 IF( IINFO.NE.0 ) THEN
01928 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(N,I,' // UPLO //
01929 $ ')', IINFO, N, JTYPE, IOLDSD
01930 INFO = ABS( IINFO )
01931 IF( IINFO.LT.0 ) THEN
01932 RETURN
01933 ELSE
01934 RESULT( NTEST ) = ULPINV
01935 GO TO 1180
01936 END IF
01937 END IF
01938
01939
01940
01941 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
01942 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
01943 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
01944 $ MAX( UNFL, ULP*TEMP3 )
01945 1180 CONTINUE
01946
01947 NTEST = NTEST + 1
01948 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01949 CALL CHEEVR( 'V', 'V', UPLO, N, A, LDU, VL, VU, IL, IU,
01950 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
01951 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01952 $ IINFO )
01953 IF( IINFO.NE.0 ) THEN
01954 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(V,V,' // UPLO //
01955 $ ')', IINFO, N, JTYPE, IOLDSD
01956 INFO = ABS( IINFO )
01957 IF( IINFO.LT.0 ) THEN
01958 RETURN
01959 ELSE
01960 RESULT( NTEST ) = ULPINV
01961 RESULT( NTEST+1 ) = ULPINV
01962 RESULT( NTEST+2 ) = ULPINV
01963 GO TO 1190
01964 END IF
01965 END IF
01966
01967
01968
01969 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01970
01971 CALL CHET22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
01972 $ V, LDU, TAU, WORK, RWORK, RESULT( NTEST ) )
01973
01974 NTEST = NTEST + 2
01975 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
01976 CALL CHEEVR( 'N', 'V', UPLO, N, A, LDU, VL, VU, IL, IU,
01977 $ ABSTOL, M3, WA3, Z, LDU, IWORK, WORK, LWORK,
01978 $ RWORK, LRWORK, IWORK( 2*N+1 ), LIWORK-2*N,
01979 $ IINFO )
01980 IF( IINFO.NE.0 ) THEN
01981 WRITE( NOUNIT, FMT = 9999 )'CHEEVR(N,V,' // UPLO //
01982 $ ')', IINFO, N, JTYPE, IOLDSD
01983 INFO = ABS( IINFO )
01984 IF( IINFO.LT.0 ) THEN
01985 RETURN
01986 ELSE
01987 RESULT( NTEST ) = ULPINV
01988 GO TO 1190
01989 END IF
01990 END IF
01991
01992 IF( M3.EQ.0 .AND. N.GT.0 ) THEN
01993 RESULT( NTEST ) = ULPINV
01994 GO TO 1190
01995 END IF
01996
01997
01998
01999 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
02000 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
02001 IF( N.GT.0 ) THEN
02002 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
02003 ELSE
02004 TEMP3 = ZERO
02005 END IF
02006 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
02007 $ MAX( UNFL, TEMP3*ULP )
02008
02009 CALL CLACPY( ' ', N, N, V, LDU, A, LDA )
02010
02011
02012
02013
02014
02015
02016
02017 1190 CONTINUE
02018
02019 1200 CONTINUE
02020
02021
02022
02023 NTESTT = NTESTT + NTEST
02024 CALL SLAFTS( 'CST', N, N, JTYPE, NTEST, RESULT, IOLDSD,
02025 $ THRESH, NOUNIT, NERRS )
02026
02027 1210 CONTINUE
02028 1220 CONTINUE
02029
02030
02031
02032 CALL ALASVM( 'CST', NOUNIT, NERRS, NTESTT, 0 )
02033
02034 9999 FORMAT( ' CDRVST: ', A, ' returned INFO=', I6, / 9X, 'N=', I6,
02035 $ ', JTYPE=', I6, ', ISEED=(', 3( I5, ',' ), I5, ')' )
02036 9998 FORMAT( ' CDRVST: ', A, ' returned INFO=', I6, / 9X, 'N=', I6,
02037 $ ', KD=', I6, ', JTYPE=', I6, ', ISEED=(', 3( I5, ',' ), I5,
02038 $ ')' )
02039
02040 RETURN
02041
02042
02043
02044 END