1*> \brief \b ZCHKAA 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* PROGRAM ZCHKAA 12* 13* 14*> \par Purpose: 15* ============= 16*> 17*> \verbatim 18*> 19*> ZCHKAA is the main test program for the COMPLEX*16 linear equation 20*> routines. 21*> 22*> The program must be driven by a short data file. The first 15 records 23*> (not including the first comment line) specify problem dimensions 24*> and program options using list-directed input. The remaining lines 25*> specify the LAPACK test paths and the number of matrix types to use 26*> in testing. An annotated example of a data file can be obtained by 27*> deleting the first 3 characters from the following 42 lines: 28*> Data file for testing COMPLEX*16 LAPACK linear equation routines 29*> 7 Number of values of M 30*> 0 1 2 3 5 10 16 Values of M (row dimension) 31*> 7 Number of values of N 32*> 0 1 2 3 5 10 16 Values of N (column dimension) 33*> 1 Number of values of NRHS 34*> 2 Values of NRHS (number of right hand sides) 35*> 5 Number of values of NB 36*> 1 3 3 3 20 Values of NB (the blocksize) 37*> 1 0 5 9 1 Values of NX (crossover point) 38*> 3 Number of values of RANK 39*> 30 50 90 Values of rank (as a % of N) 40*> 30.0 Threshold value of test ratio 41*> T Put T to test the LAPACK routines 42*> T Put T to test the driver routines 43*> T Put T to test the error exits 44*> ZGE 11 List types on next line if 0 < NTYPES < 11 45*> ZGB 8 List types on next line if 0 < NTYPES < 8 46*> ZGT 12 List types on next line if 0 < NTYPES < 12 47*> ZPO 9 List types on next line if 0 < NTYPES < 9 48*> ZPS 9 List types on next line if 0 < NTYPES < 9 49*> ZPP 9 List types on next line if 0 < NTYPES < 9 50*> ZPB 8 List types on next line if 0 < NTYPES < 8 51*> ZPT 12 List types on next line if 0 < NTYPES < 12 52*> ZHE 10 List types on next line if 0 < NTYPES < 10 53*> ZHR 10 List types on next line if 0 < NTYPES < 10 54*> ZHP 10 List types on next line if 0 < NTYPES < 10 55*> ZSY 11 List types on next line if 0 < NTYPES < 11 56*> ZSR 11 List types on next line if 0 < NTYPES < 11 57*> ZSP 11 List types on next line if 0 < NTYPES < 11 58*> ZTR 18 List types on next line if 0 < NTYPES < 18 59*> ZTP 18 List types on next line if 0 < NTYPES < 18 60*> ZTB 17 List types on next line if 0 < NTYPES < 17 61*> ZQR 8 List types on next line if 0 < NTYPES < 8 62*> ZRQ 8 List types on next line if 0 < NTYPES < 8 63*> ZLQ 8 List types on next line if 0 < NTYPES < 8 64*> ZQL 8 List types on next line if 0 < NTYPES < 8 65*> ZQP 6 List types on next line if 0 < NTYPES < 6 66*> ZTZ 3 List types on next line if 0 < NTYPES < 3 67*> ZLS 6 List types on next line if 0 < NTYPES < 6 68*> ZEQ 69*> ZQT 70*> ZQX 71*> \endverbatim 72* 73* Parameters: 74* ========== 75* 76*> \verbatim 77*> NMAX INTEGER 78*> The maximum allowable value for M and N. 79*> 80*> MAXIN INTEGER 81*> The number of different values that can be used for each of 82*> M, N, NRHS, NB, NX and RANK 83*> 84*> MAXRHS INTEGER 85*> The maximum number of right hand sides 86*> 87*> MATMAX INTEGER 88*> The maximum number of matrix types to use for testing 89*> 90*> NIN INTEGER 91*> The unit number for input 92*> 93*> NOUT INTEGER 94*> The unit number for output 95*> \endverbatim 96* 97* Authors: 98* ======== 99* 100*> \author Univ. of Tennessee 101*> \author Univ. of California Berkeley 102*> \author Univ. of Colorado Denver 103*> \author NAG Ltd. 104* 105*> \date November 2013 106* 107*> \ingroup complex16_lin 108* 109* ===================================================================== 110 PROGRAM ZCHKAA 111* 112* -- LAPACK test routine (version 3.5.0) -- 113* -- LAPACK is a software package provided by Univ. of Tennessee, -- 114* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 115* November 2013 116* 117* ===================================================================== 118* 119* .. Parameters .. 120 INTEGER NMAX 121 PARAMETER ( NMAX = 132 ) 122 INTEGER MAXIN 123 PARAMETER ( MAXIN = 12 ) 124 INTEGER MAXRHS 125 PARAMETER ( MAXRHS = 16 ) 126 INTEGER MATMAX 127 PARAMETER ( MATMAX = 30 ) 128 INTEGER NIN, NOUT 129 PARAMETER ( NIN = 5, NOUT = 6 ) 130 INTEGER KDMAX 131 PARAMETER ( KDMAX = NMAX+( NMAX+1 ) / 4 ) 132* .. 133* .. Local Scalars .. 134 LOGICAL FATAL, TSTCHK, TSTDRV, TSTERR 135 CHARACTER C1 136 CHARACTER*2 C2 137 CHARACTER*3 PATH 138 CHARACTER*10 INTSTR 139 CHARACTER*72 ALINE 140 INTEGER I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN, 141 $ NNB, NNB2, NNS, NRHS, NTYPES, NRANK, 142 $ VERS_MAJOR, VERS_MINOR, VERS_PATCH 143 DOUBLE PRECISION EPS, S1, S2, THREQ, THRESH 144* .. 145* .. Local Arrays .. 146 LOGICAL DOTYPE( MATMAX ) 147 INTEGER IWORK( 25*NMAX ), MVAL( MAXIN ), 148 $ NBVAL( MAXIN ), NBVAL2( MAXIN ), 149 $ NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ), 150 $ RANKVAL( MAXIN ), PIV( NMAX ) 151 DOUBLE PRECISION RWORK( 150*NMAX+2*MAXRHS ), S( 2*NMAX ) 152 COMPLEX*16 A( ( KDMAX+1 )*NMAX, 7 ), B( NMAX*MAXRHS, 4 ), 153 $ WORK( NMAX, NMAX+MAXRHS+10 ) 154* .. 155* .. External Functions .. 156 LOGICAL LSAME, LSAMEN 157 DOUBLE PRECISION DLAMCH, DSECND 158 EXTERNAL LSAME, LSAMEN, DLAMCH, DSECND 159* .. 160* .. External Subroutines .. 161 EXTERNAL ALAREQ, ZCHKEQ, ZCHKGB, ZCHKGE, ZCHKGT, ZCHKHE, 162 $ ZCHKHE_ROOK, ZCHKHP, ZCHKLQ, ZCHKPB, ZCHKPO, 163 $ ZCHKPS, ZCHKPP, ZCHKPT, ZCHKQ3, ZCHKQL, ZCHKQP, 164 $ ZCHKQR, ZCHKRQ, ZCHKSP, ZCHKSY, ZCHKSY_ROOK, 165 $ ZCHKTB, ZCHKTP, ZCHKTR, ZCHKTZ, ZDRVGB, ZDRVGE, 166 $ ZDRVGT, ZDRVHE, ZDRVHE_ROOK, ZDRVHP, ZDRVLS, 167 $ ZDRVPB, ZDRVPO, ZDRVPP, ZDRVPT, ZDRVSP, ZDRVSY, 168 $ ZDRVSY_ROOK, ILAVER, ZCHKQRT, ZCHKQRTP 169* .. 170* .. Scalars in Common .. 171 LOGICAL LERR, OK 172 CHARACTER*32 SRNAMT 173 INTEGER INFOT, NUNIT 174* .. 175* .. Arrays in Common .. 176 INTEGER IPARMS( 100 ) 177* .. 178* .. Common blocks .. 179 COMMON / INFOC / INFOT, NUNIT, OK, LERR 180 COMMON / SRNAMC / SRNAMT 181 COMMON / CLAENV / IPARMS 182* .. 183* .. Data statements .. 184 DATA THREQ / 2.0D0 / , INTSTR / '0123456789' / 185* .. 186* .. Executable Statements .. 187* 188#ifdef __FLAME__ 189 CALL FLA_INIT 190#endif 191 S1 = DSECND( ) 192 LDA = NMAX 193 FATAL = .FALSE. 194* 195* Read a dummy line. 196* 197 READ( NIN, FMT = * ) 198* 199* Report values of parameters. 200* 201 CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH ) 202 WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH 203* 204* Read the values of M 205* 206 READ( NIN, FMT = * )NM 207 IF( NM.LT.1 ) THEN 208 WRITE( NOUT, FMT = 9996 )' NM ', NM, 1 209 NM = 0 210 FATAL = .TRUE. 211 ELSE IF( NM.GT.MAXIN ) THEN 212 WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN 213 NM = 0 214 FATAL = .TRUE. 215 END IF 216 READ( NIN, FMT = * )( MVAL( I ), I = 1, NM ) 217 DO 10 I = 1, NM 218 IF( MVAL( I ).LT.0 ) THEN 219 WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0 220 FATAL = .TRUE. 221 ELSE IF( MVAL( I ).GT.NMAX ) THEN 222 WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX 223 FATAL = .TRUE. 224 END IF 225 10 CONTINUE 226 IF( NM.GT.0 ) 227 $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM ) 228* 229* Read the values of N 230* 231 READ( NIN, FMT = * )NN 232 IF( NN.LT.1 ) THEN 233 WRITE( NOUT, FMT = 9996 )' NN ', NN, 1 234 NN = 0 235 FATAL = .TRUE. 236 ELSE IF( NN.GT.MAXIN ) THEN 237 WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN 238 NN = 0 239 FATAL = .TRUE. 240 END IF 241 READ( NIN, FMT = * )( NVAL( I ), I = 1, NN ) 242 DO 20 I = 1, NN 243 IF( NVAL( I ).LT.0 ) THEN 244 WRITE( NOUT, FMT = 9996 )' N ', NVAL( I ), 0 245 FATAL = .TRUE. 246 ELSE IF( NVAL( I ).GT.NMAX ) THEN 247 WRITE( NOUT, FMT = 9995 )' N ', NVAL( I ), NMAX 248 FATAL = .TRUE. 249 END IF 250 20 CONTINUE 251 IF( NN.GT.0 ) 252 $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN ) 253* 254* Read the values of NRHS 255* 256 READ( NIN, FMT = * )NNS 257 IF( NNS.LT.1 ) THEN 258 WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1 259 NNS = 0 260 FATAL = .TRUE. 261 ELSE IF( NNS.GT.MAXIN ) THEN 262 WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN 263 NNS = 0 264 FATAL = .TRUE. 265 END IF 266 READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS ) 267 DO 30 I = 1, NNS 268 IF( NSVAL( I ).LT.0 ) THEN 269 WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0 270 FATAL = .TRUE. 271 ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN 272 WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS 273 FATAL = .TRUE. 274 END IF 275 30 CONTINUE 276 IF( NNS.GT.0 ) 277 $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS ) 278* 279* Read the values of NB 280* 281 READ( NIN, FMT = * )NNB 282 IF( NNB.LT.1 ) THEN 283 WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1 284 NNB = 0 285 FATAL = .TRUE. 286 ELSE IF( NNB.GT.MAXIN ) THEN 287 WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN 288 NNB = 0 289 FATAL = .TRUE. 290 END IF 291 READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB ) 292 DO 40 I = 1, NNB 293 IF( NBVAL( I ).LT.0 ) THEN 294 WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0 295 FATAL = .TRUE. 296 END IF 297 40 CONTINUE 298 IF( NNB.GT.0 ) 299 $ WRITE( NOUT, FMT = 9993 )'NB ', ( NBVAL( I ), I = 1, NNB ) 300* 301* Set NBVAL2 to be the set of unique values of NB 302* 303 NNB2 = 0 304 DO 60 I = 1, NNB 305 NB = NBVAL( I ) 306 DO 50 J = 1, NNB2 307 IF( NB.EQ.NBVAL2( J ) ) 308 $ GO TO 60 309 50 CONTINUE 310 NNB2 = NNB2 + 1 311 NBVAL2( NNB2 ) = NB 312 60 CONTINUE 313* 314* Read the values of NX 315* 316 READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB ) 317 DO 70 I = 1, NNB 318 IF( NXVAL( I ).LT.0 ) THEN 319 WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0 320 FATAL = .TRUE. 321 END IF 322 70 CONTINUE 323 IF( NNB.GT.0 ) 324 $ WRITE( NOUT, FMT = 9993 )'NX ', ( NXVAL( I ), I = 1, NNB ) 325* 326* Read the values of RANKVAL 327* 328 READ( NIN, FMT = * )NRANK 329 IF( NN.LT.1 ) THEN 330 WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1 331 NRANK = 0 332 FATAL = .TRUE. 333 ELSE IF( NN.GT.MAXIN ) THEN 334 WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN 335 NRANK = 0 336 FATAL = .TRUE. 337 END IF 338 READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK ) 339 DO I = 1, NRANK 340 IF( RANKVAL( I ).LT.0 ) THEN 341 WRITE( NOUT, FMT = 9996 )' RANK ', RANKVAL( I ), 0 342 FATAL = .TRUE. 343 ELSE IF( RANKVAL( I ).GT.100 ) THEN 344 WRITE( NOUT, FMT = 9995 )' RANK ', RANKVAL( I ), 100 345 FATAL = .TRUE. 346 END IF 347 END DO 348 IF( NRANK.GT.0 ) 349 $ WRITE( NOUT, FMT = 9993 )'RANK % OF N', 350 $ ( RANKVAL( I ), I = 1, NRANK ) 351* 352* Read the threshold value for the test ratios. 353* 354 READ( NIN, FMT = * )THRESH 355 WRITE( NOUT, FMT = 9992 )THRESH 356* 357* Read the flag that indicates whether to test the LAPACK routines. 358* 359 READ( NIN, FMT = * )TSTCHK 360* 361* Read the flag that indicates whether to test the driver routines. 362* 363 READ( NIN, FMT = * )TSTDRV 364* 365* Read the flag that indicates whether to test the error exits. 366* 367 READ( NIN, FMT = * )TSTERR 368* 369 IF( FATAL ) THEN 370 WRITE( NOUT, FMT = 9999 ) 371 STOP 372 END IF 373* 374* Calculate and print the machine dependent constants. 375* 376 EPS = DLAMCH( 'Underflow threshold' ) 377 WRITE( NOUT, FMT = 9991 )'underflow', EPS 378 EPS = DLAMCH( 'Overflow threshold' ) 379 WRITE( NOUT, FMT = 9991 )'overflow ', EPS 380 EPS = DLAMCH( 'Epsilon' ) 381 WRITE( NOUT, FMT = 9991 )'precision', EPS 382 WRITE( NOUT, FMT = * ) 383 NRHS = NSVAL( 1 ) 384* 385 80 CONTINUE 386* 387* Read a test path and the number of matrix types to use. 388* 389 READ( NIN, FMT = '(A72)', END = 140 )ALINE 390 PATH = ALINE( 1: 3 ) 391 NMATS = MATMAX 392 I = 3 393 90 CONTINUE 394 I = I + 1 395 IF( I.GT.72 ) 396 $ GO TO 130 397 IF( ALINE( I: I ).EQ.' ' ) 398 $ GO TO 90 399 NMATS = 0 400 100 CONTINUE 401 C1 = ALINE( I: I ) 402 DO 110 K = 1, 10 403 IF( C1.EQ.INTSTR( K: K ) ) THEN 404 IC = K - 1 405 GO TO 120 406 END IF 407 110 CONTINUE 408 GO TO 130 409 120 CONTINUE 410 NMATS = NMATS*10 + IC 411 I = I + 1 412 IF( I.GT.72 ) 413 $ GO TO 130 414 GO TO 100 415 130 CONTINUE 416 C1 = PATH( 1: 1 ) 417 C2 = PATH( 2: 3 ) 418* 419* Check first character for correct precision. 420* 421 IF( .NOT.LSAME( C1, 'Zomplex precision' ) ) THEN 422 WRITE( NOUT, FMT = 9990 )PATH 423* 424 ELSE IF( NMATS.LE.0 ) THEN 425* 426* Check for a positive number of tests requested. 427* 428 WRITE( NOUT, FMT = 9989 )PATH 429* 430 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN 431* 432* GE: general matrices 433* 434 NTYPES = 11 435 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 436* 437 IF( TSTCHK ) THEN 438 CALL ZCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS, 439 $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ), 440 $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), 441 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 442 ELSE 443 WRITE( NOUT, FMT = 9989 )PATH 444 END IF 445* 446 IF( TSTDRV ) THEN 447 CALL ZDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 448 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 449 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 450 $ RWORK, IWORK, NOUT ) 451 ELSE 452 WRITE( NOUT, FMT = 9988 )PATH 453 END IF 454* 455 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN 456* 457* GB: general banded matrices 458* 459 LA = ( 2*KDMAX+1 )*NMAX 460 LAFAC = ( 3*KDMAX+1 )*NMAX 461 NTYPES = 8 462 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 463* 464 IF( TSTCHK ) THEN 465 CALL ZCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS, 466 $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA, 467 $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ), 468 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 469 ELSE 470 WRITE( NOUT, FMT = 9989 )PATH 471 END IF 472* 473 IF( TSTDRV ) THEN 474 CALL ZDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 475 $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ), 476 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, 477 $ WORK, RWORK, IWORK, NOUT ) 478 ELSE 479 WRITE( NOUT, FMT = 9988 )PATH 480 END IF 481* 482 ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN 483* 484* GT: general tridiagonal matrices 485* 486 NTYPES = 12 487 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 488* 489 IF( TSTCHK ) THEN 490 CALL ZCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 491 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 492 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 493 ELSE 494 WRITE( NOUT, FMT = 9989 )PATH 495 END IF 496* 497 IF( TSTDRV ) THEN 498 CALL ZDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 499 $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 500 $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT ) 501 ELSE 502 WRITE( NOUT, FMT = 9988 )PATH 503 END IF 504* 505 ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN 506* 507* PO: positive definite matrices 508* 509 NTYPES = 9 510 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 511* 512 IF( TSTCHK ) THEN 513 CALL ZCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 514 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 515 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 516 $ WORK, RWORK, NOUT ) 517 ELSE 518 WRITE( NOUT, FMT = 9989 )PATH 519 END IF 520* 521 IF( TSTDRV ) THEN 522 CALL ZDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 523 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 524 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 525 $ RWORK, NOUT ) 526 ELSE 527 WRITE( NOUT, FMT = 9988 )PATH 528 END IF 529* 530 ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN 531* 532* PS: positive semi-definite matrices 533* 534 NTYPES = 9 535* 536 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 537* 538 IF( TSTCHK ) THEN 539 CALL ZCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK, 540 $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ), 541 $ A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK, 542 $ NOUT ) 543 ELSE 544 WRITE( NOUT, FMT = 9989 )PATH 545 END IF 546* 547 ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN 548* 549* PP: positive definite packed matrices 550* 551 NTYPES = 9 552 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 553* 554 IF( TSTCHK ) THEN 555 CALL ZCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 556 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 557 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 558 $ NOUT ) 559 ELSE 560 WRITE( NOUT, FMT = 9989 )PATH 561 END IF 562* 563 IF( TSTDRV ) THEN 564 CALL ZDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 565 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 566 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 567 $ RWORK, NOUT ) 568 ELSE 569 WRITE( NOUT, FMT = 9988 )PATH 570 END IF 571* 572 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN 573* 574* PB: positive definite banded matrices 575* 576 NTYPES = 8 577 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 578* 579 IF( TSTCHK ) THEN 580 CALL ZCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 581 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 582 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 583 $ WORK, RWORK, NOUT ) 584 ELSE 585 WRITE( NOUT, FMT = 9989 )PATH 586 END IF 587* 588 IF( TSTDRV ) THEN 589 CALL ZDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 590 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 591 $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK, 592 $ RWORK, NOUT ) 593 ELSE 594 WRITE( NOUT, FMT = 9988 )PATH 595 END IF 596* 597 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN 598* 599* PT: positive definite tridiagonal matrices 600* 601 NTYPES = 12 602 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 603* 604 IF( TSTCHK ) THEN 605 CALL ZCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 606 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 607 $ B( 1, 3 ), WORK, RWORK, NOUT ) 608 ELSE 609 WRITE( NOUT, FMT = 9989 )PATH 610 END IF 611* 612 IF( TSTDRV ) THEN 613 CALL ZDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 614 $ A( 1, 1 ), S, A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), 615 $ B( 1, 3 ), WORK, RWORK, NOUT ) 616 ELSE 617 WRITE( NOUT, FMT = 9988 )PATH 618 END IF 619* 620 ELSE IF( LSAMEN( 2, C2, 'HE' ) ) THEN 621* 622* HE: Hermitian indefinite matrices 623* 624 NTYPES = 10 625 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 626* 627 IF( TSTCHK ) THEN 628 CALL ZCHKHE( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 629 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 630 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 631 $ WORK, RWORK, IWORK, NOUT ) 632 ELSE 633 WRITE( NOUT, FMT = 9989 )PATH 634 END IF 635* 636 IF( TSTDRV ) THEN 637 CALL ZDRVHE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 638 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 639 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 640 $ NOUT ) 641 ELSE 642 WRITE( NOUT, FMT = 9988 )PATH 643 END IF 644* 645 ELSE IF( LSAMEN( 2, C2, 'HR' ) ) THEN 646* 647* HR: Hermitian indefinite matrices, 648* with "rook" (bounded Bunch-Kaufman) pivoting algorithm 649* 650 NTYPES = 10 651 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 652* 653 IF( TSTCHK ) THEN 654 CALL ZCHKHE_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 655 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 656 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 657 $ WORK, RWORK, IWORK, NOUT ) 658 ELSE 659 WRITE( NOUT, FMT = 9989 )PATH 660 END IF 661* 662 IF( TSTDRV ) THEN 663 CALL ZDRVHE_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 664 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 665 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, 666 $ RWORK, IWORK, NOUT ) 667 ELSE 668 WRITE( NOUT, FMT = 9988 )PATH 669 END IF 670* 671 ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN 672* 673* HP: Hermitian indefinite packed matrices 674* 675 NTYPES = 10 676 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 677* 678 IF( TSTCHK ) THEN 679 CALL ZCHKHP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 680 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 681 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 682 $ IWORK, NOUT ) 683 ELSE 684 WRITE( NOUT, FMT = 9989 )PATH 685 END IF 686* 687 IF( TSTDRV ) THEN 688 CALL ZDRVHP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 689 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 690 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 691 $ NOUT ) 692 ELSE 693 WRITE( NOUT, FMT = 9988 )PATH 694 END IF 695* 696 ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN 697* 698* SY: symmetric indefinite matrices, 699* with partial (Bunch-Kaufman) pivoting algorithm 700* 701 NTYPES = 11 702 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 703* 704 IF( TSTCHK ) THEN 705 CALL ZCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 706 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 707 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 708 $ WORK, RWORK, IWORK, NOUT ) 709 ELSE 710 WRITE( NOUT, FMT = 9989 )PATH 711 END IF 712* 713 IF( TSTDRV ) THEN 714 CALL ZDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 715 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 716 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 717 $ NOUT ) 718 ELSE 719 WRITE( NOUT, FMT = 9988 )PATH 720 END IF 721* 722 ELSE IF( LSAMEN( 2, C2, 'SR' ) ) THEN 723* 724* SR: symmetric indefinite matrices, 725* with "rook" (bounded Bunch-Kaufman) pivoting algorithm 726* 727 NTYPES = 11 728 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 729* 730 IF( TSTCHK ) THEN 731 CALL ZCHKSY_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 732 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 733 $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), 734 $ WORK, RWORK, IWORK, NOUT ) 735 ELSE 736 WRITE( NOUT, FMT = 9989 )PATH 737 END IF 738* 739 IF( TSTDRV ) THEN 740 CALL ZDRVSY_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, 741 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 742 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, 743 $ RWORK, IWORK, NOUT ) 744 ELSE 745 WRITE( NOUT, FMT = 9988 )PATH 746 END IF 747* 748 ELSE IF( LSAMEN( 2, C2, 'SP' ) ) THEN 749* 750* SP: symmetric indefinite packed matrices, 751* with partial (Bunch-Kaufman) pivoting algorithm 752* 753 NTYPES = 11 754 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 755* 756 IF( TSTCHK ) THEN 757 CALL ZCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 758 $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), 759 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 760 $ IWORK, NOUT ) 761 ELSE 762 WRITE( NOUT, FMT = 9989 )PATH 763 END IF 764* 765 IF( TSTDRV ) THEN 766 CALL ZDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA, 767 $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), 768 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK, 769 $ NOUT ) 770 ELSE 771 WRITE( NOUT, FMT = 9988 )PATH 772 END IF 773* 774 ELSE IF( LSAMEN( 2, C2, 'TR' ) ) THEN 775* 776* TR: triangular matrices 777* 778 NTYPES = 18 779 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 780* 781 IF( TSTCHK ) THEN 782 CALL ZCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL, 783 $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ), 784 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK, 785 $ NOUT ) 786 ELSE 787 WRITE( NOUT, FMT = 9989 )PATH 788 END IF 789* 790 ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN 791* 792* TP: triangular packed matrices 793* 794 NTYPES = 18 795 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 796* 797 IF( TSTCHK ) THEN 798 CALL ZCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 799 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), 800 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT ) 801 ELSE 802 WRITE( NOUT, FMT = 9989 )PATH 803 END IF 804* 805 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN 806* 807* TB: triangular banded matrices 808* 809 NTYPES = 17 810 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 811* 812 IF( TSTCHK ) THEN 813 CALL ZCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, 814 $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), 815 $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT ) 816 ELSE 817 WRITE( NOUT, FMT = 9989 )PATH 818 END IF 819* 820 ELSE IF( LSAMEN( 2, C2, 'QR' ) ) THEN 821* 822* QR: QR factorization 823* 824 NTYPES = 8 825 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 826* 827 IF( TSTCHK ) THEN 828 CALL ZCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 829 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 830 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 831 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 832 $ WORK, RWORK, IWORK, NOUT ) 833 ELSE 834 WRITE( NOUT, FMT = 9989 )PATH 835 END IF 836* 837 ELSE IF( LSAMEN( 2, C2, 'LQ' ) ) THEN 838* 839* LQ: LQ factorization 840* 841 NTYPES = 8 842 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 843* 844 IF( TSTCHK ) THEN 845 CALL ZCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 846 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 847 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 848 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 849 $ WORK, RWORK, NOUT ) 850 ELSE 851 WRITE( NOUT, FMT = 9989 )PATH 852 END IF 853* 854 ELSE IF( LSAMEN( 2, C2, 'QL' ) ) THEN 855* 856* QL: QL factorization 857* 858 NTYPES = 8 859 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 860* 861 IF( TSTCHK ) THEN 862 CALL ZCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 863 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 864 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 865 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 866 $ WORK, RWORK, NOUT ) 867 ELSE 868 WRITE( NOUT, FMT = 9989 )PATH 869 END IF 870* 871 ELSE IF( LSAMEN( 2, C2, 'RQ' ) ) THEN 872* 873* RQ: RQ factorization 874* 875 NTYPES = 8 876 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 877* 878 IF( TSTCHK ) THEN 879 CALL ZCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 880 $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ), 881 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 882 $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), 883 $ WORK, RWORK, IWORK, NOUT ) 884 ELSE 885 WRITE( NOUT, FMT = 9989 )PATH 886 END IF 887* 888 ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN 889* 890* EQ: Equilibration routines for general and positive definite 891* matrices (THREQ should be between 2 and 10) 892* 893 IF( TSTCHK ) THEN 894 CALL ZCHKEQ( THREQ, NOUT ) 895 ELSE 896 WRITE( NOUT, FMT = 9989 )PATH 897 END IF 898* 899 ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN 900* 901* TZ: Trapezoidal matrix 902* 903 NTYPES = 3 904 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 905* 906 IF( TSTCHK ) THEN 907 CALL ZCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, 908 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), 909 $ B( 1, 1 ), WORK, RWORK, NOUT ) 910 ELSE 911 WRITE( NOUT, FMT = 9989 )PATH 912 END IF 913* 914 ELSE IF( LSAMEN( 2, C2, 'QP' ) ) THEN 915* 916* QP: QR factorization with pivoting 917* 918 NTYPES = 6 919 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 920* 921 IF( TSTCHK ) THEN 922 CALL ZCHKQP( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, 923 $ A( 1, 1 ), A( 1, 2 ), S( 1 ), 924 $ B( 1, 1 ), WORK, RWORK, IWORK, NOUT ) 925 CALL ZCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, 926 $ THRESH, A( 1, 1 ), A( 1, 2 ), S( 1 ), 927 $ B( 1, 1 ), WORK, RWORK, IWORK, 928 $ NOUT ) 929 ELSE 930 WRITE( NOUT, FMT = 9989 )PATH 931 END IF 932* 933 ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN 934* 935* LS: Least squares drivers 936* 937 NTYPES = 6 938 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT ) 939* 940 IF( TSTDRV ) THEN 941 CALL ZDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB, 942 $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ), 943 $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ), 944 $ S( 1 ), S( NMAX+1 ), WORK, RWORK, IWORK, 945 $ NOUT ) 946 ELSE 947 WRITE( NOUT, FMT = 9989 )PATH 948 END IF 949* 950* 951 ELSE IF( LSAMEN( 2, C2, 'QT' ) ) THEN 952* 953* QT: QRT routines for general matrices 954* 955 IF( TSTCHK ) THEN 956 CALL ZCHKQRT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, 957 $ NBVAL, NOUT ) 958 ELSE 959 WRITE( NOUT, FMT = 9989 )PATH 960 END IF 961* 962 ELSE IF( LSAMEN( 2, C2, 'QX' ) ) THEN 963* 964* QX: QRT routines for triangular-pentagonal matrices 965* 966 IF( TSTCHK ) THEN 967 CALL ZCHKQRTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, 968 $ NBVAL, NOUT ) 969 ELSE 970 WRITE( NOUT, FMT = 9989 )PATH 971 END IF 972* 973 ELSE 974* 975 WRITE( NOUT, FMT = 9990 )PATH 976 END IF 977* 978* Go back to get another input line. 979* 980 GO TO 80 981* 982* Branch to this line when the last record is read. 983* 984 140 CONTINUE 985 CLOSE ( NIN ) 986 S2 = DSECND( ) 987 WRITE( NOUT, FMT = 9998 ) 988 WRITE( NOUT, FMT = 9997 )S2 - S1 989* 990 9999 FORMAT( / ' Execution not attempted due to input errors' ) 991 9998 FORMAT( / ' End of tests' ) 992 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / ) 993 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=', 994 $ I6 ) 995 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=', 996 $ I6 ) 997 9994 FORMAT( ' Tests of the COMPLEX*16 LAPACK routines ', 998 $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1, 999 $ / / ' The following parameter values will be used:' ) 1000 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 ) 1001 9992 FORMAT( / ' Routines pass computational tests if test ratio is ', 1002 $ 'less than', F8.2, / ) 1003 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 ) 1004 9990 FORMAT( / 1X, A3, ': Unrecognized path name' ) 1005 9989 FORMAT( / 1X, A3, ' routines were not tested' ) 1006 9988 FORMAT( / 1X, A3, ' driver routines were not tested' ) 1007* 1008#ifdef __FLAME__ 1009 CALL FLA_FINALIZE 1010#endif 1011* 1012* End of ZCHKAA 1013* 1014 END 1015