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