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