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