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