1*> \brief \b ZDRVGE 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE ZDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, 12* A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK, 13* RWORK, IWORK, NOUT ) 14* 15* .. Scalar Arguments .. 16* LOGICAL TSTERR 17* INTEGER NMAX, NN, NOUT, NRHS 18* DOUBLE PRECISION THRESH 19* .. 20* .. Array Arguments .. 21* LOGICAL DOTYPE( * ) 22* INTEGER IWORK( * ), NVAL( * ) 23* DOUBLE PRECISION RWORK( * ), S( * ) 24* COMPLEX*16 A( * ), AFAC( * ), ASAV( * ), B( * ), 25* $ BSAV( * ), WORK( * ), X( * ), XACT( * ) 26* .. 27* 28* 29*> \par Purpose: 30* ============= 31*> 32*> \verbatim 33*> 34*> ZDRVGE tests the driver routines ZGESV and -SVX. 35*> \endverbatim 36* 37* Arguments: 38* ========== 39* 40*> \param[in] DOTYPE 41*> \verbatim 42*> DOTYPE is LOGICAL array, dimension (NTYPES) 43*> The matrix types to be used for testing. Matrices of type j 44*> (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) = 45*> .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used. 46*> \endverbatim 47*> 48*> \param[in] NN 49*> \verbatim 50*> NN is INTEGER 51*> The number of values of N contained in the vector NVAL. 52*> \endverbatim 53*> 54*> \param[in] NVAL 55*> \verbatim 56*> NVAL is INTEGER array, dimension (NN) 57*> The values of the matrix column dimension N. 58*> \endverbatim 59*> 60*> \param[in] NRHS 61*> \verbatim 62*> NRHS is INTEGER 63*> The number of right hand side vectors to be generated for 64*> each linear system. 65*> \endverbatim 66*> 67*> \param[in] THRESH 68*> \verbatim 69*> THRESH is DOUBLE PRECISION 70*> The threshold value for the test ratios. A result is 71*> included in the output file if RESULT >= THRESH. To have 72*> every test ratio printed, use THRESH = 0. 73*> \endverbatim 74*> 75*> \param[in] TSTERR 76*> \verbatim 77*> TSTERR is LOGICAL 78*> Flag that indicates whether error exits are to be tested. 79*> \endverbatim 80*> 81*> \param[in] NMAX 82*> \verbatim 83*> NMAX is INTEGER 84*> The maximum value permitted for N, used in dimensioning the 85*> work arrays. 86*> \endverbatim 87*> 88*> \param[out] A 89*> \verbatim 90*> A is COMPLEX*16 array, dimension (NMAX*NMAX) 91*> \endverbatim 92*> 93*> \param[out] AFAC 94*> \verbatim 95*> AFAC is COMPLEX*16 array, dimension (NMAX*NMAX) 96*> \endverbatim 97*> 98*> \param[out] ASAV 99*> \verbatim 100*> ASAV is COMPLEX*16 array, dimension (NMAX*NMAX) 101*> \endverbatim 102*> 103*> \param[out] B 104*> \verbatim 105*> B is COMPLEX*16 array, dimension (NMAX*NRHS) 106*> \endverbatim 107*> 108*> \param[out] BSAV 109*> \verbatim 110*> BSAV is COMPLEX*16 array, dimension (NMAX*NRHS) 111*> \endverbatim 112*> 113*> \param[out] X 114*> \verbatim 115*> X is COMPLEX*16 array, dimension (NMAX*NRHS) 116*> \endverbatim 117*> 118*> \param[out] XACT 119*> \verbatim 120*> XACT is COMPLEX*16 array, dimension (NMAX*NRHS) 121*> \endverbatim 122*> 123*> \param[out] S 124*> \verbatim 125*> S is DOUBLE PRECISION array, dimension (2*NMAX) 126*> \endverbatim 127*> 128*> \param[out] WORK 129*> \verbatim 130*> WORK is COMPLEX*16 array, dimension 131*> (NMAX*max(3,NRHS)) 132*> \endverbatim 133*> 134*> \param[out] RWORK 135*> \verbatim 136*> RWORK is DOUBLE PRECISION array, dimension (2*NRHS+NMAX) 137*> \endverbatim 138*> 139*> \param[out] IWORK 140*> \verbatim 141*> IWORK is INTEGER array, dimension (NMAX) 142*> \endverbatim 143*> 144*> \param[in] NOUT 145*> \verbatim 146*> NOUT is INTEGER 147*> The unit number for output. 148*> \endverbatim 149* 150* Authors: 151* ======== 152* 153*> \author Univ. of Tennessee 154*> \author Univ. of California Berkeley 155*> \author Univ. of Colorado Denver 156*> \author NAG Ltd. 157* 158*> \ingroup complex16_lin 159* 160* ===================================================================== 161 SUBROUTINE ZDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, 162 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK, 163 $ RWORK, IWORK, NOUT ) 164* 165* -- LAPACK test routine -- 166* -- LAPACK is a software package provided by Univ. of Tennessee, -- 167* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 168* 169* .. Scalar Arguments .. 170 LOGICAL TSTERR 171 INTEGER NMAX, NN, NOUT, NRHS 172 DOUBLE PRECISION THRESH 173* .. 174* .. Array Arguments .. 175 LOGICAL DOTYPE( * ) 176 INTEGER IWORK( * ), NVAL( * ) 177 DOUBLE PRECISION RWORK( * ), S( * ) 178 COMPLEX*16 A( * ), AFAC( * ), ASAV( * ), B( * ), 179 $ BSAV( * ), WORK( * ), X( * ), XACT( * ) 180* .. 181* 182* ===================================================================== 183* 184* .. Parameters .. 185 DOUBLE PRECISION ONE, ZERO 186 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) 187 INTEGER NTYPES 188 PARAMETER ( NTYPES = 11 ) 189 INTEGER NTESTS 190 PARAMETER ( NTESTS = 7 ) 191 INTEGER NTRAN 192 PARAMETER ( NTRAN = 3 ) 193* .. 194* .. Local Scalars .. 195 LOGICAL EQUIL, NOFACT, PREFAC, TRFCON, ZEROT 196 CHARACTER DIST, EQUED, FACT, TRANS, TYPE, XTYPE 197 CHARACTER*3 PATH 198 INTEGER I, IEQUED, IFACT, IMAT, IN, INFO, IOFF, ITRAN, 199 $ IZERO, K, K1, KL, KU, LDA, LWORK, MODE, N, NB, 200 $ NBMIN, NERRS, NFACT, NFAIL, NIMAT, NRUN, NT 201 DOUBLE PRECISION AINVNM, AMAX, ANORM, ANORMI, ANORMO, CNDNUM, 202 $ COLCND, RCOND, RCONDC, RCONDI, RCONDO, ROLDC, 203 $ ROLDI, ROLDO, ROWCND, RPVGRW 204* .. 205* .. Local Arrays .. 206 CHARACTER EQUEDS( 4 ), FACTS( 3 ), TRANSS( NTRAN ) 207 INTEGER ISEED( 4 ), ISEEDY( 4 ) 208 DOUBLE PRECISION RDUM( 1 ), RESULT( NTESTS ) 209* .. 210* .. External Functions .. 211 LOGICAL LSAME 212 DOUBLE PRECISION DGET06, DLAMCH, ZLANGE, ZLANTR 213 EXTERNAL LSAME, DGET06, DLAMCH, ZLANGE, ZLANTR 214* .. 215* .. External Subroutines .. 216 EXTERNAL ALADHD, ALAERH, ALASVM, XLAENV, ZERRVX, ZGEEQU, 217 $ ZGESV, ZGESVX, ZGET01, ZGET02, ZGET04, ZGET07, 218 $ ZGETRF, ZGETRI, ZLACPY, ZLAQGE, ZLARHS, ZLASET, 219 $ ZLATB4, ZLATMS 220* .. 221* .. Intrinsic Functions .. 222 INTRINSIC ABS, DCMPLX, MAX 223* .. 224* .. Scalars in Common .. 225 LOGICAL LERR, OK 226 CHARACTER*32 SRNAMT 227 INTEGER INFOT, NUNIT 228* .. 229* .. Common blocks .. 230 COMMON / INFOC / INFOT, NUNIT, OK, LERR 231 COMMON / SRNAMC / SRNAMT 232* .. 233* .. Data statements .. 234 DATA ISEEDY / 1988, 1989, 1990, 1991 / 235 DATA TRANSS / 'N', 'T', 'C' / 236 DATA FACTS / 'F', 'N', 'E' / 237 DATA EQUEDS / 'N', 'R', 'C', 'B' / 238* .. 239* .. Executable Statements .. 240* 241* Initialize constants and the random number seed. 242* 243 PATH( 1: 1 ) = 'Zomplex precision' 244 PATH( 2: 3 ) = 'GE' 245 NRUN = 0 246 NFAIL = 0 247 NERRS = 0 248 DO 10 I = 1, 4 249 ISEED( I ) = ISEEDY( I ) 250 10 CONTINUE 251* 252* Test the error exits 253* 254 IF( TSTERR ) 255 $ CALL ZERRVX( PATH, NOUT ) 256 INFOT = 0 257* 258* Set the block size and minimum block size for testing. 259* 260 NB = 1 261 NBMIN = 2 262 CALL XLAENV( 1, NB ) 263 CALL XLAENV( 2, NBMIN ) 264* 265* Do for each value of N in NVAL 266* 267 DO 90 IN = 1, NN 268 N = NVAL( IN ) 269 LDA = MAX( N, 1 ) 270 XTYPE = 'N' 271 NIMAT = NTYPES 272 IF( N.LE.0 ) 273 $ NIMAT = 1 274* 275 DO 80 IMAT = 1, NIMAT 276* 277* Do the tests only if DOTYPE( IMAT ) is true. 278* 279 IF( .NOT.DOTYPE( IMAT ) ) 280 $ GO TO 80 281* 282* Skip types 5, 6, or 7 if the matrix size is too small. 283* 284 ZEROT = IMAT.GE.5 .AND. IMAT.LE.7 285 IF( ZEROT .AND. N.LT.IMAT-4 ) 286 $ GO TO 80 287* 288* Set up parameters with ZLATB4 and generate a test matrix 289* with ZLATMS. 290* 291 CALL ZLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE, 292 $ CNDNUM, DIST ) 293 RCONDC = ONE / CNDNUM 294* 295 SRNAMT = 'ZLATMS' 296 CALL ZLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE, CNDNUM, 297 $ ANORM, KL, KU, 'No packing', A, LDA, WORK, 298 $ INFO ) 299* 300* Check error code from ZLATMS. 301* 302 IF( INFO.NE.0 ) THEN 303 CALL ALAERH( PATH, 'ZLATMS', INFO, 0, ' ', N, N, -1, -1, 304 $ -1, IMAT, NFAIL, NERRS, NOUT ) 305 GO TO 80 306 END IF 307* 308* For types 5-7, zero one or more columns of the matrix to 309* test that INFO is returned correctly. 310* 311 IF( ZEROT ) THEN 312 IF( IMAT.EQ.5 ) THEN 313 IZERO = 1 314 ELSE IF( IMAT.EQ.6 ) THEN 315 IZERO = N 316 ELSE 317 IZERO = N / 2 + 1 318 END IF 319 IOFF = ( IZERO-1 )*LDA 320 IF( IMAT.LT.7 ) THEN 321 DO 20 I = 1, N 322 A( IOFF+I ) = ZERO 323 20 CONTINUE 324 ELSE 325 CALL ZLASET( 'Full', N, N-IZERO+1, DCMPLX( ZERO ), 326 $ DCMPLX( ZERO ), A( IOFF+1 ), LDA ) 327 END IF 328 ELSE 329 IZERO = 0 330 END IF 331* 332* Save a copy of the matrix A in ASAV. 333* 334 CALL ZLACPY( 'Full', N, N, A, LDA, ASAV, LDA ) 335* 336 DO 70 IEQUED = 1, 4 337 EQUED = EQUEDS( IEQUED ) 338 IF( IEQUED.EQ.1 ) THEN 339 NFACT = 3 340 ELSE 341 NFACT = 1 342 END IF 343* 344 DO 60 IFACT = 1, NFACT 345 FACT = FACTS( IFACT ) 346 PREFAC = LSAME( FACT, 'F' ) 347 NOFACT = LSAME( FACT, 'N' ) 348 EQUIL = LSAME( FACT, 'E' ) 349* 350 IF( ZEROT ) THEN 351 IF( PREFAC ) 352 $ GO TO 60 353 RCONDO = ZERO 354 RCONDI = ZERO 355* 356 ELSE IF( .NOT.NOFACT ) THEN 357* 358* Compute the condition number for comparison with 359* the value returned by ZGESVX (FACT = 'N' reuses 360* the condition number from the previous iteration 361* with FACT = 'F'). 362* 363 CALL ZLACPY( 'Full', N, N, ASAV, LDA, AFAC, LDA ) 364 IF( EQUIL .OR. IEQUED.GT.1 ) THEN 365* 366* Compute row and column scale factors to 367* equilibrate the matrix A. 368* 369 CALL ZGEEQU( N, N, AFAC, LDA, S, S( N+1 ), 370 $ ROWCND, COLCND, AMAX, INFO ) 371 IF( INFO.EQ.0 .AND. N.GT.0 ) THEN 372 IF( LSAME( EQUED, 'R' ) ) THEN 373 ROWCND = ZERO 374 COLCND = ONE 375 ELSE IF( LSAME( EQUED, 'C' ) ) THEN 376 ROWCND = ONE 377 COLCND = ZERO 378 ELSE IF( LSAME( EQUED, 'B' ) ) THEN 379 ROWCND = ZERO 380 COLCND = ZERO 381 END IF 382* 383* Equilibrate the matrix. 384* 385 CALL ZLAQGE( N, N, AFAC, LDA, S, S( N+1 ), 386 $ ROWCND, COLCND, AMAX, EQUED ) 387 END IF 388 END IF 389* 390* Save the condition number of the non-equilibrated 391* system for use in ZGET04. 392* 393 IF( EQUIL ) THEN 394 ROLDO = RCONDO 395 ROLDI = RCONDI 396 END IF 397* 398* Compute the 1-norm and infinity-norm of A. 399* 400 ANORMO = ZLANGE( '1', N, N, AFAC, LDA, RWORK ) 401 ANORMI = ZLANGE( 'I', N, N, AFAC, LDA, RWORK ) 402* 403* Factor the matrix A. 404* 405 SRNAMT = 'ZGETRF' 406 CALL ZGETRF( N, N, AFAC, LDA, IWORK, INFO ) 407* 408* Form the inverse of A. 409* 410 CALL ZLACPY( 'Full', N, N, AFAC, LDA, A, LDA ) 411 LWORK = NMAX*MAX( 3, NRHS ) 412 SRNAMT = 'ZGETRI' 413 CALL ZGETRI( N, A, LDA, IWORK, WORK, LWORK, INFO ) 414* 415* Compute the 1-norm condition number of A. 416* 417 AINVNM = ZLANGE( '1', N, N, A, LDA, RWORK ) 418 IF( ANORMO.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN 419 RCONDO = ONE 420 ELSE 421 RCONDO = ( ONE / ANORMO ) / AINVNM 422 END IF 423* 424* Compute the infinity-norm condition number of A. 425* 426 AINVNM = ZLANGE( 'I', N, N, A, LDA, RWORK ) 427 IF( ANORMI.LE.ZERO .OR. AINVNM.LE.ZERO ) THEN 428 RCONDI = ONE 429 ELSE 430 RCONDI = ( ONE / ANORMI ) / AINVNM 431 END IF 432 END IF 433* 434 DO 50 ITRAN = 1, NTRAN 435* 436* Do for each value of TRANS. 437* 438 TRANS = TRANSS( ITRAN ) 439 IF( ITRAN.EQ.1 ) THEN 440 RCONDC = RCONDO 441 ELSE 442 RCONDC = RCONDI 443 END IF 444* 445* Restore the matrix A. 446* 447 CALL ZLACPY( 'Full', N, N, ASAV, LDA, A, LDA ) 448* 449* Form an exact solution and set the right hand side. 450* 451 SRNAMT = 'ZLARHS' 452 CALL ZLARHS( PATH, XTYPE, 'Full', TRANS, N, N, KL, 453 $ KU, NRHS, A, LDA, XACT, LDA, B, LDA, 454 $ ISEED, INFO ) 455 XTYPE = 'C' 456 CALL ZLACPY( 'Full', N, NRHS, B, LDA, BSAV, LDA ) 457* 458 IF( NOFACT .AND. ITRAN.EQ.1 ) THEN 459* 460* --- Test ZGESV --- 461* 462* Compute the LU factorization of the matrix and 463* solve the system. 464* 465 CALL ZLACPY( 'Full', N, N, A, LDA, AFAC, LDA ) 466 CALL ZLACPY( 'Full', N, NRHS, B, LDA, X, LDA ) 467* 468 SRNAMT = 'ZGESV ' 469 CALL ZGESV( N, NRHS, AFAC, LDA, IWORK, X, LDA, 470 $ INFO ) 471* 472* Check error code from ZGESV . 473* 474 IF( INFO.NE.IZERO ) 475 $ CALL ALAERH( PATH, 'ZGESV ', INFO, IZERO, 476 $ ' ', N, N, -1, -1, NRHS, IMAT, 477 $ NFAIL, NERRS, NOUT ) 478* 479* Reconstruct matrix from factors and compute 480* residual. 481* 482 CALL ZGET01( N, N, A, LDA, AFAC, LDA, IWORK, 483 $ RWORK, RESULT( 1 ) ) 484 NT = 1 485 IF( IZERO.EQ.0 ) THEN 486* 487* Compute residual of the computed solution. 488* 489 CALL ZLACPY( 'Full', N, NRHS, B, LDA, WORK, 490 $ LDA ) 491 CALL ZGET02( 'No transpose', N, N, NRHS, A, 492 $ LDA, X, LDA, WORK, LDA, RWORK, 493 $ RESULT( 2 ) ) 494* 495* Check solution from generated exact solution. 496* 497 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, 498 $ RCONDC, RESULT( 3 ) ) 499 NT = 3 500 END IF 501* 502* Print information about the tests that did not 503* pass the threshold. 504* 505 DO 30 K = 1, NT 506 IF( RESULT( K ).GE.THRESH ) THEN 507 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 508 $ CALL ALADHD( NOUT, PATH ) 509 WRITE( NOUT, FMT = 9999 )'ZGESV ', N, 510 $ IMAT, K, RESULT( K ) 511 NFAIL = NFAIL + 1 512 END IF 513 30 CONTINUE 514 NRUN = NRUN + NT 515 END IF 516* 517* --- Test ZGESVX --- 518* 519 IF( .NOT.PREFAC ) 520 $ CALL ZLASET( 'Full', N, N, DCMPLX( ZERO ), 521 $ DCMPLX( ZERO ), AFAC, LDA ) 522 CALL ZLASET( 'Full', N, NRHS, DCMPLX( ZERO ), 523 $ DCMPLX( ZERO ), X, LDA ) 524 IF( IEQUED.GT.1 .AND. N.GT.0 ) THEN 525* 526* Equilibrate the matrix if FACT = 'F' and 527* EQUED = 'R', 'C', or 'B'. 528* 529 CALL ZLAQGE( N, N, A, LDA, S, S( N+1 ), ROWCND, 530 $ COLCND, AMAX, EQUED ) 531 END IF 532* 533* Solve the system and compute the condition number 534* and error bounds using ZGESVX. 535* 536 SRNAMT = 'ZGESVX' 537 CALL ZGESVX( FACT, TRANS, N, NRHS, A, LDA, AFAC, 538 $ LDA, IWORK, EQUED, S, S( N+1 ), B, 539 $ LDA, X, LDA, RCOND, RWORK, 540 $ RWORK( NRHS+1 ), WORK, 541 $ RWORK( 2*NRHS+1 ), INFO ) 542* 543* Check the error code from ZGESVX. 544* 545 IF( INFO.NE.IZERO ) 546 $ CALL ALAERH( PATH, 'ZGESVX', INFO, IZERO, 547 $ FACT // TRANS, N, N, -1, -1, NRHS, 548 $ IMAT, NFAIL, NERRS, NOUT ) 549* 550* Compare RWORK(2*NRHS+1) from ZGESVX with the 551* computed reciprocal pivot growth factor RPVGRW 552* 553 IF( INFO.NE.0 .AND. INFO.LE.N) THEN 554 RPVGRW = ZLANTR( 'M', 'U', 'N', INFO, INFO, 555 $ AFAC, LDA, RDUM ) 556 IF( RPVGRW.EQ.ZERO ) THEN 557 RPVGRW = ONE 558 ELSE 559 RPVGRW = ZLANGE( 'M', N, INFO, A, LDA, 560 $ RDUM ) / RPVGRW 561 END IF 562 ELSE 563 RPVGRW = ZLANTR( 'M', 'U', 'N', N, N, AFAC, LDA, 564 $ RDUM ) 565 IF( RPVGRW.EQ.ZERO ) THEN 566 RPVGRW = ONE 567 ELSE 568 RPVGRW = ZLANGE( 'M', N, N, A, LDA, RDUM ) / 569 $ RPVGRW 570 END IF 571 END IF 572 RESULT( 7 ) = ABS( RPVGRW-RWORK( 2*NRHS+1 ) ) / 573 $ MAX( RWORK( 2*NRHS+1 ), RPVGRW ) / 574 $ DLAMCH( 'E' ) 575* 576 IF( .NOT.PREFAC ) THEN 577* 578* Reconstruct matrix from factors and compute 579* residual. 580* 581 CALL ZGET01( N, N, A, LDA, AFAC, LDA, IWORK, 582 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) ) 583 K1 = 1 584 ELSE 585 K1 = 2 586 END IF 587* 588 IF( INFO.EQ.0 ) THEN 589 TRFCON = .FALSE. 590* 591* Compute residual of the computed solution. 592* 593 CALL ZLACPY( 'Full', N, NRHS, BSAV, LDA, WORK, 594 $ LDA ) 595 CALL ZGET02( TRANS, N, N, NRHS, ASAV, LDA, X, 596 $ LDA, WORK, LDA, RWORK( 2*NRHS+1 ), 597 $ RESULT( 2 ) ) 598* 599* Check solution from generated exact solution. 600* 601 IF( NOFACT .OR. ( PREFAC .AND. LSAME( EQUED, 602 $ 'N' ) ) ) THEN 603 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, 604 $ RCONDC, RESULT( 3 ) ) 605 ELSE 606 IF( ITRAN.EQ.1 ) THEN 607 ROLDC = ROLDO 608 ELSE 609 ROLDC = ROLDI 610 END IF 611 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, 612 $ ROLDC, RESULT( 3 ) ) 613 END IF 614* 615* Check the error bounds from iterative 616* refinement. 617* 618 CALL ZGET07( TRANS, N, NRHS, ASAV, LDA, B, LDA, 619 $ X, LDA, XACT, LDA, RWORK, .TRUE., 620 $ RWORK( NRHS+1 ), RESULT( 4 ) ) 621 ELSE 622 TRFCON = .TRUE. 623 END IF 624* 625* Compare RCOND from ZGESVX with the computed value 626* in RCONDC. 627* 628 RESULT( 6 ) = DGET06( RCOND, RCONDC ) 629* 630* Print information about the tests that did not pass 631* the threshold. 632* 633 IF( .NOT.TRFCON ) THEN 634 DO 40 K = K1, NTESTS 635 IF( RESULT( K ).GE.THRESH ) THEN 636 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 637 $ CALL ALADHD( NOUT, PATH ) 638 IF( PREFAC ) THEN 639 WRITE( NOUT, FMT = 9997 )'ZGESVX', 640 $ FACT, TRANS, N, EQUED, IMAT, K, 641 $ RESULT( K ) 642 ELSE 643 WRITE( NOUT, FMT = 9998 )'ZGESVX', 644 $ FACT, TRANS, N, IMAT, K, RESULT( K ) 645 END IF 646 NFAIL = NFAIL + 1 647 END IF 648 40 CONTINUE 649 NRUN = NRUN + NTESTS - K1 + 1 650 ELSE 651 IF( RESULT( 1 ).GE.THRESH .AND. .NOT.PREFAC ) 652 $ THEN 653 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 654 $ CALL ALADHD( NOUT, PATH ) 655 IF( PREFAC ) THEN 656 WRITE( NOUT, FMT = 9997 )'ZGESVX', FACT, 657 $ TRANS, N, EQUED, IMAT, 1, RESULT( 1 ) 658 ELSE 659 WRITE( NOUT, FMT = 9998 )'ZGESVX', FACT, 660 $ TRANS, N, IMAT, 1, RESULT( 1 ) 661 END IF 662 NFAIL = NFAIL + 1 663 NRUN = NRUN + 1 664 END IF 665 IF( RESULT( 6 ).GE.THRESH ) THEN 666 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 667 $ CALL ALADHD( NOUT, PATH ) 668 IF( PREFAC ) THEN 669 WRITE( NOUT, FMT = 9997 )'ZGESVX', FACT, 670 $ TRANS, N, EQUED, IMAT, 6, RESULT( 6 ) 671 ELSE 672 WRITE( NOUT, FMT = 9998 )'ZGESVX', FACT, 673 $ TRANS, N, IMAT, 6, RESULT( 6 ) 674 END IF 675 NFAIL = NFAIL + 1 676 NRUN = NRUN + 1 677 END IF 678 IF( RESULT( 7 ).GE.THRESH ) THEN 679 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) 680 $ CALL ALADHD( NOUT, PATH ) 681 IF( PREFAC ) THEN 682 WRITE( NOUT, FMT = 9997 )'ZGESVX', FACT, 683 $ TRANS, N, EQUED, IMAT, 7, RESULT( 7 ) 684 ELSE 685 WRITE( NOUT, FMT = 9998 )'ZGESVX', FACT, 686 $ TRANS, N, IMAT, 7, RESULT( 7 ) 687 END IF 688 NFAIL = NFAIL + 1 689 NRUN = NRUN + 1 690 END IF 691* 692 END IF 693* 694 50 CONTINUE 695 60 CONTINUE 696 70 CONTINUE 697 80 CONTINUE 698 90 CONTINUE 699* 700* Print a summary of the results. 701* 702 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS ) 703* 704 9999 FORMAT( 1X, A, ', N =', I5, ', type ', I2, ', test(', I2, ') =', 705 $ G12.5 ) 706 9998 FORMAT( 1X, A, ', FACT=''', A1, ''', TRANS=''', A1, ''', N=', I5, 707 $ ', type ', I2, ', test(', I1, ')=', G12.5 ) 708 9997 FORMAT( 1X, A, ', FACT=''', A1, ''', TRANS=''', A1, ''', N=', I5, 709 $ ', EQUED=''', A1, ''', type ', I2, ', test(', I1, ')=', 710 $ G12.5 ) 711 RETURN 712* 713* End of ZDRVGE 714* 715 END 716