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