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