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