Home | History | Annotate | Download | only in testing
      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.0D0, 0.0D0 ),
     56      $                   ONE = ( 1.0D0, 0.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          MAX, MIN
     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          IF( IDIM( 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 = 9988, END = 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 = MIN( 32, NMAX )
    206       DO 100 J = 1, N
    207          DO 90 I = 1, N
    208             AB( I, J ) = MAX( I - J + 1, 0 )
    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 ( 140, 150, 150, 160, 160, 170, 170,
    285      $              180, 180 )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 FORMAT( 1X, 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.0D0, 0.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 = IDIM( IN )
    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 = 1, 3
    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 = 1, 3
    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                            IF( NULL )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 FORMAT( 1X, 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.0D0, 0.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( 2: 3 ).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 = IDIM( IN )
    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 = 1, 2
    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 = 1, 2
    764                   UPLO = ICHU( ICU: ICU )
    765 *
    766 *                 Generate the hermitian or symmetric matrix A.
    767 *
    768                   CALL ZMAKE( SNAME( 2: 3 ), 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                         IF( NULL )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 FORMAT( 1X, 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.0D0, 0.0D0 ),
    948      $                   ONE = ( 1.0D0, 0.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 = IDIM( IN )
   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 = 1, 2
   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 = 1, 2
   1036                   UPLO = ICHU( ICU: ICU )
   1037 *
   1038                   DO 100 ICT = 1, 3
   1039                      TRANSA = ICHT( ICT: ICT )
   1040 *
   1041                      DO 90 ICD = 1, 2
   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( 4: 5 ).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( 4: 5 ).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                            IF( NULL )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( 4: 5 ).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( 4: 5 ).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 FORMAT( 1X, 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.0D0, 0.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          DCMPLX, MAX, DBLE
   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( 2: 3 ).EQ.'HE'
   1301 *
   1302       NARGS = 10
   1303       NC = 0
   1304       RESET = .TRUE.
   1305       ERRMAX = RZERO
   1306 *
   1307       DO 100 IN = 1, NIDIM
   1308          N = IDIM( IN )
   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 = 1, 2
   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 = 1, 2
   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( 2: 3 ), 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                         IF( NULL )THEN
   1448                            ISAME( 9 ) = LZE( CS, CC, LCC )
   1449                         ELSE
   1450                            ISAME( 9 ) = LZERES( SNAME( 2: 3 ), 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 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
   1563      $      F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ')               ',
   1564      $      '          .' )
   1565  9993 FORMAT( 1X, 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.0D0, 0.0D0 ),
   1591      $                   ONE = ( 1.0D0, 0.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          DCMPLX, DCONJG, MAX, DBLE
   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( 2: 3 ).EQ.'HE'
   1634 *
   1635       NARGS = 12
   1636       NC = 0
   1637       RESET = .TRUE.
   1638       ERRMAX = RZERO
   1639 *
   1640       DO 130 IN = 1, NIDIM
   1641          N = IDIM( IN )
   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 = 1, 2
   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 = 1, 2
   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( 2: 3 ), 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                         IF( NULL )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, 1, 2*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, 1, 2*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 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
   1937      $      '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
   1938      $      ', C,', I3, ')           .' )
   1939  9993 FORMAT( 1X, 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( 2, 1 ), B( 2, 1 ), C( 2, 1 )
   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 ( 10, 20, 30, 40, 50, 60, 70, 80,
   1986      $        90 )ISNUM
   1987    10 INFOT = 1
   1988       CALL ZGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   1989       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   1990       INFOT = 1
   1991       CALL ZGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   1992       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   1993       INFOT = 1
   1994       CALL ZGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   1995       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   1996       INFOT = 2
   1997       CALL ZGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   1998       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   1999       INFOT = 2
   2000       CALL ZGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2001       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2002       INFOT = 2
   2003       CALL ZGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2004       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2005       INFOT = 3
   2006       CALL ZGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2007       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2008       INFOT = 3
   2009       CALL ZGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2010       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2011       INFOT = 3
   2012       CALL ZGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2013       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2014       INFOT = 3
   2015       CALL ZGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2016       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2017       INFOT = 3
   2018       CALL ZGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2019       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2020       INFOT = 3
   2021       CALL ZGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2022       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2023       INFOT = 3
   2024       CALL ZGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2025       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2026       INFOT = 3
   2027       CALL ZGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2028       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2029       INFOT = 3
   2030       CALL ZGEMM( 'T', 'T', -1, 0, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, 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, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2058       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2059       INFOT = 5
   2060       CALL ZGEMM( 'N', 'N', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 0, 0, -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', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
   2088       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2089       INFOT = 8
   2090       CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
   2091       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2092       INFOT = 8
   2093       CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
   2094       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2095       INFOT = 8
   2096       CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
   2097       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2098       INFOT = 8
   2099       CALL ZGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2100       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2101       INFOT = 8
   2102       CALL ZGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2103       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2104       INFOT = 8
   2105       CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
   2106       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2107       INFOT = 8
   2108       CALL ZGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2109       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2110       INFOT = 8
   2111       CALL ZGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2112       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2113       INFOT = 10
   2114       CALL ZGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2115       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2116       INFOT = 10
   2117       CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2118       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2119       INFOT = 10
   2120       CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2121       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2122       INFOT = 10
   2123       CALL ZGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2124       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2125       INFOT = 10
   2126       CALL ZGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2127       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2128       INFOT = 10
   2129       CALL ZGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2130       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2131       INFOT = 10
   2132       CALL ZGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2133       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2134       INFOT = 10
   2135       CALL ZGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2136       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2137       INFOT = 10
   2138       CALL ZGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2139       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2140       INFOT = 13
   2141       CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2142       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2143       INFOT = 13
   2144       CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2145       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2146       INFOT = 13
   2147       CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2148       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2149       INFOT = 13
   2150       CALL ZGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2151       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2152       INFOT = 13
   2153       CALL ZGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2154       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2155       INFOT = 13
   2156       CALL ZGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2157       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2158       INFOT = 13
   2159       CALL ZGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2160       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2161       INFOT = 13
   2162       CALL ZGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2163       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2164       INFOT = 13
   2165       CALL ZGEMM( 'T', 'T', 2, 0, 0, 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', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2170       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2171       INFOT = 2
   2172       CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2173       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2174       INFOT = 3
   2175       CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2176       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2177       INFOT = 3
   2178       CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2179       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2180       INFOT = 3
   2181       CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2182       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2183       INFOT = 3
   2184       CALL ZHEMM( 'R', 'L', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
   2200       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2201       INFOT = 7
   2202       CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2203       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2204       INFOT = 7
   2205       CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
   2206       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2207       INFOT = 7
   2208       CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2209       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2210       INFOT = 9
   2211       CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2212       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2213       INFOT = 9
   2214       CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2215       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2216       INFOT = 9
   2217       CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2218       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2219       INFOT = 9
   2220       CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2221       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2222       INFOT = 12
   2223       CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2224       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2225       INFOT = 12
   2226       CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
   2227       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2228       INFOT = 12
   2229       CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2230       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2231       INFOT = 12
   2232       CALL ZHEMM( 'R', 'L', 2, 0, 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', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2237       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2238       INFOT = 2
   2239       CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2240       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2241       INFOT = 3
   2242       CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2243       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2244       INFOT = 3
   2245       CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2246       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2247       INFOT = 3
   2248       CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2249       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2250       INFOT = 3
   2251       CALL ZSYMM( 'R', 'L', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
   2267       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2268       INFOT = 7
   2269       CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2270       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2271       INFOT = 7
   2272       CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
   2273       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2274       INFOT = 7
   2275       CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2276       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2277       INFOT = 9
   2278       CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2279       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2280       INFOT = 9
   2281       CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2282       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2283       INFOT = 9
   2284       CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2285       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2286       INFOT = 9
   2287       CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2288       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2289       INFOT = 12
   2290       CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2291       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2292       INFOT = 12
   2293       CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
   2294       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2295       INFOT = 12
   2296       CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2297       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2298       INFOT = 12
   2299       CALL ZSYMM( 'R', 'L', 2, 0, 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', 0, 0, ALPHA, A, 1, B, 1 )
   2304       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2305       INFOT = 2
   2306       CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
   2307       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2308       INFOT = 3
   2309       CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
   2310       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2311       INFOT = 4
   2312       CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
   2313       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2314       INFOT = 5
   2315       CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2316       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2317       INFOT = 5
   2318       CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2319       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2320       INFOT = 5
   2321       CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2322       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2323       INFOT = 5
   2324       CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2325       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2326       INFOT = 5
   2327       CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2328       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2329       INFOT = 5
   2330       CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2331       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2332       INFOT = 5
   2333       CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2334       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2335       INFOT = 5
   2336       CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2337       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2338       INFOT = 5
   2339       CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2340       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2341       INFOT = 5
   2342       CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2343       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2344       INFOT = 5
   2345       CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2346       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2347       INFOT = 5
   2348       CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 2 )
   2388       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2389       INFOT = 9
   2390       CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2391       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2392       INFOT = 9
   2393       CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2394       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2395       INFOT = 9
   2396       CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2397       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2398       INFOT = 9
   2399       CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2400       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2401       INFOT = 9
   2402       CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2403       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2404       INFOT = 9
   2405       CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2406       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2407       INFOT = 9
   2408       CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2409       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2410       INFOT = 9
   2411       CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2412       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2413       INFOT = 9
   2414       CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2415       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2416       INFOT = 9
   2417       CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2418       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2419       INFOT = 9
   2420       CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2421       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2422       INFOT = 11
   2423       CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2424       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2425       INFOT = 11
   2426       CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2427       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2428       INFOT = 11
   2429       CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2430       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2431       INFOT = 11
   2432       CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2433       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2434       INFOT = 11
   2435       CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2436       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2437       INFOT = 11
   2438       CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2439       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2440       INFOT = 11
   2441       CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2442       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2443       INFOT = 11
   2444       CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2445       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2446       INFOT = 11
   2447       CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2448       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2449       INFOT = 11
   2450       CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2451       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2452       INFOT = 11
   2453       CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2454       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2455       INFOT = 11
   2456       CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, 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', 0, 0, ALPHA, A, 1, B, 1 )
   2461       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2462       INFOT = 2
   2463       CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
   2464       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2465       INFOT = 3
   2466       CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
   2467       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2468       INFOT = 4
   2469       CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
   2470       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2471       INFOT = 5
   2472       CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2473       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2474       INFOT = 5
   2475       CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2476       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2477       INFOT = 5
   2478       CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2479       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2480       INFOT = 5
   2481       CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2482       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2483       INFOT = 5
   2484       CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2485       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2486       INFOT = 5
   2487       CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2488       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2489       INFOT = 5
   2490       CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2491       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2492       INFOT = 5
   2493       CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2494       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2495       INFOT = 5
   2496       CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2497       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2498       INFOT = 5
   2499       CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2500       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2501       INFOT = 5
   2502       CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
   2503       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2504       INFOT = 5
   2505       CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 2 )
   2545       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2546       INFOT = 9
   2547       CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2548       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2549       INFOT = 9
   2550       CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2551       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2552       INFOT = 9
   2553       CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2554       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2555       INFOT = 9
   2556       CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2557       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2558       INFOT = 9
   2559       CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2560       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2561       INFOT = 9
   2562       CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2563       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2564       INFOT = 9
   2565       CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2566       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2567       INFOT = 9
   2568       CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
   2569       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2570       INFOT = 9
   2571       CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2572       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2573       INFOT = 9
   2574       CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2575       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2576       INFOT = 9
   2577       CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
   2578       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2579       INFOT = 11
   2580       CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2581       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2582       INFOT = 11
   2583       CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2584       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2585       INFOT = 11
   2586       CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2587       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2588       INFOT = 11
   2589       CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2590       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2591       INFOT = 11
   2592       CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2593       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2594       INFOT = 11
   2595       CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2596       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2597       INFOT = 11
   2598       CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2599       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2600       INFOT = 11
   2601       CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2602       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2603       INFOT = 11
   2604       CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
   2605       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2606       INFOT = 11
   2607       CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2608       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2609       INFOT = 11
   2610       CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
   2611       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2612       INFOT = 11
   2613       CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, 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', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
   2618       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2619       INFOT = 2
   2620       CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
   2621       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2622       INFOT = 3
   2623       CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
   2624       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2625       INFOT = 3
   2626       CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
   2627       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2628       INFOT = 3
   2629       CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
   2630       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2631       INFOT = 3
   2632       CALL ZHERK( 'L', 'C', -1, 0, 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', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
   2648       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2649       INFOT = 7
   2650       CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
   2651       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2652       INFOT = 7
   2653       CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
   2654       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2655       INFOT = 7
   2656       CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
   2657       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2658       INFOT = 10
   2659       CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
   2660       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2661       INFOT = 10
   2662       CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
   2663       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2664       INFOT = 10
   2665       CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
   2666       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2667       INFOT = 10
   2668       CALL ZHERK( 'L', 'C', 2, 0, 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', 0, 0, ALPHA, A, 1, BETA, C, 1 )
   2673       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2674       INFOT = 2
   2675       CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
   2676       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2677       INFOT = 3
   2678       CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
   2679       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2680       INFOT = 3
   2681       CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
   2682       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2683       INFOT = 3
   2684       CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
   2685       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2686       INFOT = 3
   2687       CALL ZSYRK( 'L', 'T', -1, 0, 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', 2, 0, ALPHA, A, 1, BETA, C, 2 )
   2703       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2704       INFOT = 7
   2705       CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
   2706       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2707       INFOT = 7
   2708       CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
   2709       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2710       INFOT = 7
   2711       CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
   2712       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2713       INFOT = 10
   2714       CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
   2715       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2716       INFOT = 10
   2717       CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
   2718       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2719       INFOT = 10
   2720       CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
   2721       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2722       INFOT = 10
   2723       CALL ZSYRK( 'L', 'T', 2, 0, 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', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2728       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2729       INFOT = 2
   2730       CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2731       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2732       INFOT = 3
   2733       CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2734       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2735       INFOT = 3
   2736       CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2737       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2738       INFOT = 3
   2739       CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2740       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2741       INFOT = 3
   2742       CALL ZHER2K( 'L', 'C', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
   2758       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2759       INFOT = 7
   2760       CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2761       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2762       INFOT = 7
   2763       CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
   2764       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2765       INFOT = 7
   2766       CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2767       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2768       INFOT = 9
   2769       CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
   2770       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2771       INFOT = 9
   2772       CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
   2773       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2774       INFOT = 9
   2775       CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
   2776       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2777       INFOT = 9
   2778       CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
   2779       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2780       INFOT = 12
   2781       CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
   2782       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2783       INFOT = 12
   2784       CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
   2785       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2786       INFOT = 12
   2787       CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
   2788       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2789       INFOT = 12
   2790       CALL ZHER2K( 'L', 'C', 2, 0, 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', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2795       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2796       INFOT = 2
   2797       CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2798       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2799       INFOT = 3
   2800       CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2801       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2802       INFOT = 3
   2803       CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2804       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2805       INFOT = 3
   2806       CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2807       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2808       INFOT = 3
   2809       CALL ZSYR2K( 'L', 'T', -1, 0, 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', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
   2825       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2826       INFOT = 7
   2827       CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2828       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2829       INFOT = 7
   2830       CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
   2831       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2832       INFOT = 7
   2833       CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2834       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2835       INFOT = 9
   2836       CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
   2837       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2838       INFOT = 9
   2839       CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2840       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2841       INFOT = 9
   2842       CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
   2843       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2844       INFOT = 9
   2845       CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
   2846       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2847       INFOT = 12
   2848       CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2849       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2850       INFOT = 12
   2851       CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
   2852       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2853       INFOT = 12
   2854       CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
   2855       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
   2856       INFOT = 12
   2857       CALL ZSYR2K( 'L', 'T', 2, 0, 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.0D0, 0.0D0 ),
   2894      $                   ONE = ( 1.0D0, 0.0D0 ) )
   2895       COMPLEX*16         ROGUE
   2896       PARAMETER          ( ROGUE = ( -1.0D10, 1.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          DCMPLX, DCONJG, DBLE
   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 ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
   2949          IF( TRI )
   2950      $      A( J, J ) = A( J, J ) + ONE
   2951          IF( UNIT )
   2952      $      A( J, J ) = ONE
   2953    20 CONTINUE
   2954 *
   2955 *     Store elements in array AS in data structure required by routine.
   2956 *
   2957       IF( TYPE.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 IF( TYPE.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                IF( UNIT )THEN
   2971                   IEND = J - 1
   2972                ELSE
   2973                   IEND = J
   2974                END IF
   2975             ELSE
   2976                IF( UNIT )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 ) = DCMPLX( DBLE( 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.0D0, 0.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          ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
   3039 *     .. Statement Functions ..
   3040       DOUBLE PRECISION   ABS1
   3041 *     .. Statement Function definitions ..
   3042       ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( 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 FORMAT( 1X, 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       IF( TYPE.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 IF( TYPE.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 
   3446