1 PROGRAM ZBLAT3 2* 3* Test program for the COMPLEX*16 Level 3 Blas. 4* 5* The program must be driven by a short data file. The first 14 records 6* of the file are read using list-directed input, the last 9 records 7* are read using the format ( A6, L2 ). An annotated example of a data 8* file can be obtained by deleting the first 3 characters from the 9* following 23 lines: 10* 'ZBLAT3.SUMM' NAME OF SUMMARY OUTPUT FILE 11* 6 UNIT NUMBER OF SUMMARY FILE 12* 'ZBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE 13* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) 14* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. 15* F LOGICAL FLAG, T TO STOP ON FAILURES. 16* T LOGICAL FLAG, T TO TEST ERROR EXITS. 17* 16.0 THRESHOLD VALUE OF TEST RATIO 18* 6 NUMBER OF VALUES OF N 19* 0 1 2 3 5 9 VALUES OF N 20* 3 NUMBER OF VALUES OF ALPHA 21* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA 22* 3 NUMBER OF VALUES OF BETA 23* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA 24* ZGEMM T PUT F FOR NO TEST. SAME COLUMNS. 25* ZHEMM T PUT F FOR NO TEST. SAME COLUMNS. 26* ZSYMM T PUT F FOR NO TEST. SAME COLUMNS. 27* ZTRMM T PUT F FOR NO TEST. SAME COLUMNS. 28* ZTRSM T PUT F FOR NO TEST. SAME COLUMNS. 29* ZHERK T PUT F FOR NO TEST. SAME COLUMNS. 30* ZSYRK T PUT F FOR NO TEST. SAME COLUMNS. 31* ZHER2K T PUT F FOR NO TEST. SAME COLUMNS. 32* ZSYR2K T PUT F FOR NO TEST. SAME COLUMNS. 33* 34* See: 35* 36* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. 37* A Set of Level 3 Basic Linear Algebra Subprograms. 38* 39* Technical Memorandum No.88 (Revision 1), Mathematics and 40* Computer Science Division, Argonne National Laboratory, 9700 41* South Cass Avenue, Argonne, Illinois 60439, US. 42* 43* -- Written on 8-February-1989. 44* Jack Dongarra, Argonne National Laboratory. 45* Iain Duff, AERE Harwell. 46* Jeremy Du Croz, Numerical Algorithms Group Ltd. 47* Sven Hammarling, Numerical Algorithms Group Ltd. 48* 49* .. Parameters .. 50 INTEGER NIN 51 PARAMETER ( NIN = 5 ) 52 INTEGER NSUBS 53 PARAMETER ( NSUBS = 9 ) 54 COMPLEX*16 ZERO, ONE 55 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), 56 $ ONE = ( 1.0D0, 0.0D0 ) ) 57 DOUBLE PRECISION RZERO, RHALF, RONE 58 PARAMETER ( RZERO = 0.0D0, RHALF = 0.5D0, RONE = 1.0D0 ) 59 INTEGER NMAX 60 PARAMETER ( NMAX = 65 ) 61 INTEGER NIDMAX, NALMAX, NBEMAX 62 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) 63* .. Local Scalars .. 64 DOUBLE PRECISION EPS, ERR, THRESH 65 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA 66 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, 67 $ TSTERR 68 CHARACTER*1 TRANSA, TRANSB 69 CHARACTER*6 SNAMET 70 CHARACTER*32 SNAPS, SUMMRY 71* .. Local Arrays .. 72 COMPLEX*16 AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), 73 $ ALF( NALMAX ), AS( NMAX*NMAX ), 74 $ BB( NMAX*NMAX ), BET( NBEMAX ), 75 $ BS( NMAX*NMAX ), C( NMAX, NMAX ), 76 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), 77 $ W( 2*NMAX ) 78 DOUBLE PRECISION G( NMAX ) 79 INTEGER IDIM( NIDMAX ) 80 LOGICAL LTEST( NSUBS ) 81 CHARACTER*6 SNAMES( NSUBS ) 82* .. External Functions .. 83 DOUBLE PRECISION DDIFF 84 LOGICAL LZE 85 EXTERNAL DDIFF, LZE 86* .. External Subroutines .. 87 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHKE, ZMMCH 88* .. Intrinsic Functions .. 89 INTRINSIC MAX, MIN 90* .. Scalars in Common .. 91 INTEGER INFOT, NOUTC 92 LOGICAL LERR, OK 93 CHARACTER*6 SRNAMT 94* .. Common blocks .. 95 COMMON /INFOC/INFOT, NOUTC, OK, LERR 96 COMMON /SRNAMC/SRNAMT 97* .. Data statements .. 98 DATA SNAMES/'ZGEMM ', 'ZHEMM ', 'ZSYMM ', 'ZTRMM ', 99 $ 'ZTRSM ', 'ZHERK ', 'ZSYRK ', 'ZHER2K', 100 $ 'ZSYR2K'/ 101* .. Executable Statements .. 102* 103* Read name and unit number for summary output file and open file. 104* 105 READ( NIN, FMT = * )SUMMRY 106 READ( NIN, FMT = * )NOUT 107 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' ) 108 NOUTC = NOUT 109* 110* Read name and unit number for snapshot output file and open file. 111* 112 READ( NIN, FMT = * )SNAPS 113 READ( NIN, FMT = * )NTRA 114 TRACE = NTRA.GE.0 115 IF( TRACE )THEN 116 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' ) 117 END IF 118* Read the flag that directs rewinding of the snapshot file. 119 READ( NIN, FMT = * )REWI 120 REWI = REWI.AND.TRACE 121* Read the flag that directs stopping on any failure. 122 READ( NIN, FMT = * )SFATAL 123* Read the flag that indicates whether error exits are to be tested. 124 READ( NIN, FMT = * )TSTERR 125* Read the threshold value of the test ratio 126 READ( NIN, FMT = * )THRESH 127* 128* Read and check the parameter values for the tests. 129* 130* Values of N 131 READ( NIN, FMT = * )NIDIM 132 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN 133 WRITE( NOUT, FMT = 9997 )'N', NIDMAX 134 GO TO 220 135 END IF 136 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) 137 DO 10 I = 1, NIDIM 138 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN 139 WRITE( NOUT, FMT = 9996 )NMAX 140 GO TO 220 141 END IF 142 10 CONTINUE 143* Values of ALPHA 144 READ( NIN, FMT = * )NALF 145 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN 146 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX 147 GO TO 220 148 END IF 149 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) 150* Values of BETA 151 READ( NIN, FMT = * )NBET 152 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN 153 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX 154 GO TO 220 155 END IF 156 READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) 157* 158* Report values of parameters. 159* 160 WRITE( NOUT, FMT = 9995 ) 161 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) 162 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) 163 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) 164 IF( .NOT.TSTERR )THEN 165 WRITE( NOUT, FMT = * ) 166 WRITE( NOUT, FMT = 9984 ) 167 END IF 168 WRITE( NOUT, FMT = * ) 169 WRITE( NOUT, FMT = 9999 )THRESH 170 WRITE( NOUT, FMT = * ) 171* 172* Read names of subroutines and flags which indicate 173* whether they are to be tested. 174* 175 DO 20 I = 1, NSUBS 176 LTEST( I ) = .FALSE. 177 20 CONTINUE 178 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT 179 DO 40 I = 1, NSUBS 180 IF( SNAMET.EQ.SNAMES( I ) ) 181 $ GO TO 50 182 40 CONTINUE 183 WRITE( NOUT, FMT = 9990 )SNAMET 184 STOP 185 50 LTEST( I ) = LTESTT 186 GO TO 30 187* 188 60 CONTINUE 189 CLOSE ( NIN ) 190* 191* Compute EPS (the machine precision). 192* 193 EPS = RONE 194 70 CONTINUE 195 IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO ) 196 $ GO TO 80 197 EPS = RHALF*EPS 198 GO TO 70 199 80 CONTINUE 200 EPS = EPS + EPS 201 WRITE( NOUT, FMT = 9998 )EPS 202* 203* Check the reliability of ZMMCH using exact data. 204* 205 N = MIN( 32, NMAX ) 206 DO 100 J = 1, N 207 DO 90 I = 1, N 208 AB( I, J ) = MAX( I - J + 1, 0 ) 209 90 CONTINUE 210 AB( J, NMAX + 1 ) = J 211 AB( 1, NMAX + J ) = J 212 C( J, 1 ) = ZERO 213 100 CONTINUE 214 DO 110 J = 1, N 215 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 216 110 CONTINUE 217* CC holds the exact result. On exit from ZMMCH CT holds 218* the result computed by ZMMCH. 219 TRANSA = 'N' 220 TRANSB = 'N' 221 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 222 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 223 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 224 SAME = LZE( CC, CT, N ) 225 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 226 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 227 STOP 228 END IF 229 TRANSB = 'C' 230 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 231 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 232 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 233 SAME = LZE( CC, CT, N ) 234 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 235 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 236 STOP 237 END IF 238 DO 120 J = 1, N 239 AB( J, NMAX + 1 ) = N - J + 1 240 AB( 1, NMAX + J ) = N - J + 1 241 120 CONTINUE 242 DO 130 J = 1, N 243 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - 244 $ ( ( J + 1 )*J*( J - 1 ) )/3 245 130 CONTINUE 246 TRANSA = 'C' 247 TRANSB = 'N' 248 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 249 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 250 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 251 SAME = LZE( CC, CT, N ) 252 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 253 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 254 STOP 255 END IF 256 TRANSB = 'C' 257 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, 258 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, 259 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) 260 SAME = LZE( CC, CT, N ) 261 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN 262 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR 263 STOP 264 END IF 265* 266* Test each subroutine in turn. 267* 268 DO 200 ISNUM = 1, NSUBS 269 WRITE( NOUT, FMT = * ) 270 IF( .NOT.LTEST( ISNUM ) )THEN 271* Subprogram is not to be tested. 272 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) 273 ELSE 274 SRNAMT = SNAMES( ISNUM ) 275* Test error exits. 276 IF( TSTERR )THEN 277 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT ) 278 WRITE( NOUT, FMT = * ) 279 END IF 280* Test computations. 281 INFOT = 0 282 OK = .TRUE. 283 FATAL = .FALSE. 284 GO TO ( 140, 150, 150, 160, 160, 170, 170, 285 $ 180, 180 )ISNUM 286* Test ZGEMM, 01. 287 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 288 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 289 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 290 $ CC, CS, CT, G ) 291 GO TO 190 292* Test ZHEMM, 02, ZSYMM, 03. 293 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 294 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 295 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 296 $ CC, CS, CT, G ) 297 GO TO 190 298* Test ZTRMM, 04, ZTRSM, 05. 299 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 300 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, 301 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C ) 302 GO TO 190 303* Test ZHERK, 06, ZSYRK, 07. 304 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 305 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 306 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, 307 $ CC, CS, CT, G ) 308 GO TO 190 309* Test ZHER2K, 08, ZSYR2K, 09. 310 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, 311 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, 312 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W ) 313 GO TO 190 314* 315 190 IF( FATAL.AND.SFATAL ) 316 $ GO TO 210 317 END IF 318 200 CONTINUE 319 WRITE( NOUT, FMT = 9986 ) 320 GO TO 230 321* 322 210 CONTINUE 323 WRITE( NOUT, FMT = 9985 ) 324 GO TO 230 325* 326 220 CONTINUE 327 WRITE( NOUT, FMT = 9991 ) 328* 329 230 CONTINUE 330 IF( TRACE ) 331 $ CLOSE ( NTRA ) 332 CLOSE ( NOUT ) 333 STOP 334* 335 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', 336 $ 'S THAN', F8.2 ) 337 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 ) 338 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', 339 $ 'THAN ', I2 ) 340 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) 341 9995 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F', 342 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) 343 9994 FORMAT( ' FOR N ', 9I6 ) 344 9993 FORMAT( ' FOR ALPHA ', 345 $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) 346 9992 FORMAT( ' FOR BETA ', 347 $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) 348 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', 349 $ /' ******* TESTS ABANDONED *******' ) 350 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T', 351 $ 'ESTS ABANDONED *******' ) 352 9989 FORMAT( ' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', 353 $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1, 354 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', 355 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', 356 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', 357 $ '*******' ) 358 9988 FORMAT( A6, L2 ) 359 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' ) 360 9986 FORMAT( /' END OF TESTS' ) 361 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) 362 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) 363* 364* End of ZBLAT3. 365* 366 END 367 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 368 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 369 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 370* 371* Tests ZGEMM. 372* 373* Auxiliary routine for test program for Level 3 Blas. 374* 375* -- Written on 8-February-1989. 376* Jack Dongarra, Argonne National Laboratory. 377* Iain Duff, AERE Harwell. 378* Jeremy Du Croz, Numerical Algorithms Group Ltd. 379* Sven Hammarling, Numerical Algorithms Group Ltd. 380* 381* .. Parameters .. 382 COMPLEX*16 ZERO 383 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) 384 DOUBLE PRECISION RZERO 385 PARAMETER ( RZERO = 0.0D0 ) 386* .. Scalar Arguments .. 387 DOUBLE PRECISION EPS, THRESH 388 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 389 LOGICAL FATAL, REWI, TRACE 390 CHARACTER*6 SNAME 391* .. Array Arguments .. 392 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 393 $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 394 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 395 $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 396 $ CS( NMAX*NMAX ), CT( NMAX ) 397 DOUBLE PRECISION G( NMAX ) 398 INTEGER IDIM( NIDIM ) 399* .. Local Scalars .. 400 COMPLEX*16 ALPHA, ALS, BETA, BLS 401 DOUBLE PRECISION ERR, ERRMAX 402 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, 403 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, 404 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS 405 LOGICAL NULL, RESET, SAME, TRANA, TRANB 406 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB 407 CHARACTER*3 ICH 408* .. Local Arrays .. 409 LOGICAL ISAME( 13 ) 410* .. External Functions .. 411 LOGICAL LZE, LZERES 412 EXTERNAL LZE, LZERES 413* .. External Subroutines .. 414 EXTERNAL ZGEMM, ZMAKE, ZMMCH 415* .. Intrinsic Functions .. 416 INTRINSIC MAX 417* .. Scalars in Common .. 418 INTEGER INFOT, NOUTC 419 LOGICAL LERR, OK 420* .. Common blocks .. 421 COMMON /INFOC/INFOT, NOUTC, OK, LERR 422* .. Data statements .. 423 DATA ICH/'NTC'/ 424* .. Executable Statements .. 425* 426 NARGS = 13 427 NC = 0 428 RESET = .TRUE. 429 ERRMAX = RZERO 430* 431 DO 110 IM = 1, NIDIM 432 M = IDIM( IM ) 433* 434 DO 100 IN = 1, NIDIM 435 N = IDIM( IN ) 436* Set LDC to 1 more than minimum value if room. 437 LDC = M 438 IF( LDC.LT.NMAX ) 439 $ LDC = LDC + 1 440* Skip tests if not enough room. 441 IF( LDC.GT.NMAX ) 442 $ GO TO 100 443 LCC = LDC*N 444 NULL = N.LE.0.OR.M.LE.0 445* 446 DO 90 IK = 1, NIDIM 447 K = IDIM( IK ) 448* 449 DO 80 ICA = 1, 3 450 TRANSA = ICH( ICA: ICA ) 451 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' 452* 453 IF( TRANA )THEN 454 MA = K 455 NA = M 456 ELSE 457 MA = M 458 NA = K 459 END IF 460* Set LDA to 1 more than minimum value if room. 461 LDA = MA 462 IF( LDA.LT.NMAX ) 463 $ LDA = LDA + 1 464* Skip tests if not enough room. 465 IF( LDA.GT.NMAX ) 466 $ GO TO 80 467 LAA = LDA*NA 468* 469* Generate the matrix A. 470* 471 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, 472 $ RESET, ZERO ) 473* 474 DO 70 ICB = 1, 3 475 TRANSB = ICH( ICB: ICB ) 476 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' 477* 478 IF( TRANB )THEN 479 MB = N 480 NB = K 481 ELSE 482 MB = K 483 NB = N 484 END IF 485* Set LDB to 1 more than minimum value if room. 486 LDB = MB 487 IF( LDB.LT.NMAX ) 488 $ LDB = LDB + 1 489* Skip tests if not enough room. 490 IF( LDB.GT.NMAX ) 491 $ GO TO 70 492 LBB = LDB*NB 493* 494* Generate the matrix B. 495* 496 CALL ZMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB, 497 $ LDB, RESET, ZERO ) 498* 499 DO 60 IA = 1, NALF 500 ALPHA = ALF( IA ) 501* 502 DO 50 IB = 1, NBET 503 BETA = BET( IB ) 504* 505* Generate the matrix C. 506* 507 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, 508 $ CC, LDC, RESET, ZERO ) 509* 510 NC = NC + 1 511* 512* Save every datum before calling the 513* subroutine. 514* 515 TRANAS = TRANSA 516 TRANBS = TRANSB 517 MS = M 518 NS = N 519 KS = K 520 ALS = ALPHA 521 DO 10 I = 1, LAA 522 AS( I ) = AA( I ) 523 10 CONTINUE 524 LDAS = LDA 525 DO 20 I = 1, LBB 526 BS( I ) = BB( I ) 527 20 CONTINUE 528 LDBS = LDB 529 BLS = BETA 530 DO 30 I = 1, LCC 531 CS( I ) = CC( I ) 532 30 CONTINUE 533 LDCS = LDC 534* 535* Call the subroutine. 536* 537 IF( TRACE ) 538 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 539 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB, 540 $ BETA, LDC 541 IF( REWI ) 542 $ REWIND NTRA 543 CALL ZGEMM( TRANSA, TRANSB, M, N, K, ALPHA, 544 $ AA, LDA, BB, LDB, BETA, CC, LDC ) 545* 546* Check if error-exit was taken incorrectly. 547* 548 IF( .NOT.OK )THEN 549 WRITE( NOUT, FMT = 9994 ) 550 FATAL = .TRUE. 551 GO TO 120 552 END IF 553* 554* See what data changed inside subroutines. 555* 556 ISAME( 1 ) = TRANSA.EQ.TRANAS 557 ISAME( 2 ) = TRANSB.EQ.TRANBS 558 ISAME( 3 ) = MS.EQ.M 559 ISAME( 4 ) = NS.EQ.N 560 ISAME( 5 ) = KS.EQ.K 561 ISAME( 6 ) = ALS.EQ.ALPHA 562 ISAME( 7 ) = LZE( AS, AA, LAA ) 563 ISAME( 8 ) = LDAS.EQ.LDA 564 ISAME( 9 ) = LZE( BS, BB, LBB ) 565 ISAME( 10 ) = LDBS.EQ.LDB 566 ISAME( 11 ) = BLS.EQ.BETA 567 IF( NULL )THEN 568 ISAME( 12 ) = LZE( CS, CC, LCC ) 569 ELSE 570 ISAME( 12 ) = LZERES( 'GE', ' ', M, N, CS, 571 $ CC, LDC ) 572 END IF 573 ISAME( 13 ) = LDCS.EQ.LDC 574* 575* If data was incorrectly changed, report 576* and return. 577* 578 SAME = .TRUE. 579 DO 40 I = 1, NARGS 580 SAME = SAME.AND.ISAME( I ) 581 IF( .NOT.ISAME( I ) ) 582 $ WRITE( NOUT, FMT = 9998 )I 583 40 CONTINUE 584 IF( .NOT.SAME )THEN 585 FATAL = .TRUE. 586 GO TO 120 587 END IF 588* 589 IF( .NOT.NULL )THEN 590* 591* Check the result. 592* 593 CALL ZMMCH( TRANSA, TRANSB, M, N, K, 594 $ ALPHA, A, NMAX, B, NMAX, BETA, 595 $ C, NMAX, CT, G, CC, LDC, EPS, 596 $ ERR, FATAL, NOUT, .TRUE. ) 597 ERRMAX = MAX( ERRMAX, ERR ) 598* If got really bad answer, report and 599* return. 600 IF( FATAL ) 601 $ GO TO 120 602 END IF 603* 604 50 CONTINUE 605* 606 60 CONTINUE 607* 608 70 CONTINUE 609* 610 80 CONTINUE 611* 612 90 CONTINUE 613* 614 100 CONTINUE 615* 616 110 CONTINUE 617* 618* Report result. 619* 620 IF( ERRMAX.LT.THRESH )THEN 621 WRITE( NOUT, FMT = 9999 )SNAME, NC 622 ELSE 623 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 624 END IF 625 GO TO 130 626* 627 120 CONTINUE 628 WRITE( NOUT, FMT = 9996 )SNAME 629 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K, 630 $ ALPHA, LDA, LDB, BETA, LDC 631* 632 130 CONTINUE 633 RETURN 634* 635 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 636 $ 'S)' ) 637 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 638 $ 'ANGED INCORRECTLY *******' ) 639 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 640 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 641 $ ' - SUSPECT *******' ) 642 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 643 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',', 644 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, 645 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' ) 646 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 647 $ '******' ) 648* 649* End of ZCHK1. 650* 651 END 652 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 653 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 654 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 655* 656* Tests ZHEMM and ZSYMM. 657* 658* Auxiliary routine for test program for Level 3 Blas. 659* 660* -- Written on 8-February-1989. 661* Jack Dongarra, Argonne National Laboratory. 662* Iain Duff, AERE Harwell. 663* Jeremy Du Croz, Numerical Algorithms Group Ltd. 664* Sven Hammarling, Numerical Algorithms Group Ltd. 665* 666* .. Parameters .. 667 COMPLEX*16 ZERO 668 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) 669 DOUBLE PRECISION RZERO 670 PARAMETER ( RZERO = 0.0D0 ) 671* .. Scalar Arguments .. 672 DOUBLE PRECISION EPS, THRESH 673 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 674 LOGICAL FATAL, REWI, TRACE 675 CHARACTER*6 SNAME 676* .. Array Arguments .. 677 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 678 $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 679 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 680 $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 681 $ CS( NMAX*NMAX ), CT( NMAX ) 682 DOUBLE PRECISION G( NMAX ) 683 INTEGER IDIM( NIDIM ) 684* .. Local Scalars .. 685 COMPLEX*16 ALPHA, ALS, BETA, BLS 686 DOUBLE PRECISION ERR, ERRMAX 687 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, 688 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, 689 $ NARGS, NC, NS 690 LOGICAL CONJ, LEFT, NULL, RESET, SAME 691 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS 692 CHARACTER*2 ICHS, ICHU 693* .. Local Arrays .. 694 LOGICAL ISAME( 13 ) 695* .. External Functions .. 696 LOGICAL LZE, LZERES 697 EXTERNAL LZE, LZERES 698* .. External Subroutines .. 699 EXTERNAL ZHEMM, ZMAKE, ZMMCH, ZSYMM 700* .. Intrinsic Functions .. 701 INTRINSIC MAX 702* .. Scalars in Common .. 703 INTEGER INFOT, NOUTC 704 LOGICAL LERR, OK 705* .. Common blocks .. 706 COMMON /INFOC/INFOT, NOUTC, OK, LERR 707* .. Data statements .. 708 DATA ICHS/'LR'/, ICHU/'UL'/ 709* .. Executable Statements .. 710 CONJ = SNAME( 2: 3 ).EQ.'HE' 711* 712 NARGS = 12 713 NC = 0 714 RESET = .TRUE. 715 ERRMAX = RZERO 716* 717 DO 100 IM = 1, NIDIM 718 M = IDIM( IM ) 719* 720 DO 90 IN = 1, NIDIM 721 N = IDIM( IN ) 722* Set LDC to 1 more than minimum value if room. 723 LDC = M 724 IF( LDC.LT.NMAX ) 725 $ LDC = LDC + 1 726* Skip tests if not enough room. 727 IF( LDC.GT.NMAX ) 728 $ GO TO 90 729 LCC = LDC*N 730 NULL = N.LE.0.OR.M.LE.0 731* Set LDB to 1 more than minimum value if room. 732 LDB = M 733 IF( LDB.LT.NMAX ) 734 $ LDB = LDB + 1 735* Skip tests if not enough room. 736 IF( LDB.GT.NMAX ) 737 $ GO TO 90 738 LBB = LDB*N 739* 740* Generate the matrix B. 741* 742 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, 743 $ ZERO ) 744* 745 DO 80 ICS = 1, 2 746 SIDE = ICHS( ICS: ICS ) 747 LEFT = SIDE.EQ.'L' 748* 749 IF( LEFT )THEN 750 NA = M 751 ELSE 752 NA = N 753 END IF 754* Set LDA to 1 more than minimum value if room. 755 LDA = NA 756 IF( LDA.LT.NMAX ) 757 $ LDA = LDA + 1 758* Skip tests if not enough room. 759 IF( LDA.GT.NMAX ) 760 $ GO TO 80 761 LAA = LDA*NA 762* 763 DO 70 ICU = 1, 2 764 UPLO = ICHU( ICU: ICU ) 765* 766* Generate the hermitian or symmetric matrix A. 767* 768 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX, 769 $ AA, LDA, RESET, ZERO ) 770* 771 DO 60 IA = 1, NALF 772 ALPHA = ALF( IA ) 773* 774 DO 50 IB = 1, NBET 775 BETA = BET( IB ) 776* 777* Generate the matrix C. 778* 779 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC, 780 $ LDC, RESET, ZERO ) 781* 782 NC = NC + 1 783* 784* Save every datum before calling the 785* subroutine. 786* 787 SIDES = SIDE 788 UPLOS = UPLO 789 MS = M 790 NS = N 791 ALS = ALPHA 792 DO 10 I = 1, LAA 793 AS( I ) = AA( I ) 794 10 CONTINUE 795 LDAS = LDA 796 DO 20 I = 1, LBB 797 BS( I ) = BB( I ) 798 20 CONTINUE 799 LDBS = LDB 800 BLS = BETA 801 DO 30 I = 1, LCC 802 CS( I ) = CC( I ) 803 30 CONTINUE 804 LDCS = LDC 805* 806* Call the subroutine. 807* 808 IF( TRACE ) 809 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE, 810 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC 811 IF( REWI ) 812 $ REWIND NTRA 813 IF( CONJ )THEN 814 CALL ZHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA, 815 $ BB, LDB, BETA, CC, LDC ) 816 ELSE 817 CALL ZSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA, 818 $ BB, LDB, BETA, CC, LDC ) 819 END IF 820* 821* Check if error-exit was taken incorrectly. 822* 823 IF( .NOT.OK )THEN 824 WRITE( NOUT, FMT = 9994 ) 825 FATAL = .TRUE. 826 GO TO 110 827 END IF 828* 829* See what data changed inside subroutines. 830* 831 ISAME( 1 ) = SIDES.EQ.SIDE 832 ISAME( 2 ) = UPLOS.EQ.UPLO 833 ISAME( 3 ) = MS.EQ.M 834 ISAME( 4 ) = NS.EQ.N 835 ISAME( 5 ) = ALS.EQ.ALPHA 836 ISAME( 6 ) = LZE( AS, AA, LAA ) 837 ISAME( 7 ) = LDAS.EQ.LDA 838 ISAME( 8 ) = LZE( BS, BB, LBB ) 839 ISAME( 9 ) = LDBS.EQ.LDB 840 ISAME( 10 ) = BLS.EQ.BETA 841 IF( NULL )THEN 842 ISAME( 11 ) = LZE( CS, CC, LCC ) 843 ELSE 844 ISAME( 11 ) = LZERES( 'GE', ' ', M, N, CS, 845 $ CC, LDC ) 846 END IF 847 ISAME( 12 ) = LDCS.EQ.LDC 848* 849* If data was incorrectly changed, report and 850* return. 851* 852 SAME = .TRUE. 853 DO 40 I = 1, NARGS 854 SAME = SAME.AND.ISAME( I ) 855 IF( .NOT.ISAME( I ) ) 856 $ WRITE( NOUT, FMT = 9998 )I 857 40 CONTINUE 858 IF( .NOT.SAME )THEN 859 FATAL = .TRUE. 860 GO TO 110 861 END IF 862* 863 IF( .NOT.NULL )THEN 864* 865* Check the result. 866* 867 IF( LEFT )THEN 868 CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A, 869 $ NMAX, B, NMAX, BETA, C, NMAX, 870 $ CT, G, CC, LDC, EPS, ERR, 871 $ FATAL, NOUT, .TRUE. ) 872 ELSE 873 CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B, 874 $ NMAX, A, NMAX, BETA, C, NMAX, 875 $ CT, G, CC, LDC, EPS, ERR, 876 $ FATAL, NOUT, .TRUE. ) 877 END IF 878 ERRMAX = MAX( ERRMAX, ERR ) 879* If got really bad answer, report and 880* return. 881 IF( FATAL ) 882 $ GO TO 110 883 END IF 884* 885 50 CONTINUE 886* 887 60 CONTINUE 888* 889 70 CONTINUE 890* 891 80 CONTINUE 892* 893 90 CONTINUE 894* 895 100 CONTINUE 896* 897* Report result. 898* 899 IF( ERRMAX.LT.THRESH )THEN 900 WRITE( NOUT, FMT = 9999 )SNAME, NC 901 ELSE 902 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 903 END IF 904 GO TO 120 905* 906 110 CONTINUE 907 WRITE( NOUT, FMT = 9996 )SNAME 908 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA, 909 $ LDB, BETA, LDC 910* 911 120 CONTINUE 912 RETURN 913* 914 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 915 $ 'S)' ) 916 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 917 $ 'ANGED INCORRECTLY *******' ) 918 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 919 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 920 $ ' - SUSPECT *******' ) 921 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 922 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 923 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, 924 $ ',', F4.1, '), C,', I3, ') .' ) 925 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 926 $ '******' ) 927* 928* End of ZCHK2. 929* 930 END 931 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 932 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, 933 $ B, BB, BS, CT, G, C ) 934* 935* Tests ZTRMM and ZTRSM. 936* 937* Auxiliary routine for test program for Level 3 Blas. 938* 939* -- Written on 8-February-1989. 940* Jack Dongarra, Argonne National Laboratory. 941* Iain Duff, AERE Harwell. 942* Jeremy Du Croz, Numerical Algorithms Group Ltd. 943* Sven Hammarling, Numerical Algorithms Group Ltd. 944* 945* .. Parameters .. 946 COMPLEX*16 ZERO, ONE 947 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), 948 $ ONE = ( 1.0D0, 0.0D0 ) ) 949 DOUBLE PRECISION RZERO 950 PARAMETER ( RZERO = 0.0D0 ) 951* .. Scalar Arguments .. 952 DOUBLE PRECISION EPS, THRESH 953 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA 954 LOGICAL FATAL, REWI, TRACE 955 CHARACTER*6 SNAME 956* .. Array Arguments .. 957 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 958 $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 959 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), 960 $ C( NMAX, NMAX ), CT( NMAX ) 961 DOUBLE PRECISION G( NMAX ) 962 INTEGER IDIM( NIDIM ) 963* .. Local Scalars .. 964 COMPLEX*16 ALPHA, ALS 965 DOUBLE PRECISION ERR, ERRMAX 966 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, 967 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, 968 $ NS 969 LOGICAL LEFT, NULL, RESET, SAME 970 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, 971 $ UPLOS 972 CHARACTER*2 ICHD, ICHS, ICHU 973 CHARACTER*3 ICHT 974* .. Local Arrays .. 975 LOGICAL ISAME( 13 ) 976* .. External Functions .. 977 LOGICAL LZE, LZERES 978 EXTERNAL LZE, LZERES 979* .. External Subroutines .. 980 EXTERNAL ZMAKE, ZMMCH, ZTRMM, ZTRSM 981* .. Intrinsic Functions .. 982 INTRINSIC MAX 983* .. Scalars in Common .. 984 INTEGER INFOT, NOUTC 985 LOGICAL LERR, OK 986* .. Common blocks .. 987 COMMON /INFOC/INFOT, NOUTC, OK, LERR 988* .. Data statements .. 989 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ 990* .. Executable Statements .. 991* 992 NARGS = 11 993 NC = 0 994 RESET = .TRUE. 995 ERRMAX = RZERO 996* Set up zero matrix for ZMMCH. 997 DO 20 J = 1, NMAX 998 DO 10 I = 1, NMAX 999 C( I, J ) = ZERO 1000 10 CONTINUE 1001 20 CONTINUE 1002* 1003 DO 140 IM = 1, NIDIM 1004 M = IDIM( IM ) 1005* 1006 DO 130 IN = 1, NIDIM 1007 N = IDIM( IN ) 1008* Set LDB to 1 more than minimum value if room. 1009 LDB = M 1010 IF( LDB.LT.NMAX ) 1011 $ LDB = LDB + 1 1012* Skip tests if not enough room. 1013 IF( LDB.GT.NMAX ) 1014 $ GO TO 130 1015 LBB = LDB*N 1016 NULL = M.LE.0.OR.N.LE.0 1017* 1018 DO 120 ICS = 1, 2 1019 SIDE = ICHS( ICS: ICS ) 1020 LEFT = SIDE.EQ.'L' 1021 IF( LEFT )THEN 1022 NA = M 1023 ELSE 1024 NA = N 1025 END IF 1026* Set LDA to 1 more than minimum value if room. 1027 LDA = NA 1028 IF( LDA.LT.NMAX ) 1029 $ LDA = LDA + 1 1030* Skip tests if not enough room. 1031 IF( LDA.GT.NMAX ) 1032 $ GO TO 130 1033 LAA = LDA*NA 1034* 1035 DO 110 ICU = 1, 2 1036 UPLO = ICHU( ICU: ICU ) 1037* 1038 DO 100 ICT = 1, 3 1039 TRANSA = ICHT( ICT: ICT ) 1040* 1041 DO 90 ICD = 1, 2 1042 DIAG = ICHD( ICD: ICD ) 1043* 1044 DO 80 IA = 1, NALF 1045 ALPHA = ALF( IA ) 1046* 1047* Generate the matrix A. 1048* 1049 CALL ZMAKE( 'TR', UPLO, DIAG, NA, NA, A, 1050 $ NMAX, AA, LDA, RESET, ZERO ) 1051* 1052* Generate the matrix B. 1053* 1054 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, 1055 $ BB, LDB, RESET, ZERO ) 1056* 1057 NC = NC + 1 1058* 1059* Save every datum before calling the 1060* subroutine. 1061* 1062 SIDES = SIDE 1063 UPLOS = UPLO 1064 TRANAS = TRANSA 1065 DIAGS = DIAG 1066 MS = M 1067 NS = N 1068 ALS = ALPHA 1069 DO 30 I = 1, LAA 1070 AS( I ) = AA( I ) 1071 30 CONTINUE 1072 LDAS = LDA 1073 DO 40 I = 1, LBB 1074 BS( I ) = BB( I ) 1075 40 CONTINUE 1076 LDBS = LDB 1077* 1078* Call the subroutine. 1079* 1080 IF( SNAME( 4: 5 ).EQ.'MM' )THEN 1081 IF( TRACE ) 1082 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 1083 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, 1084 $ LDA, LDB 1085 IF( REWI ) 1086 $ REWIND NTRA 1087 CALL ZTRMM( SIDE, UPLO, TRANSA, DIAG, M, 1088 $ N, ALPHA, AA, LDA, BB, LDB ) 1089 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN 1090 IF( TRACE ) 1091 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, 1092 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, 1093 $ LDA, LDB 1094 IF( REWI ) 1095 $ REWIND NTRA 1096 CALL ZTRSM( SIDE, UPLO, TRANSA, DIAG, M, 1097 $ N, ALPHA, AA, LDA, BB, LDB ) 1098 END IF 1099* 1100* Check if error-exit was taken incorrectly. 1101* 1102 IF( .NOT.OK )THEN 1103 WRITE( NOUT, FMT = 9994 ) 1104 FATAL = .TRUE. 1105 GO TO 150 1106 END IF 1107* 1108* See what data changed inside subroutines. 1109* 1110 ISAME( 1 ) = SIDES.EQ.SIDE 1111 ISAME( 2 ) = UPLOS.EQ.UPLO 1112 ISAME( 3 ) = TRANAS.EQ.TRANSA 1113 ISAME( 4 ) = DIAGS.EQ.DIAG 1114 ISAME( 5 ) = MS.EQ.M 1115 ISAME( 6 ) = NS.EQ.N 1116 ISAME( 7 ) = ALS.EQ.ALPHA 1117 ISAME( 8 ) = LZE( AS, AA, LAA ) 1118 ISAME( 9 ) = LDAS.EQ.LDA 1119 IF( NULL )THEN 1120 ISAME( 10 ) = LZE( BS, BB, LBB ) 1121 ELSE 1122 ISAME( 10 ) = LZERES( 'GE', ' ', M, N, BS, 1123 $ BB, LDB ) 1124 END IF 1125 ISAME( 11 ) = LDBS.EQ.LDB 1126* 1127* If data was incorrectly changed, report and 1128* return. 1129* 1130 SAME = .TRUE. 1131 DO 50 I = 1, NARGS 1132 SAME = SAME.AND.ISAME( I ) 1133 IF( .NOT.ISAME( I ) ) 1134 $ WRITE( NOUT, FMT = 9998 )I 1135 50 CONTINUE 1136 IF( .NOT.SAME )THEN 1137 FATAL = .TRUE. 1138 GO TO 150 1139 END IF 1140* 1141 IF( .NOT.NULL )THEN 1142 IF( SNAME( 4: 5 ).EQ.'MM' )THEN 1143* 1144* Check the result. 1145* 1146 IF( LEFT )THEN 1147 CALL ZMMCH( TRANSA, 'N', M, N, M, 1148 $ ALPHA, A, NMAX, B, NMAX, 1149 $ ZERO, C, NMAX, CT, G, 1150 $ BB, LDB, EPS, ERR, 1151 $ FATAL, NOUT, .TRUE. ) 1152 ELSE 1153 CALL ZMMCH( 'N', TRANSA, M, N, N, 1154 $ ALPHA, B, NMAX, A, NMAX, 1155 $ ZERO, C, NMAX, CT, G, 1156 $ BB, LDB, EPS, ERR, 1157 $ FATAL, NOUT, .TRUE. ) 1158 END IF 1159 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN 1160* 1161* Compute approximation to original 1162* matrix. 1163* 1164 DO 70 J = 1, N 1165 DO 60 I = 1, M 1166 C( I, J ) = BB( I + ( J - 1 )* 1167 $ LDB ) 1168 BB( I + ( J - 1 )*LDB ) = ALPHA* 1169 $ B( I, J ) 1170 60 CONTINUE 1171 70 CONTINUE 1172* 1173 IF( LEFT )THEN 1174 CALL ZMMCH( TRANSA, 'N', M, N, M, 1175 $ ONE, A, NMAX, C, NMAX, 1176 $ ZERO, B, NMAX, CT, G, 1177 $ BB, LDB, EPS, ERR, 1178 $ FATAL, NOUT, .FALSE. ) 1179 ELSE 1180 CALL ZMMCH( 'N', TRANSA, M, N, N, 1181 $ ONE, C, NMAX, A, NMAX, 1182 $ ZERO, B, NMAX, CT, G, 1183 $ BB, LDB, EPS, ERR, 1184 $ FATAL, NOUT, .FALSE. ) 1185 END IF 1186 END IF 1187 ERRMAX = MAX( ERRMAX, ERR ) 1188* If got really bad answer, report and 1189* return. 1190 IF( FATAL ) 1191 $ GO TO 150 1192 END IF 1193* 1194 80 CONTINUE 1195* 1196 90 CONTINUE 1197* 1198 100 CONTINUE 1199* 1200 110 CONTINUE 1201* 1202 120 CONTINUE 1203* 1204 130 CONTINUE 1205* 1206 140 CONTINUE 1207* 1208* Report result. 1209* 1210 IF( ERRMAX.LT.THRESH )THEN 1211 WRITE( NOUT, FMT = 9999 )SNAME, NC 1212 ELSE 1213 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1214 END IF 1215 GO TO 160 1216* 1217 150 CONTINUE 1218 WRITE( NOUT, FMT = 9996 )SNAME 1219 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M, 1220 $ N, ALPHA, LDA, LDB 1221* 1222 160 CONTINUE 1223 RETURN 1224* 1225 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1226 $ 'S)' ) 1227 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1228 $ 'ANGED INCORRECTLY *******' ) 1229 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1230 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1231 $ ' - SUSPECT *******' ) 1232 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1233 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ), 1234 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ', 1235 $ ' .' ) 1236 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1237 $ '******' ) 1238* 1239* End of ZCHK3. 1240* 1241 END 1242 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 1243 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 1244 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G ) 1245* 1246* Tests ZHERK and ZSYRK. 1247* 1248* Auxiliary routine for test program for Level 3 Blas. 1249* 1250* -- Written on 8-February-1989. 1251* Jack Dongarra, Argonne National Laboratory. 1252* Iain Duff, AERE Harwell. 1253* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1254* Sven Hammarling, Numerical Algorithms Group Ltd. 1255* 1256* .. Parameters .. 1257 COMPLEX*16 ZERO 1258 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) 1259 DOUBLE PRECISION RONE, RZERO 1260 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 ) 1261* .. Scalar Arguments .. 1262 DOUBLE PRECISION EPS, THRESH 1263 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 1264 LOGICAL FATAL, REWI, TRACE 1265 CHARACTER*6 SNAME 1266* .. Array Arguments .. 1267 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), 1268 $ AS( NMAX*NMAX ), B( NMAX, NMAX ), 1269 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), 1270 $ C( NMAX, NMAX ), CC( NMAX*NMAX ), 1271 $ CS( NMAX*NMAX ), CT( NMAX ) 1272 DOUBLE PRECISION G( NMAX ) 1273 INTEGER IDIM( NIDIM ) 1274* .. Local Scalars .. 1275 COMPLEX*16 ALPHA, ALS, BETA, BETS 1276 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS 1277 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, 1278 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, 1279 $ NARGS, NC, NS 1280 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER 1281 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS 1282 CHARACTER*2 ICHT, ICHU 1283* .. Local Arrays .. 1284 LOGICAL ISAME( 13 ) 1285* .. External Functions .. 1286 LOGICAL LZE, LZERES 1287 EXTERNAL LZE, LZERES 1288* .. External Subroutines .. 1289 EXTERNAL ZHERK, ZMAKE, ZMMCH, ZSYRK 1290* .. Intrinsic Functions .. 1291 INTRINSIC DCMPLX, MAX, DBLE 1292* .. Scalars in Common .. 1293 INTEGER INFOT, NOUTC 1294 LOGICAL LERR, OK 1295* .. Common blocks .. 1296 COMMON /INFOC/INFOT, NOUTC, OK, LERR 1297* .. Data statements .. 1298 DATA ICHT/'NC'/, ICHU/'UL'/ 1299* .. Executable Statements .. 1300 CONJ = SNAME( 2: 3 ).EQ.'HE' 1301* 1302 NARGS = 10 1303 NC = 0 1304 RESET = .TRUE. 1305 ERRMAX = RZERO 1306* 1307 DO 100 IN = 1, NIDIM 1308 N = IDIM( IN ) 1309* Set LDC to 1 more than minimum value if room. 1310 LDC = N 1311 IF( LDC.LT.NMAX ) 1312 $ LDC = LDC + 1 1313* Skip tests if not enough room. 1314 IF( LDC.GT.NMAX ) 1315 $ GO TO 100 1316 LCC = LDC*N 1317* 1318 DO 90 IK = 1, NIDIM 1319 K = IDIM( IK ) 1320* 1321 DO 80 ICT = 1, 2 1322 TRANS = ICHT( ICT: ICT ) 1323 TRAN = TRANS.EQ.'C' 1324 IF( TRAN.AND..NOT.CONJ ) 1325 $ TRANS = 'T' 1326 IF( TRAN )THEN 1327 MA = K 1328 NA = N 1329 ELSE 1330 MA = N 1331 NA = K 1332 END IF 1333* Set LDA to 1 more than minimum value if room. 1334 LDA = MA 1335 IF( LDA.LT.NMAX ) 1336 $ LDA = LDA + 1 1337* Skip tests if not enough room. 1338 IF( LDA.GT.NMAX ) 1339 $ GO TO 80 1340 LAA = LDA*NA 1341* 1342* Generate the matrix A. 1343* 1344 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, 1345 $ RESET, ZERO ) 1346* 1347 DO 70 ICU = 1, 2 1348 UPLO = ICHU( ICU: ICU ) 1349 UPPER = UPLO.EQ.'U' 1350* 1351 DO 60 IA = 1, NALF 1352 ALPHA = ALF( IA ) 1353 IF( CONJ )THEN 1354 RALPHA = DBLE( ALPHA ) 1355 ALPHA = DCMPLX( RALPHA, RZERO ) 1356 END IF 1357* 1358 DO 50 IB = 1, NBET 1359 BETA = BET( IB ) 1360 IF( CONJ )THEN 1361 RBETA = DBLE( BETA ) 1362 BETA = DCMPLX( RBETA, RZERO ) 1363 END IF 1364 NULL = N.LE.0 1365 IF( CONJ ) 1366 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ. 1367 $ RZERO ).AND.RBETA.EQ.RONE ) 1368* 1369* Generate the matrix C. 1370* 1371 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C, 1372 $ NMAX, CC, LDC, RESET, ZERO ) 1373* 1374 NC = NC + 1 1375* 1376* Save every datum before calling the subroutine. 1377* 1378 UPLOS = UPLO 1379 TRANSS = TRANS 1380 NS = N 1381 KS = K 1382 IF( CONJ )THEN 1383 RALS = RALPHA 1384 ELSE 1385 ALS = ALPHA 1386 END IF 1387 DO 10 I = 1, LAA 1388 AS( I ) = AA( I ) 1389 10 CONTINUE 1390 LDAS = LDA 1391 IF( CONJ )THEN 1392 RBETS = RBETA 1393 ELSE 1394 BETS = BETA 1395 END IF 1396 DO 20 I = 1, LCC 1397 CS( I ) = CC( I ) 1398 20 CONTINUE 1399 LDCS = LDC 1400* 1401* Call the subroutine. 1402* 1403 IF( CONJ )THEN 1404 IF( TRACE ) 1405 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, 1406 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC 1407 IF( REWI ) 1408 $ REWIND NTRA 1409 CALL ZHERK( UPLO, TRANS, N, K, RALPHA, AA, 1410 $ LDA, RBETA, CC, LDC ) 1411 ELSE 1412 IF( TRACE ) 1413 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, 1414 $ TRANS, N, K, ALPHA, LDA, BETA, LDC 1415 IF( REWI ) 1416 $ REWIND NTRA 1417 CALL ZSYRK( UPLO, TRANS, N, K, ALPHA, AA, 1418 $ LDA, BETA, CC, LDC ) 1419 END IF 1420* 1421* Check if error-exit was taken incorrectly. 1422* 1423 IF( .NOT.OK )THEN 1424 WRITE( NOUT, FMT = 9992 ) 1425 FATAL = .TRUE. 1426 GO TO 120 1427 END IF 1428* 1429* See what data changed inside subroutines. 1430* 1431 ISAME( 1 ) = UPLOS.EQ.UPLO 1432 ISAME( 2 ) = TRANSS.EQ.TRANS 1433 ISAME( 3 ) = NS.EQ.N 1434 ISAME( 4 ) = KS.EQ.K 1435 IF( CONJ )THEN 1436 ISAME( 5 ) = RALS.EQ.RALPHA 1437 ELSE 1438 ISAME( 5 ) = ALS.EQ.ALPHA 1439 END IF 1440 ISAME( 6 ) = LZE( AS, AA, LAA ) 1441 ISAME( 7 ) = LDAS.EQ.LDA 1442 IF( CONJ )THEN 1443 ISAME( 8 ) = RBETS.EQ.RBETA 1444 ELSE 1445 ISAME( 8 ) = BETS.EQ.BETA 1446 END IF 1447 IF( NULL )THEN 1448 ISAME( 9 ) = LZE( CS, CC, LCC ) 1449 ELSE 1450 ISAME( 9 ) = LZERES( SNAME( 2: 3 ), UPLO, N, 1451 $ N, CS, CC, LDC ) 1452 END IF 1453 ISAME( 10 ) = LDCS.EQ.LDC 1454* 1455* If data was incorrectly changed, report and 1456* return. 1457* 1458 SAME = .TRUE. 1459 DO 30 I = 1, NARGS 1460 SAME = SAME.AND.ISAME( I ) 1461 IF( .NOT.ISAME( I ) ) 1462 $ WRITE( NOUT, FMT = 9998 )I 1463 30 CONTINUE 1464 IF( .NOT.SAME )THEN 1465 FATAL = .TRUE. 1466 GO TO 120 1467 END IF 1468* 1469 IF( .NOT.NULL )THEN 1470* 1471* Check the result column by column. 1472* 1473 IF( CONJ )THEN 1474 TRANST = 'C' 1475 ELSE 1476 TRANST = 'T' 1477 END IF 1478 JC = 1 1479 DO 40 J = 1, N 1480 IF( UPPER )THEN 1481 JJ = 1 1482 LJ = J 1483 ELSE 1484 JJ = J 1485 LJ = N - J + 1 1486 END IF 1487 IF( TRAN )THEN 1488 CALL ZMMCH( TRANST, 'N', LJ, 1, K, 1489 $ ALPHA, A( 1, JJ ), NMAX, 1490 $ A( 1, J ), NMAX, BETA, 1491 $ C( JJ, J ), NMAX, CT, G, 1492 $ CC( JC ), LDC, EPS, ERR, 1493 $ FATAL, NOUT, .TRUE. ) 1494 ELSE 1495 CALL ZMMCH( 'N', TRANST, LJ, 1, K, 1496 $ ALPHA, A( JJ, 1 ), NMAX, 1497 $ A( J, 1 ), NMAX, BETA, 1498 $ C( JJ, J ), NMAX, CT, G, 1499 $ CC( JC ), LDC, EPS, ERR, 1500 $ FATAL, NOUT, .TRUE. ) 1501 END IF 1502 IF( UPPER )THEN 1503 JC = JC + LDC 1504 ELSE 1505 JC = JC + LDC + 1 1506 END IF 1507 ERRMAX = MAX( ERRMAX, ERR ) 1508* If got really bad answer, report and 1509* return. 1510 IF( FATAL ) 1511 $ GO TO 110 1512 40 CONTINUE 1513 END IF 1514* 1515 50 CONTINUE 1516* 1517 60 CONTINUE 1518* 1519 70 CONTINUE 1520* 1521 80 CONTINUE 1522* 1523 90 CONTINUE 1524* 1525 100 CONTINUE 1526* 1527* Report result. 1528* 1529 IF( ERRMAX.LT.THRESH )THEN 1530 WRITE( NOUT, FMT = 9999 )SNAME, NC 1531 ELSE 1532 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1533 END IF 1534 GO TO 130 1535* 1536 110 CONTINUE 1537 IF( N.GT.1 ) 1538 $ WRITE( NOUT, FMT = 9995 )J 1539* 1540 120 CONTINUE 1541 WRITE( NOUT, FMT = 9996 )SNAME 1542 IF( CONJ )THEN 1543 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA, 1544 $ LDA, RBETA, LDC 1545 ELSE 1546 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1547 $ LDA, BETA, LDC 1548 END IF 1549* 1550 130 CONTINUE 1551 RETURN 1552* 1553 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1554 $ 'S)' ) 1555 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1556 $ 'ANGED INCORRECTLY *******' ) 1557 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1558 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1559 $ ' - SUSPECT *******' ) 1560 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1561 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 1562 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1563 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ', 1564 $ ' .' ) 1565 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1566 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1, 1567 $ '), C,', I3, ') .' ) 1568 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1569 $ '******' ) 1570* 1571* End of ZCHK4. 1572* 1573 END 1574 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, 1575 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, 1576 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W ) 1577* 1578* Tests ZHER2K and ZSYR2K. 1579* 1580* Auxiliary routine for test program for Level 3 Blas. 1581* 1582* -- Written on 8-February-1989. 1583* Jack Dongarra, Argonne National Laboratory. 1584* Iain Duff, AERE Harwell. 1585* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1586* Sven Hammarling, Numerical Algorithms Group Ltd. 1587* 1588* .. Parameters .. 1589 COMPLEX*16 ZERO, ONE 1590 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), 1591 $ ONE = ( 1.0D0, 0.0D0 ) ) 1592 DOUBLE PRECISION RONE, RZERO 1593 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 ) 1594* .. Scalar Arguments .. 1595 DOUBLE PRECISION EPS, THRESH 1596 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA 1597 LOGICAL FATAL, REWI, TRACE 1598 CHARACTER*6 SNAME 1599* .. Array Arguments .. 1600 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), 1601 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), 1602 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), 1603 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), 1604 $ W( 2*NMAX ) 1605 DOUBLE PRECISION G( NMAX ) 1606 INTEGER IDIM( NIDIM ) 1607* .. Local Scalars .. 1608 COMPLEX*16 ALPHA, ALS, BETA, BETS 1609 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS 1610 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, 1611 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, 1612 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS 1613 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER 1614 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS 1615 CHARACTER*2 ICHT, ICHU 1616* .. Local Arrays .. 1617 LOGICAL ISAME( 13 ) 1618* .. External Functions .. 1619 LOGICAL LZE, LZERES 1620 EXTERNAL LZE, LZERES 1621* .. External Subroutines .. 1622 EXTERNAL ZHER2K, ZMAKE, ZMMCH, ZSYR2K 1623* .. Intrinsic Functions .. 1624 INTRINSIC DCMPLX, DCONJG, MAX, DBLE 1625* .. Scalars in Common .. 1626 INTEGER INFOT, NOUTC 1627 LOGICAL LERR, OK 1628* .. Common blocks .. 1629 COMMON /INFOC/INFOT, NOUTC, OK, LERR 1630* .. Data statements .. 1631 DATA ICHT/'NC'/, ICHU/'UL'/ 1632* .. Executable Statements .. 1633 CONJ = SNAME( 2: 3 ).EQ.'HE' 1634* 1635 NARGS = 12 1636 NC = 0 1637 RESET = .TRUE. 1638 ERRMAX = RZERO 1639* 1640 DO 130 IN = 1, NIDIM 1641 N = IDIM( IN ) 1642* Set LDC to 1 more than minimum value if room. 1643 LDC = N 1644 IF( LDC.LT.NMAX ) 1645 $ LDC = LDC + 1 1646* Skip tests if not enough room. 1647 IF( LDC.GT.NMAX ) 1648 $ GO TO 130 1649 LCC = LDC*N 1650* 1651 DO 120 IK = 1, NIDIM 1652 K = IDIM( IK ) 1653* 1654 DO 110 ICT = 1, 2 1655 TRANS = ICHT( ICT: ICT ) 1656 TRAN = TRANS.EQ.'C' 1657 IF( TRAN.AND..NOT.CONJ ) 1658 $ TRANS = 'T' 1659 IF( TRAN )THEN 1660 MA = K 1661 NA = N 1662 ELSE 1663 MA = N 1664 NA = K 1665 END IF 1666* Set LDA to 1 more than minimum value if room. 1667 LDA = MA 1668 IF( LDA.LT.NMAX ) 1669 $ LDA = LDA + 1 1670* Skip tests if not enough room. 1671 IF( LDA.GT.NMAX ) 1672 $ GO TO 110 1673 LAA = LDA*NA 1674* 1675* Generate the matrix A. 1676* 1677 IF( TRAN )THEN 1678 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA, 1679 $ LDA, RESET, ZERO ) 1680 ELSE 1681 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, 1682 $ RESET, ZERO ) 1683 END IF 1684* 1685* Generate the matrix B. 1686* 1687 LDB = LDA 1688 LBB = LAA 1689 IF( TRAN )THEN 1690 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ), 1691 $ 2*NMAX, BB, LDB, RESET, ZERO ) 1692 ELSE 1693 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), 1694 $ NMAX, BB, LDB, RESET, ZERO ) 1695 END IF 1696* 1697 DO 100 ICU = 1, 2 1698 UPLO = ICHU( ICU: ICU ) 1699 UPPER = UPLO.EQ.'U' 1700* 1701 DO 90 IA = 1, NALF 1702 ALPHA = ALF( IA ) 1703* 1704 DO 80 IB = 1, NBET 1705 BETA = BET( IB ) 1706 IF( CONJ )THEN 1707 RBETA = DBLE( BETA ) 1708 BETA = DCMPLX( RBETA, RZERO ) 1709 END IF 1710 NULL = N.LE.0 1711 IF( CONJ ) 1712 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ. 1713 $ ZERO ).AND.RBETA.EQ.RONE ) 1714* 1715* Generate the matrix C. 1716* 1717 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C, 1718 $ NMAX, CC, LDC, RESET, ZERO ) 1719* 1720 NC = NC + 1 1721* 1722* Save every datum before calling the subroutine. 1723* 1724 UPLOS = UPLO 1725 TRANSS = TRANS 1726 NS = N 1727 KS = K 1728 ALS = ALPHA 1729 DO 10 I = 1, LAA 1730 AS( I ) = AA( I ) 1731 10 CONTINUE 1732 LDAS = LDA 1733 DO 20 I = 1, LBB 1734 BS( I ) = BB( I ) 1735 20 CONTINUE 1736 LDBS = LDB 1737 IF( CONJ )THEN 1738 RBETS = RBETA 1739 ELSE 1740 BETS = BETA 1741 END IF 1742 DO 30 I = 1, LCC 1743 CS( I ) = CC( I ) 1744 30 CONTINUE 1745 LDCS = LDC 1746* 1747* Call the subroutine. 1748* 1749 IF( CONJ )THEN 1750 IF( TRACE ) 1751 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, 1752 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC 1753 IF( REWI ) 1754 $ REWIND NTRA 1755 CALL ZHER2K( UPLO, TRANS, N, K, ALPHA, AA, 1756 $ LDA, BB, LDB, RBETA, CC, LDC ) 1757 ELSE 1758 IF( TRACE ) 1759 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, 1760 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC 1761 IF( REWI ) 1762 $ REWIND NTRA 1763 CALL ZSYR2K( UPLO, TRANS, N, K, ALPHA, AA, 1764 $ LDA, BB, LDB, BETA, CC, LDC ) 1765 END IF 1766* 1767* Check if error-exit was taken incorrectly. 1768* 1769 IF( .NOT.OK )THEN 1770 WRITE( NOUT, FMT = 9992 ) 1771 FATAL = .TRUE. 1772 GO TO 150 1773 END IF 1774* 1775* See what data changed inside subroutines. 1776* 1777 ISAME( 1 ) = UPLOS.EQ.UPLO 1778 ISAME( 2 ) = TRANSS.EQ.TRANS 1779 ISAME( 3 ) = NS.EQ.N 1780 ISAME( 4 ) = KS.EQ.K 1781 ISAME( 5 ) = ALS.EQ.ALPHA 1782 ISAME( 6 ) = LZE( AS, AA, LAA ) 1783 ISAME( 7 ) = LDAS.EQ.LDA 1784 ISAME( 8 ) = LZE( BS, BB, LBB ) 1785 ISAME( 9 ) = LDBS.EQ.LDB 1786 IF( CONJ )THEN 1787 ISAME( 10 ) = RBETS.EQ.RBETA 1788 ELSE 1789 ISAME( 10 ) = BETS.EQ.BETA 1790 END IF 1791 IF( NULL )THEN 1792 ISAME( 11 ) = LZE( CS, CC, LCC ) 1793 ELSE 1794 ISAME( 11 ) = LZERES( 'HE', UPLO, N, N, CS, 1795 $ CC, LDC ) 1796 END IF 1797 ISAME( 12 ) = LDCS.EQ.LDC 1798* 1799* If data was incorrectly changed, report and 1800* return. 1801* 1802 SAME = .TRUE. 1803 DO 40 I = 1, NARGS 1804 SAME = SAME.AND.ISAME( I ) 1805 IF( .NOT.ISAME( I ) ) 1806 $ WRITE( NOUT, FMT = 9998 )I 1807 40 CONTINUE 1808 IF( .NOT.SAME )THEN 1809 FATAL = .TRUE. 1810 GO TO 150 1811 END IF 1812* 1813 IF( .NOT.NULL )THEN 1814* 1815* Check the result column by column. 1816* 1817 IF( CONJ )THEN 1818 TRANST = 'C' 1819 ELSE 1820 TRANST = 'T' 1821 END IF 1822 JJAB = 1 1823 JC = 1 1824 DO 70 J = 1, N 1825 IF( UPPER )THEN 1826 JJ = 1 1827 LJ = J 1828 ELSE 1829 JJ = J 1830 LJ = N - J + 1 1831 END IF 1832 IF( TRAN )THEN 1833 DO 50 I = 1, K 1834 W( I ) = ALPHA*AB( ( J - 1 )*2* 1835 $ NMAX + K + I ) 1836 IF( CONJ )THEN 1837 W( K + I ) = DCONJG( ALPHA )* 1838 $ AB( ( J - 1 )*2* 1839 $ NMAX + I ) 1840 ELSE 1841 W( K + I ) = ALPHA* 1842 $ AB( ( J - 1 )*2* 1843 $ NMAX + I ) 1844 END IF 1845 50 CONTINUE 1846 CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K, 1847 $ ONE, AB( JJAB ), 2*NMAX, W, 1848 $ 2*NMAX, BETA, C( JJ, J ), 1849 $ NMAX, CT, G, CC( JC ), LDC, 1850 $ EPS, ERR, FATAL, NOUT, 1851 $ .TRUE. ) 1852 ELSE 1853 DO 60 I = 1, K 1854 IF( CONJ )THEN 1855 W( I ) = ALPHA*DCONJG( AB( ( K + 1856 $ I - 1 )*NMAX + J ) ) 1857 W( K + I ) = DCONJG( ALPHA* 1858 $ AB( ( I - 1 )*NMAX + 1859 $ J ) ) 1860 ELSE 1861 W( I ) = ALPHA*AB( ( K + I - 1 )* 1862 $ NMAX + J ) 1863 W( K + I ) = ALPHA* 1864 $ AB( ( I - 1 )*NMAX + 1865 $ J ) 1866 END IF 1867 60 CONTINUE 1868 CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE, 1869 $ AB( JJ ), NMAX, W, 2*NMAX, 1870 $ BETA, C( JJ, J ), NMAX, CT, 1871 $ G, CC( JC ), LDC, EPS, ERR, 1872 $ FATAL, NOUT, .TRUE. ) 1873 END IF 1874 IF( UPPER )THEN 1875 JC = JC + LDC 1876 ELSE 1877 JC = JC + LDC + 1 1878 IF( TRAN ) 1879 $ JJAB = JJAB + 2*NMAX 1880 END IF 1881 ERRMAX = MAX( ERRMAX, ERR ) 1882* If got really bad answer, report and 1883* return. 1884 IF( FATAL ) 1885 $ GO TO 140 1886 70 CONTINUE 1887 END IF 1888* 1889 80 CONTINUE 1890* 1891 90 CONTINUE 1892* 1893 100 CONTINUE 1894* 1895 110 CONTINUE 1896* 1897 120 CONTINUE 1898* 1899 130 CONTINUE 1900* 1901* Report result. 1902* 1903 IF( ERRMAX.LT.THRESH )THEN 1904 WRITE( NOUT, FMT = 9999 )SNAME, NC 1905 ELSE 1906 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX 1907 END IF 1908 GO TO 160 1909* 1910 140 CONTINUE 1911 IF( N.GT.1 ) 1912 $ WRITE( NOUT, FMT = 9995 )J 1913* 1914 150 CONTINUE 1915 WRITE( NOUT, FMT = 9996 )SNAME 1916 IF( CONJ )THEN 1917 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1918 $ LDA, LDB, RBETA, LDC 1919 ELSE 1920 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA, 1921 $ LDA, LDB, BETA, LDC 1922 END IF 1923* 1924 160 CONTINUE 1925 RETURN 1926* 1927 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', 1928 $ 'S)' ) 1929 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', 1930 $ 'ANGED INCORRECTLY *******' ) 1931 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', 1932 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, 1933 $ ' - SUSPECT *******' ) 1934 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' ) 1935 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 1936 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1937 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1, 1938 $ ', C,', I3, ') .' ) 1939 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ), 1940 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, 1941 $ ',', F4.1, '), C,', I3, ') .' ) 1942 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', 1943 $ '******' ) 1944* 1945* End of ZCHK5. 1946* 1947 END 1948 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT ) 1949* 1950* Tests the error exits from the Level 3 Blas. 1951* Requires a special version of the error-handling routine XERBLA. 1952* ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined. 1953* 1954* Auxiliary routine for test program for Level 3 Blas. 1955* 1956* -- Written on 8-February-1989. 1957* Jack Dongarra, Argonne National Laboratory. 1958* Iain Duff, AERE Harwell. 1959* Jeremy Du Croz, Numerical Algorithms Group Ltd. 1960* Sven Hammarling, Numerical Algorithms Group Ltd. 1961* 1962* .. Scalar Arguments .. 1963 INTEGER ISNUM, NOUT 1964 CHARACTER*6 SRNAMT 1965* .. Scalars in Common .. 1966 INTEGER INFOT, NOUTC 1967 LOGICAL LERR, OK 1968* .. Local Scalars .. 1969 COMPLEX*16 ALPHA, BETA 1970 DOUBLE PRECISION RALPHA, RBETA 1971* .. Local Arrays .. 1972 COMPLEX*16 A( 2, 1 ), B( 2, 1 ), C( 2, 1 ) 1973* .. External Subroutines .. 1974 EXTERNAL ZGEMM, ZHEMM, ZHER2K, ZHERK, CHKXER, ZSYMM, 1975 $ ZSYR2K, ZSYRK, ZTRMM, ZTRSM 1976* .. Common blocks .. 1977 COMMON /INFOC/INFOT, NOUTC, OK, LERR 1978* .. Executable Statements .. 1979* OK is set to .FALSE. by the special version of XERBLA or by CHKXER 1980* if anything is wrong. 1981 OK = .TRUE. 1982* LERR is set to .TRUE. by the special version of XERBLA each time 1983* it is called, and is then tested and re-set by CHKXER. 1984 LERR = .FALSE. 1985 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80, 1986 $ 90 )ISNUM 1987 10 INFOT = 1 1988 CALL ZGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 1989 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 1990 INFOT = 1 1991 CALL ZGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 1992 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 1993 INFOT = 1 1994 CALL ZGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 1995 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 1996 INFOT = 2 1997 CALL ZGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 1998 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 1999 INFOT = 2 2000 CALL ZGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2001 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2002 INFOT = 2 2003 CALL ZGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2004 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2005 INFOT = 3 2006 CALL ZGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2007 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2008 INFOT = 3 2009 CALL ZGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2010 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2011 INFOT = 3 2012 CALL ZGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2013 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2014 INFOT = 3 2015 CALL ZGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2016 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2017 INFOT = 3 2018 CALL ZGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2019 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2020 INFOT = 3 2021 CALL ZGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2022 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2023 INFOT = 3 2024 CALL ZGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2025 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2026 INFOT = 3 2027 CALL ZGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2028 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2029 INFOT = 3 2030 CALL ZGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2031 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2032 INFOT = 4 2033 CALL ZGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2034 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2035 INFOT = 4 2036 CALL ZGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2037 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2038 INFOT = 4 2039 CALL ZGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2040 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2041 INFOT = 4 2042 CALL ZGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2044 INFOT = 4 2045 CALL ZGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2047 INFOT = 4 2048 CALL ZGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2050 INFOT = 4 2051 CALL ZGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2053 INFOT = 4 2054 CALL ZGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2056 INFOT = 4 2057 CALL ZGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2059 INFOT = 5 2060 CALL ZGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2062 INFOT = 5 2063 CALL ZGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2065 INFOT = 5 2066 CALL ZGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2068 INFOT = 5 2069 CALL ZGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2071 INFOT = 5 2072 CALL ZGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2074 INFOT = 5 2075 CALL ZGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2077 INFOT = 5 2078 CALL ZGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2080 INFOT = 5 2081 CALL ZGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2083 INFOT = 5 2084 CALL ZGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2086 INFOT = 8 2087 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2089 INFOT = 8 2090 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2092 INFOT = 8 2093 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2095 INFOT = 8 2096 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2098 INFOT = 8 2099 CALL ZGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2101 INFOT = 8 2102 CALL ZGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2104 INFOT = 8 2105 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2107 INFOT = 8 2108 CALL ZGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2110 INFOT = 8 2111 CALL ZGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2113 INFOT = 10 2114 CALL ZGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2116 INFOT = 10 2117 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2119 INFOT = 10 2120 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2122 INFOT = 10 2123 CALL ZGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2125 INFOT = 10 2126 CALL ZGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2128 INFOT = 10 2129 CALL ZGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2131 INFOT = 10 2132 CALL ZGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2134 INFOT = 10 2135 CALL ZGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2137 INFOT = 10 2138 CALL ZGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2140 INFOT = 13 2141 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2143 INFOT = 13 2144 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2146 INFOT = 13 2147 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2149 INFOT = 13 2150 CALL ZGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2151 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2152 INFOT = 13 2153 CALL ZGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2154 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2155 INFOT = 13 2156 CALL ZGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2157 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2158 INFOT = 13 2159 CALL ZGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2160 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2161 INFOT = 13 2162 CALL ZGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2163 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2164 INFOT = 13 2165 CALL ZGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2166 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2167 GO TO 100 2168 20 INFOT = 1 2169 CALL ZHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2171 INFOT = 2 2172 CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2174 INFOT = 3 2175 CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2177 INFOT = 3 2178 CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2180 INFOT = 3 2181 CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2183 INFOT = 3 2184 CALL ZHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2186 INFOT = 4 2187 CALL ZHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2189 INFOT = 4 2190 CALL ZHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2192 INFOT = 4 2193 CALL ZHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2195 INFOT = 4 2196 CALL ZHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2198 INFOT = 7 2199 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2201 INFOT = 7 2202 CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2204 INFOT = 7 2205 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2207 INFOT = 7 2208 CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2210 INFOT = 9 2211 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2213 INFOT = 9 2214 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2216 INFOT = 9 2217 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2219 INFOT = 9 2220 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2222 INFOT = 12 2223 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2225 INFOT = 12 2226 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2228 INFOT = 12 2229 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2231 INFOT = 12 2232 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2234 GO TO 100 2235 30 INFOT = 1 2236 CALL ZSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2237 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2238 INFOT = 2 2239 CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2241 INFOT = 3 2242 CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2244 INFOT = 3 2245 CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2247 INFOT = 3 2248 CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2250 INFOT = 3 2251 CALL ZSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2252 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2253 INFOT = 4 2254 CALL ZSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2255 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2256 INFOT = 4 2257 CALL ZSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2258 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2259 INFOT = 4 2260 CALL ZSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2262 INFOT = 4 2263 CALL ZSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2265 INFOT = 7 2266 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2268 INFOT = 7 2269 CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2271 INFOT = 7 2272 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 ) 2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2274 INFOT = 7 2275 CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2277 INFOT = 9 2278 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2280 INFOT = 9 2281 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2283 INFOT = 9 2284 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2286 INFOT = 9 2287 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2289 INFOT = 12 2290 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2292 INFOT = 12 2293 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2295 INFOT = 12 2296 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2298 INFOT = 12 2299 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ) 2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2301 GO TO 100 2302 40 INFOT = 1 2303 CALL ZTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2304 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2305 INFOT = 2 2306 CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2308 INFOT = 3 2309 CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2311 INFOT = 4 2312 CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 ) 2313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2314 INFOT = 5 2315 CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2317 INFOT = 5 2318 CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2320 INFOT = 5 2321 CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2323 INFOT = 5 2324 CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2326 INFOT = 5 2327 CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2329 INFOT = 5 2330 CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2332 INFOT = 5 2333 CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2335 INFOT = 5 2336 CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2338 INFOT = 5 2339 CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2341 INFOT = 5 2342 CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2344 INFOT = 5 2345 CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2347 INFOT = 5 2348 CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2350 INFOT = 6 2351 CALL ZTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2353 INFOT = 6 2354 CALL ZTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2356 INFOT = 6 2357 CALL ZTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2359 INFOT = 6 2360 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2362 INFOT = 6 2363 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2365 INFOT = 6 2366 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2368 INFOT = 6 2369 CALL ZTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2371 INFOT = 6 2372 CALL ZTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2374 INFOT = 6 2375 CALL ZTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2377 INFOT = 6 2378 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2380 INFOT = 6 2381 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2382 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2383 INFOT = 6 2384 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2385 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2386 INFOT = 9 2387 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2388 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2389 INFOT = 9 2390 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2391 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2392 INFOT = 9 2393 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2394 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2395 INFOT = 9 2396 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2397 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2398 INFOT = 9 2399 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2400 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2401 INFOT = 9 2402 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2403 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2404 INFOT = 9 2405 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2406 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2407 INFOT = 9 2408 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2410 INFOT = 9 2411 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2413 INFOT = 9 2414 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2416 INFOT = 9 2417 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2419 INFOT = 9 2420 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2422 INFOT = 11 2423 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2424 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2425 INFOT = 11 2426 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2428 INFOT = 11 2429 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2431 INFOT = 11 2432 CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2434 INFOT = 11 2435 CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2437 INFOT = 11 2438 CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2440 INFOT = 11 2441 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2442 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2443 INFOT = 11 2444 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2445 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2446 INFOT = 11 2447 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2448 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2449 INFOT = 11 2450 CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2451 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2452 INFOT = 11 2453 CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2454 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2455 INFOT = 11 2456 CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2458 GO TO 100 2459 50 INFOT = 1 2460 CALL ZTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2461 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2462 INFOT = 2 2463 CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2465 INFOT = 3 2466 CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 ) 2467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2468 INFOT = 4 2469 CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 ) 2470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2471 INFOT = 5 2472 CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2474 INFOT = 5 2475 CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2477 INFOT = 5 2478 CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2480 INFOT = 5 2481 CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2483 INFOT = 5 2484 CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2486 INFOT = 5 2487 CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2489 INFOT = 5 2490 CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2492 INFOT = 5 2493 CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2495 INFOT = 5 2496 CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2498 INFOT = 5 2499 CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2501 INFOT = 5 2502 CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2504 INFOT = 5 2505 CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 ) 2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2507 INFOT = 6 2508 CALL ZTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2510 INFOT = 6 2511 CALL ZTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2513 INFOT = 6 2514 CALL ZTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2516 INFOT = 6 2517 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2518 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2519 INFOT = 6 2520 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2521 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2522 INFOT = 6 2523 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2524 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2525 INFOT = 6 2526 CALL ZTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2527 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2528 INFOT = 6 2529 CALL ZTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2530 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2531 INFOT = 6 2532 CALL ZTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2534 INFOT = 6 2535 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2537 INFOT = 6 2538 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2540 INFOT = 6 2541 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 ) 2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2543 INFOT = 9 2544 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2546 INFOT = 9 2547 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2549 INFOT = 9 2550 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2552 INFOT = 9 2553 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2555 INFOT = 9 2556 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2558 INFOT = 9 2559 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2561 INFOT = 9 2562 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2564 INFOT = 9 2565 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2567 INFOT = 9 2568 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 ) 2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2570 INFOT = 9 2571 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2572 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2573 INFOT = 9 2574 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2576 INFOT = 9 2577 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 ) 2578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2579 INFOT = 11 2580 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2582 INFOT = 11 2583 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2585 INFOT = 11 2586 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2588 INFOT = 11 2589 CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2591 INFOT = 11 2592 CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2594 INFOT = 11 2595 CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2597 INFOT = 11 2598 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2600 INFOT = 11 2601 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2603 INFOT = 11 2604 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 ) 2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2606 INFOT = 11 2607 CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2609 INFOT = 11 2610 CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2612 INFOT = 11 2613 CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 ) 2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2615 GO TO 100 2616 60 INFOT = 1 2617 CALL ZHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 ) 2618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2619 INFOT = 2 2620 CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 ) 2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2622 INFOT = 3 2623 CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2625 INFOT = 3 2626 CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2628 INFOT = 3 2629 CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2631 INFOT = 3 2632 CALL ZHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 ) 2633 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2634 INFOT = 4 2635 CALL ZHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2636 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2637 INFOT = 4 2638 CALL ZHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2639 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2640 INFOT = 4 2641 CALL ZHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2642 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2643 INFOT = 4 2644 CALL ZHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 ) 2645 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2646 INFOT = 7 2647 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 ) 2648 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2649 INFOT = 7 2650 CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 ) 2651 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2652 INFOT = 7 2653 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 ) 2654 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2655 INFOT = 7 2656 CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 ) 2657 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2658 INFOT = 10 2659 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 ) 2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2661 INFOT = 10 2662 CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 ) 2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2664 INFOT = 10 2665 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 ) 2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2667 INFOT = 10 2668 CALL ZHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 ) 2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2670 GO TO 100 2671 70 INFOT = 1 2672 CALL ZSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 ) 2673 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2674 INFOT = 2 2675 CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 ) 2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2677 INFOT = 3 2678 CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2680 INFOT = 3 2681 CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2683 INFOT = 3 2684 CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2686 INFOT = 3 2687 CALL ZSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 ) 2688 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2689 INFOT = 4 2690 CALL ZSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2691 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2692 INFOT = 4 2693 CALL ZSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2694 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2695 INFOT = 4 2696 CALL ZSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2697 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2698 INFOT = 4 2699 CALL ZSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 ) 2700 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2701 INFOT = 7 2702 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 ) 2703 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2704 INFOT = 7 2705 CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 ) 2706 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2707 INFOT = 7 2708 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 ) 2709 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2710 INFOT = 7 2711 CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 ) 2712 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2713 INFOT = 10 2714 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 ) 2715 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2716 INFOT = 10 2717 CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 ) 2718 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2719 INFOT = 10 2720 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 ) 2721 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2722 INFOT = 10 2723 CALL ZSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 ) 2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2725 GO TO 100 2726 80 INFOT = 1 2727 CALL ZHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2728 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2729 INFOT = 2 2730 CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2732 INFOT = 3 2733 CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2735 INFOT = 3 2736 CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2738 INFOT = 3 2739 CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2741 INFOT = 3 2742 CALL ZHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2743 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2744 INFOT = 4 2745 CALL ZHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2746 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2747 INFOT = 4 2748 CALL ZHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2749 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2750 INFOT = 4 2751 CALL ZHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2752 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2753 INFOT = 4 2754 CALL ZHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2755 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2756 INFOT = 7 2757 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 ) 2758 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2759 INFOT = 7 2760 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2761 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2762 INFOT = 7 2763 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 ) 2764 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2765 INFOT = 7 2766 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2767 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2768 INFOT = 9 2769 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 ) 2770 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2771 INFOT = 9 2772 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 ) 2773 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2774 INFOT = 9 2775 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 ) 2776 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2777 INFOT = 9 2778 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 ) 2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2780 INFOT = 12 2781 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 ) 2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2783 INFOT = 12 2784 CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2785 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2786 INFOT = 12 2787 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 ) 2788 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2789 INFOT = 12 2790 CALL ZHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 ) 2791 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2792 GO TO 100 2793 90 INFOT = 1 2794 CALL ZSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2795 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2796 INFOT = 2 2797 CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2799 INFOT = 3 2800 CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2802 INFOT = 3 2803 CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2805 INFOT = 3 2806 CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2808 INFOT = 3 2809 CALL ZSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2810 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2811 INFOT = 4 2812 CALL ZSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2813 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2814 INFOT = 4 2815 CALL ZSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2816 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2817 INFOT = 4 2818 CALL ZSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2819 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2820 INFOT = 4 2821 CALL ZSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2822 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2823 INFOT = 7 2824 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2825 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2826 INFOT = 7 2827 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2828 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2829 INFOT = 7 2830 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ) 2831 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2832 INFOT = 7 2833 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2834 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2835 INFOT = 9 2836 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2837 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2838 INFOT = 9 2839 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2840 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2841 INFOT = 9 2842 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ) 2843 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2844 INFOT = 9 2845 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ) 2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2847 INFOT = 12 2848 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2850 INFOT = 12 2851 CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2852 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2853 INFOT = 12 2854 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ) 2855 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2856 INFOT = 12 2857 CALL ZSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ) 2858 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 2859* 2860 100 IF( OK )THEN 2861 WRITE( NOUT, FMT = 9999 )SRNAMT 2862 ELSE 2863 WRITE( NOUT, FMT = 9998 )SRNAMT 2864 END IF 2865 RETURN 2866* 2867 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' ) 2868 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****', 2869 $ '**' ) 2870* 2871* End of ZCHKE. 2872* 2873 END 2874 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, 2875 $ TRANSL ) 2876* 2877* Generates values for an M by N matrix A. 2878* Stores the values in the array AA in the data structure required 2879* by the routine, with unwanted elements set to rogue value. 2880* 2881* TYPE is 'GE', 'HE', 'SY' or 'TR'. 2882* 2883* Auxiliary routine for test program for Level 3 Blas. 2884* 2885* -- Written on 8-February-1989. 2886* Jack Dongarra, Argonne National Laboratory. 2887* Iain Duff, AERE Harwell. 2888* Jeremy Du Croz, Numerical Algorithms Group Ltd. 2889* Sven Hammarling, Numerical Algorithms Group Ltd. 2890* 2891* .. Parameters .. 2892 COMPLEX*16 ZERO, ONE 2893 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), 2894 $ ONE = ( 1.0D0, 0.0D0 ) ) 2895 COMPLEX*16 ROGUE 2896 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) ) 2897 DOUBLE PRECISION RZERO 2898 PARAMETER ( RZERO = 0.0D0 ) 2899 DOUBLE PRECISION RROGUE 2900 PARAMETER ( RROGUE = -1.0D10 ) 2901* .. Scalar Arguments .. 2902 COMPLEX*16 TRANSL 2903 INTEGER LDA, M, N, NMAX 2904 LOGICAL RESET 2905 CHARACTER*1 DIAG, UPLO 2906 CHARACTER*2 TYPE 2907* .. Array Arguments .. 2908 COMPLEX*16 A( NMAX, * ), AA( * ) 2909* .. Local Scalars .. 2910 INTEGER I, IBEG, IEND, J, JJ 2911 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER 2912* .. External Functions .. 2913 COMPLEX*16 ZBEG 2914 EXTERNAL ZBEG 2915* .. Intrinsic Functions .. 2916 INTRINSIC DCMPLX, DCONJG, DBLE 2917* .. Executable Statements .. 2918 GEN = TYPE.EQ.'GE' 2919 HER = TYPE.EQ.'HE' 2920 SYM = TYPE.EQ.'SY' 2921 TRI = TYPE.EQ.'TR' 2922 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U' 2923 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L' 2924 UNIT = TRI.AND.DIAG.EQ.'U' 2925* 2926* Generate data in array A. 2927* 2928 DO 20 J = 1, N 2929 DO 10 I = 1, M 2930 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) 2931 $ THEN 2932 A( I, J ) = ZBEG( RESET ) + TRANSL 2933 IF( I.NE.J )THEN 2934* Set some elements to zero 2935 IF( N.GT.3.AND.J.EQ.N/2 ) 2936 $ A( I, J ) = ZERO 2937 IF( HER )THEN 2938 A( J, I ) = DCONJG( A( I, J ) ) 2939 ELSE IF( SYM )THEN 2940 A( J, I ) = A( I, J ) 2941 ELSE IF( TRI )THEN 2942 A( J, I ) = ZERO 2943 END IF 2944 END IF 2945 END IF 2946 10 CONTINUE 2947 IF( HER ) 2948 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO ) 2949 IF( TRI ) 2950 $ A( J, J ) = A( J, J ) + ONE 2951 IF( UNIT ) 2952 $ A( J, J ) = ONE 2953 20 CONTINUE 2954* 2955* Store elements in array AS in data structure required by routine. 2956* 2957 IF( TYPE.EQ.'GE' )THEN 2958 DO 50 J = 1, N 2959 DO 30 I = 1, M 2960 AA( I + ( J - 1 )*LDA ) = A( I, J ) 2961 30 CONTINUE 2962 DO 40 I = M + 1, LDA 2963 AA( I + ( J - 1 )*LDA ) = ROGUE 2964 40 CONTINUE 2965 50 CONTINUE 2966 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN 2967 DO 90 J = 1, N 2968 IF( UPPER )THEN 2969 IBEG = 1 2970 IF( UNIT )THEN 2971 IEND = J - 1 2972 ELSE 2973 IEND = J 2974 END IF 2975 ELSE 2976 IF( UNIT )THEN 2977 IBEG = J + 1 2978 ELSE 2979 IBEG = J 2980 END IF 2981 IEND = N 2982 END IF 2983 DO 60 I = 1, IBEG - 1 2984 AA( I + ( J - 1 )*LDA ) = ROGUE 2985 60 CONTINUE 2986 DO 70 I = IBEG, IEND 2987 AA( I + ( J - 1 )*LDA ) = A( I, J ) 2988 70 CONTINUE 2989 DO 80 I = IEND + 1, LDA 2990 AA( I + ( J - 1 )*LDA ) = ROGUE 2991 80 CONTINUE 2992 IF( HER )THEN 2993 JJ = J + ( J - 1 )*LDA 2994 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE ) 2995 END IF 2996 90 CONTINUE 2997 END IF 2998 RETURN 2999* 3000* End of ZMAKE. 3001* 3002 END 3003 SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, 3004 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, 3005 $ NOUT, MV ) 3006* 3007* Checks the results of the computational tests. 3008* 3009* Auxiliary routine for test program for Level 3 Blas. 3010* 3011* -- Written on 8-February-1989. 3012* Jack Dongarra, Argonne National Laboratory. 3013* Iain Duff, AERE Harwell. 3014* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3015* Sven Hammarling, Numerical Algorithms Group Ltd. 3016* 3017* .. Parameters .. 3018 COMPLEX*16 ZERO 3019 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) 3020 DOUBLE PRECISION RZERO, RONE 3021 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 ) 3022* .. Scalar Arguments .. 3023 COMPLEX*16 ALPHA, BETA 3024 DOUBLE PRECISION EPS, ERR 3025 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT 3026 LOGICAL FATAL, MV 3027 CHARACTER*1 TRANSA, TRANSB 3028* .. Array Arguments .. 3029 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ), 3030 $ CC( LDCC, * ), CT( * ) 3031 DOUBLE PRECISION G( * ) 3032* .. Local Scalars .. 3033 COMPLEX*16 CL 3034 DOUBLE PRECISION ERRI 3035 INTEGER I, J, K 3036 LOGICAL CTRANA, CTRANB, TRANA, TRANB 3037* .. Intrinsic Functions .. 3038 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT 3039* .. Statement Functions .. 3040 DOUBLE PRECISION ABS1 3041* .. Statement Function definitions .. 3042 ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) ) 3043* .. Executable Statements .. 3044 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' 3045 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' 3046 CTRANA = TRANSA.EQ.'C' 3047 CTRANB = TRANSB.EQ.'C' 3048* 3049* Compute expected result, one column at a time, in CT using data 3050* in A, B and C. 3051* Compute gauges in G. 3052* 3053 DO 220 J = 1, N 3054* 3055 DO 10 I = 1, M 3056 CT( I ) = ZERO 3057 G( I ) = RZERO 3058 10 CONTINUE 3059 IF( .NOT.TRANA.AND..NOT.TRANB )THEN 3060 DO 30 K = 1, KK 3061 DO 20 I = 1, M 3062 CT( I ) = CT( I ) + A( I, K )*B( K, J ) 3063 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) ) 3064 20 CONTINUE 3065 30 CONTINUE 3066 ELSE IF( TRANA.AND..NOT.TRANB )THEN 3067 IF( CTRANA )THEN 3068 DO 50 K = 1, KK 3069 DO 40 I = 1, M 3070 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J ) 3071 G( I ) = G( I ) + ABS1( A( K, I ) )* 3072 $ ABS1( B( K, J ) ) 3073 40 CONTINUE 3074 50 CONTINUE 3075 ELSE 3076 DO 70 K = 1, KK 3077 DO 60 I = 1, M 3078 CT( I ) = CT( I ) + A( K, I )*B( K, J ) 3079 G( I ) = G( I ) + ABS1( A( K, I ) )* 3080 $ ABS1( B( K, J ) ) 3081 60 CONTINUE 3082 70 CONTINUE 3083 END IF 3084 ELSE IF( .NOT.TRANA.AND.TRANB )THEN 3085 IF( CTRANB )THEN 3086 DO 90 K = 1, KK 3087 DO 80 I = 1, M 3088 CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) ) 3089 G( I ) = G( I ) + ABS1( A( I, K ) )* 3090 $ ABS1( B( J, K ) ) 3091 80 CONTINUE 3092 90 CONTINUE 3093 ELSE 3094 DO 110 K = 1, KK 3095 DO 100 I = 1, M 3096 CT( I ) = CT( I ) + A( I, K )*B( J, K ) 3097 G( I ) = G( I ) + ABS1( A( I, K ) )* 3098 $ ABS1( B( J, K ) ) 3099 100 CONTINUE 3100 110 CONTINUE 3101 END IF 3102 ELSE IF( TRANA.AND.TRANB )THEN 3103 IF( CTRANA )THEN 3104 IF( CTRANB )THEN 3105 DO 130 K = 1, KK 3106 DO 120 I = 1, M 3107 CT( I ) = CT( I ) + DCONJG( A( K, I ) )* 3108 $ DCONJG( B( J, K ) ) 3109 G( I ) = G( I ) + ABS1( A( K, I ) )* 3110 $ ABS1( B( J, K ) ) 3111 120 CONTINUE 3112 130 CONTINUE 3113 ELSE 3114 DO 150 K = 1, KK 3115 DO 140 I = 1, M 3116 CT( I ) = CT( I ) + DCONJG( A( K, I ) )* 3117 $ B( J, K ) 3118 G( I ) = G( I ) + ABS1( A( K, I ) )* 3119 $ ABS1( B( J, K ) ) 3120 140 CONTINUE 3121 150 CONTINUE 3122 END IF 3123 ELSE 3124 IF( CTRANB )THEN 3125 DO 170 K = 1, KK 3126 DO 160 I = 1, M 3127 CT( I ) = CT( I ) + A( K, I )* 3128 $ DCONJG( B( J, K ) ) 3129 G( I ) = G( I ) + ABS1( A( K, I ) )* 3130 $ ABS1( B( J, K ) ) 3131 160 CONTINUE 3132 170 CONTINUE 3133 ELSE 3134 DO 190 K = 1, KK 3135 DO 180 I = 1, M 3136 CT( I ) = CT( I ) + A( K, I )*B( J, K ) 3137 G( I ) = G( I ) + ABS1( A( K, I ) )* 3138 $ ABS1( B( J, K ) ) 3139 180 CONTINUE 3140 190 CONTINUE 3141 END IF 3142 END IF 3143 END IF 3144 DO 200 I = 1, M 3145 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) 3146 G( I ) = ABS1( ALPHA )*G( I ) + 3147 $ ABS1( BETA )*ABS1( C( I, J ) ) 3148 200 CONTINUE 3149* 3150* Compute the error ratio for this result. 3151* 3152 ERR = ZERO 3153 DO 210 I = 1, M 3154 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS 3155 IF( G( I ).NE.RZERO ) 3156 $ ERRI = ERRI/G( I ) 3157 ERR = MAX( ERR, ERRI ) 3158 IF( ERR*SQRT( EPS ).GE.RONE ) 3159 $ GO TO 230 3160 210 CONTINUE 3161* 3162 220 CONTINUE 3163* 3164* If the loop completes, all results are at least half accurate. 3165 GO TO 250 3166* 3167* Report fatal error. 3168* 3169 230 FATAL = .TRUE. 3170 WRITE( NOUT, FMT = 9999 ) 3171 DO 240 I = 1, M 3172 IF( MV )THEN 3173 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) 3174 ELSE 3175 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) 3176 END IF 3177 240 CONTINUE 3178 IF( N.GT.1 ) 3179 $ WRITE( NOUT, FMT = 9997 )J 3180* 3181 250 CONTINUE 3182 RETURN 3183* 3184 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', 3185 $ 'F ACCURATE *******', /' EXPECTED RE', 3186 $ 'SULT COMPUTED RESULT' ) 3187 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) 3188 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) 3189* 3190* End of ZMMCH. 3191* 3192 END 3193 LOGICAL FUNCTION LZE( RI, RJ, LR ) 3194* 3195* Tests if two arrays are identical. 3196* 3197* Auxiliary routine for test program for Level 3 Blas. 3198* 3199* -- Written on 8-February-1989. 3200* Jack Dongarra, Argonne National Laboratory. 3201* Iain Duff, AERE Harwell. 3202* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3203* Sven Hammarling, Numerical Algorithms Group Ltd. 3204* 3205* .. Scalar Arguments .. 3206 INTEGER LR 3207* .. Array Arguments .. 3208 COMPLEX*16 RI( * ), RJ( * ) 3209* .. Local Scalars .. 3210 INTEGER I 3211* .. Executable Statements .. 3212 DO 10 I = 1, LR 3213 IF( RI( I ).NE.RJ( I ) ) 3214 $ GO TO 20 3215 10 CONTINUE 3216 LZE = .TRUE. 3217 GO TO 30 3218 20 CONTINUE 3219 LZE = .FALSE. 3220 30 RETURN 3221* 3222* End of LZE. 3223* 3224 END 3225 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA ) 3226* 3227* Tests if selected elements in two arrays are equal. 3228* 3229* TYPE is 'GE' or 'HE' or 'SY'. 3230* 3231* Auxiliary routine for test program for Level 3 Blas. 3232* 3233* -- Written on 8-February-1989. 3234* Jack Dongarra, Argonne National Laboratory. 3235* Iain Duff, AERE Harwell. 3236* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3237* Sven Hammarling, Numerical Algorithms Group Ltd. 3238* 3239* .. Scalar Arguments .. 3240 INTEGER LDA, M, N 3241 CHARACTER*1 UPLO 3242 CHARACTER*2 TYPE 3243* .. Array Arguments .. 3244 COMPLEX*16 AA( LDA, * ), AS( LDA, * ) 3245* .. Local Scalars .. 3246 INTEGER I, IBEG, IEND, J 3247 LOGICAL UPPER 3248* .. Executable Statements .. 3249 UPPER = UPLO.EQ.'U' 3250 IF( TYPE.EQ.'GE' )THEN 3251 DO 20 J = 1, N 3252 DO 10 I = M + 1, LDA 3253 IF( AA( I, J ).NE.AS( I, J ) ) 3254 $ GO TO 70 3255 10 CONTINUE 3256 20 CONTINUE 3257 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN 3258 DO 50 J = 1, N 3259 IF( UPPER )THEN 3260 IBEG = 1 3261 IEND = J 3262 ELSE 3263 IBEG = J 3264 IEND = N 3265 END IF 3266 DO 30 I = 1, IBEG - 1 3267 IF( AA( I, J ).NE.AS( I, J ) ) 3268 $ GO TO 70 3269 30 CONTINUE 3270 DO 40 I = IEND + 1, LDA 3271 IF( AA( I, J ).NE.AS( I, J ) ) 3272 $ GO TO 70 3273 40 CONTINUE 3274 50 CONTINUE 3275 END IF 3276* 3277 60 CONTINUE 3278 LZERES = .TRUE. 3279 GO TO 80 3280 70 CONTINUE 3281 LZERES = .FALSE. 3282 80 RETURN 3283* 3284* End of LZERES. 3285* 3286 END 3287 COMPLEX*16 FUNCTION ZBEG( RESET ) 3288* 3289* Generates complex numbers as pairs of random numbers uniformly 3290* distributed between -0.5 and 0.5. 3291* 3292* Auxiliary routine for test program for Level 3 Blas. 3293* 3294* -- Written on 8-February-1989. 3295* Jack Dongarra, Argonne National Laboratory. 3296* Iain Duff, AERE Harwell. 3297* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3298* Sven Hammarling, Numerical Algorithms Group Ltd. 3299* 3300* .. Scalar Arguments .. 3301 LOGICAL RESET 3302* .. Local Scalars .. 3303 INTEGER I, IC, J, MI, MJ 3304* .. Save statement .. 3305 SAVE I, IC, J, MI, MJ 3306* .. Intrinsic Functions .. 3307 INTRINSIC DCMPLX 3308* .. Executable Statements .. 3309 IF( RESET )THEN 3310* Initialize local variables. 3311 MI = 891 3312 MJ = 457 3313 I = 7 3314 J = 7 3315 IC = 0 3316 RESET = .FALSE. 3317 END IF 3318* 3319* The sequence of values of I or J is bounded between 1 and 999. 3320* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. 3321* If initial I or J = 4 or 8, the period will be 25. 3322* If initial I or J = 5, the period will be 10. 3323* IC is used to break up the period by skipping 1 value of I or J 3324* in 6. 3325* 3326 IC = IC + 1 3327 10 I = I*MI 3328 J = J*MJ 3329 I = I - 1000*( I/1000 ) 3330 J = J - 1000*( J/1000 ) 3331 IF( IC.GE.5 )THEN 3332 IC = 0 3333 GO TO 10 3334 END IF 3335 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 ) 3336 RETURN 3337* 3338* End of ZBEG. 3339* 3340 END 3341 DOUBLE PRECISION FUNCTION DDIFF( X, Y ) 3342* 3343* Auxiliary routine for test program for Level 3 Blas. 3344* 3345* -- Written on 8-February-1989. 3346* Jack Dongarra, Argonne National Laboratory. 3347* Iain Duff, AERE Harwell. 3348* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3349* Sven Hammarling, Numerical Algorithms Group Ltd. 3350* 3351* .. Scalar Arguments .. 3352 DOUBLE PRECISION X, Y 3353* .. Executable Statements .. 3354 DDIFF = X - Y 3355 RETURN 3356* 3357* End of DDIFF. 3358* 3359 END 3360 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK ) 3361* 3362* Tests whether XERBLA has detected an error when it should. 3363* 3364* Auxiliary routine for test program for Level 3 Blas. 3365* 3366* -- Written on 8-February-1989. 3367* Jack Dongarra, Argonne National Laboratory. 3368* Iain Duff, AERE Harwell. 3369* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3370* Sven Hammarling, Numerical Algorithms Group Ltd. 3371* 3372* .. Scalar Arguments .. 3373 INTEGER INFOT, NOUT 3374 LOGICAL LERR, OK 3375 CHARACTER*6 SRNAMT 3376* .. Executable Statements .. 3377 IF( .NOT.LERR )THEN 3378 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT 3379 OK = .FALSE. 3380 END IF 3381 LERR = .FALSE. 3382 RETURN 3383* 3384 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D', 3385 $ 'ETECTED BY ', A6, ' *****' ) 3386* 3387* End of CHKXER. 3388* 3389 END 3390 SUBROUTINE XERBLA( SRNAME, INFO ) 3391* 3392* This is a special version of XERBLA to be used only as part of 3393* the test program for testing error exits from the Level 3 BLAS 3394* routines. 3395* 3396* XERBLA is an error handler for the Level 3 BLAS routines. 3397* 3398* It is called by the Level 3 BLAS routines if an input parameter is 3399* invalid. 3400* 3401* Auxiliary routine for test program for Level 3 Blas. 3402* 3403* -- Written on 8-February-1989. 3404* Jack Dongarra, Argonne National Laboratory. 3405* Iain Duff, AERE Harwell. 3406* Jeremy Du Croz, Numerical Algorithms Group Ltd. 3407* Sven Hammarling, Numerical Algorithms Group Ltd. 3408* 3409* .. Scalar Arguments .. 3410 INTEGER INFO 3411 CHARACTER*6 SRNAME 3412* .. Scalars in Common .. 3413 INTEGER INFOT, NOUT 3414 LOGICAL LERR, OK 3415 CHARACTER*6 SRNAMT 3416* .. Common blocks .. 3417 COMMON /INFOC/INFOT, NOUT, OK, LERR 3418 COMMON /SRNAMC/SRNAMT 3419* .. Executable Statements .. 3420 LERR = .TRUE. 3421 IF( INFO.NE.INFOT )THEN 3422 IF( INFOT.NE.0 )THEN 3423 WRITE( NOUT, FMT = 9999 )INFO, INFOT 3424 ELSE 3425 WRITE( NOUT, FMT = 9997 )INFO 3426 END IF 3427 OK = .FALSE. 3428 END IF 3429 IF( SRNAME.NE.SRNAMT )THEN 3430 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT 3431 OK = .FALSE. 3432 END IF 3433 RETURN 3434* 3435 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD', 3436 $ ' OF ', I2, ' *******' ) 3437 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE', 3438 $ 'AD OF ', A6, ' *******' ) 3439 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, 3440 $ ' *******' ) 3441* 3442* End of XERBLA 3443* 3444 END 3445 3446