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