51      parameter( nin = 5, nout = 6 )
 
   53      parameter( nsubs = 10 )
 
   55      parameter( zero = ( 0.0d0, 0.0d0 ),
 
   56     $                   one = ( 1.0d0, 0.0d0 ) )
 
   57      DOUBLE PRECISION   rzero, rhalf, rone
 
   58      parameter( rzero = 0.0d0, rhalf = 0.5d0, rone = 1.0d0 )
 
   60      parameter( nmax = 65 )
 
   61      INTEGER            nidmax, nalmax, nbemax
 
   62      parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
 
   64      DOUBLE PRECISION   eps, err, thresh
 
   65      INTEGER            i, isnum, j, n, nalf, nbet, nidim, ntra,
 
   67      LOGICAL            fatal, ltestt, rewi, same, sfatal, trace,
 
   68     $                   tsterr, corder, rorder
 
   69      CHARACTER*1        transa, transb
 
   73      COMPLEX*16         aa( nmax*nmax ), ab( nmax, 2*nmax ),
 
   74     $                   alf( nalmax ), as( nmax*nmax ),
 
   75     $                   bb( nmax*nmax ), bet( nbemax ),
 
   76     $                   bs( nmax*nmax ), c( nmax, nmax ),
 
   77     $                   cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
 
   79      DOUBLE PRECISION   g( nmax )
 
   80      INTEGER            idim( nidmax )
 
   81      LOGICAL            ltest( nsubs )
 
   82      CHARACTER*13       snames( nsubs )
 
   84      DOUBLE PRECISION   ddiff 
   96      COMMON             /infoc/infot, noutc, ok, lerr
 
   99      DATA               snames/
'cblas_zgemm ', 
'cblas_zhemm ',
 
  100     $                   
'cblas_zsymm ', 
'cblas_ztrmm ', 
'cblas_ztrsm ',
 
  101     $                   
'cblas_zherk ', 
'cblas_zsyrk ', 
'cblas_zher2k',
 
  102     $                   
'cblas_zsyr2k', 
'cblas_zgemmtr'/
 
  109      READ( nin, fmt = * )snaps
 
  110      READ( nin, fmt = * )ntra
 
  113         OPEN( ntra, file = snaps, status = 
'NEW' )
 
  116      READ( nin, fmt = * )rewi
 
  117      rewi = rewi.AND.trace
 
  119      READ( nin, fmt = * )sfatal
 
  121      READ( nin, fmt = * )tsterr
 
  123      READ( nin, fmt = * )layout
 
  125      READ( nin, fmt = * )thresh
 
  130      READ( nin, fmt = * )nidim
 
  131      IF( nidim.LT.1.OR.nidim.GT.nidmax )
THEN 
  132         WRITE( nout, fmt = 9997 )
'N', nidmax
 
  135      READ( nin, fmt = * )( idim( i ), i = 1, nidim )
 
  137         IF( idim( i ).LT.0.OR.idim( i ).GT.nmax )
THEN 
  138            WRITE( nout, fmt = 9996 )nmax
 
  143      READ( nin, fmt = * )nalf
 
  144      IF( nalf.LT.1.OR.nalf.GT.nalmax )
THEN 
  145         WRITE( nout, fmt = 9997 )
'ALPHA', nalmax
 
  148      READ( nin, fmt = * )( alf( i ), i = 1, nalf )
 
  150      READ( nin, fmt = * )nbet
 
  151      IF( nbet.LT.1.OR.nbet.GT.nbemax )
THEN 
  152         WRITE( nout, fmt = 9997 )
'BETA', nbemax
 
  155      READ( nin, fmt = * )( bet( i ), i = 1, nbet )
 
  159      WRITE( nout, fmt = 9995 )
 
  160      WRITE( nout, fmt = 9994 )( idim( i ), i = 1, nidim )
 
  161      WRITE( nout, fmt = 9993 )( alf( i ), i = 1, nalf )
 
  162      WRITE( nout, fmt = 9992 )( bet( i ), i = 1, nbet )
 
  163      IF( .NOT.tsterr )
THEN 
  164         WRITE( nout, fmt = * )
 
  165         WRITE( nout, fmt = 9984 )
 
  167      WRITE( nout, fmt = * )
 
  168      WRITE( nout, fmt = 9999 )thresh
 
  169      WRITE( nout, fmt = * )
 
  173      IF (layout.EQ.2) 
THEN 
  176         WRITE( *, fmt = 10002 )
 
  177      ELSE IF (layout.EQ.1) 
THEN 
  179         WRITE( *, fmt = 10001 )
 
  180      ELSE IF (layout.EQ.0) 
THEN 
  182         WRITE( *, fmt = 10000 )
 
  193   30 
READ( nin, fmt = 9988, 
END = 60 )SNAMET, ltestt
 
  195         IF( snamet.EQ.snames( i ) )
 
  198      WRITE( nout, fmt = 9990 )snamet
 
  200   50 ltest( i ) = ltestt
 
  210      IF( 
ddiff( rone + eps, rone ).EQ.rzero )
 
  216      WRITE( nout, fmt = 9998 )eps
 
  223            ab( i, j ) = max( i - j + 1, 0 )
 
  225         ab( j, nmax + 1 ) = j
 
  226         ab( 1, nmax + j ) = j
 
  230         cc( j ) = j*( ( j + 1 )*j )/2 - ( ( j + 1 )*j*( j - 1 ) )/3
 
  236      CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
 
  237     $            ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
 
  238     $            nmax, eps, err, fatal, nout, .true. )
 
  239      same = 
lze( cc, ct, n )
 
  240      IF( .NOT.same.OR.err.NE.rzero )
THEN 
  241         WRITE( nout, fmt = 9989 )transa, transb, same, err
 
  245      CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
 
  246     $            ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
 
  247     $            nmax, eps, err, fatal, nout, .true. )
 
  248      same = 
lze( cc, ct, n )
 
  249      IF( .NOT.same.OR.err.NE.rzero )
THEN 
  250         WRITE( nout, fmt = 9989 )transa, transb, same, err
 
  254         ab( j, nmax + 1 ) = n - j + 1
 
  255         ab( 1, nmax + j ) = n - j + 1
 
  258         cc( n - j + 1 ) = j*( ( j + 1 )*j )/2 -
 
  259     $                     ( ( j + 1 )*j*( j - 1 ) )/3
 
  263      CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
 
  264     $            ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
 
  265     $            nmax, eps, err, fatal, nout, .true. )
 
  266      same = 
lze( cc, ct, n )
 
  267      IF( .NOT.same.OR.err.NE.rzero )
THEN 
  268         WRITE( nout, fmt = 9989 )transa, transb, same, err
 
  272      CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
 
  273     $            ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
 
  274     $            nmax, eps, err, fatal, nout, .true. )
 
  275      same = 
lze( cc, ct, n )
 
  276      IF( .NOT.same.OR.err.NE.rzero )
THEN 
  277         WRITE( nout, fmt = 9989 )transa, transb, same, err
 
  283      DO 200 isnum = 1, nsubs
 
  284         WRITE( nout, fmt = * )
 
  285         IF( .NOT.ltest( isnum ) )
THEN 
  287            WRITE( nout, fmt = 9987 )snames( isnum )
 
  289            srnamt = snames( isnum )
 
  292               CALL cz3chke( snames( isnum ) )
 
  293               WRITE( nout, fmt = * )
 
  299            GO TO ( 140, 150, 150, 160, 160, 170, 170,
 
  300     $              180, 180, 185) isnum
 
  303            CALL zchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  304     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  305     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  309            CALL zchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  310     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  311     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  317            CALL zchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  318     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  319     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  323            CALL zchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  324     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  325     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  331            CALL zchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  332     $                 rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
 
  333     $                 aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
 
  337            CALL zchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  338     $                 rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
 
  339     $                 aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
 
  345            CALL zchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  346     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  347     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  351            CALL zchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  352     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  353     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  359            CALL zchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  360     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  361     $                 nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
 
  365            CALL zchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  366     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  367     $                 nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
 
  373            CALL zchk6(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  374     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  375     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  379            CALL zchk6(snames( isnum ), eps, thresh, nout, ntra, trace,
 
  380     $                 rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
 
  381     $                 nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
 
  386  190       
IF( fatal.AND.sfatal )
 
  390      WRITE( nout, fmt = 9986 )
 
  394      WRITE( nout, fmt = 9985 )
 
  398      WRITE( nout, fmt = 9991 )
 
  40610002 
FORMAT( 
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
 
  40710001 
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
 
  40810000 
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
 
  409 9999 
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
 
  411 9998 
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, e9.1 )
 
  412 9997 
FORMAT(
' NUMBER OF VALUES OF ', a, 
' IS LESS THAN 1 OR GREATER ',
 
  414 9996 
FORMAT( 
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
 
  415 9995 
FORMAT(
'TESTS OF THE COMPLEX*16        LEVEL 3 BLAS', //
' THE F',
 
  416     $      
'OLLOWING PARAMETER VALUES WILL BE USED:' )
 
  417 9994 
FORMAT( 
'   FOR N              ', 9i6 )
 
  418 9993 
FORMAT( 
'   FOR ALPHA          ',
 
  419     $      7( 
'(', f4.1, 
',', f4.1, 
')  ', : ) )
 
  420 9992 
FORMAT( 
'   FOR BETA           ',
 
  421     $      7( 
'(', f4.1, 
',', f4.1, 
')  ', : ) )
 
  422 9991 
FORMAT( 
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
 
  423     $      /
' ******* TESTS ABANDONED *******' )
 
  424 9990 
FORMAT(
' SUBPROGRAM NAME ', a13,
' NOT RECOGNIZED', /
' ******* T',
 
  425     $      
'ESTS ABANDONED *******' )
 
  426 9989 
FORMAT(
' ERROR IN ZMMCH -  IN-LINE DOT PRODUCTS ARE BEING EVALU',
 
  427     $      
'ATED WRONGLY.', /
' ZMMCH WAS CALLED WITH TRANSA = ', a1,
 
  428     $      
'AND TRANSB = ', a1, /
' AND RETURNED SAME = ', l1, 
' AND ',
 
  429     $    
' ERR = ', f12.3, 
'.', /
' THIS MAY BE DUE TO FAULTS IN THE ',
 
  430     $     
'ARITHMETIC OR THE COMPILER.', /
' ******* TESTS ABANDONED ',
 
  432 9988 
FORMAT( a13,l2 )
 
  433 9987 
FORMAT( 1x, a13,
' WAS NOT TESTED' )
 
  434 9986 
FORMAT( /
' END OF TESTS' )
 
  435 9985 
FORMAT( /
' ******* FATAL ERROR - TESTS ABANDONED *******' )
 
  436 9984 
FORMAT( 
' ERROR-EXITS WILL NOT BE TESTED' )
 
  441      SUBROUTINE zchk1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
  442     $                  FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
 
  443     $                  A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
 
  458      PARAMETER          ( ZERO = ( 0.0, 0.0 ) )
 
  459      double precision   rzero
 
  460      parameter( rzero = 0.0 )
 
  462      DOUBLE PRECISION   EPS, THRESH
 
  463      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 
  464      LOGICAL            FATAL, REWI, TRACE
 
  467      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 
  468     $                   as( nmax*nmax ), b( nmax, nmax ),
 
  469     $                   bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
 
  470     $                   c( nmax, nmax ), cc( nmax*nmax ),
 
  471     $                   cs( nmax*nmax ), ct( nmax )
 
  472      DOUBLE PRECISION   G( NMAX )
 
  473      INTEGER            IDIM( NIDIM )
 
  475      COMPLEX*16         ALPHA, ALS, BETA, BLS
 
  476      DOUBLE PRECISION   ERR, ERRMAX
 
  477      INTEGER            I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
 
  478     $                   lbb, lcc, lda, ldas, ldb, ldbs, ldc, ldcs, m,
 
  479     $                   ma, mb, ms, n, na, nargs, nb, nc, ns
 
  480      LOGICAL            NULL, RESET, SAME, TRANA, TRANB
 
  481      CHARACTER*1        TRANAS, TRANBS, TRANSA, TRANSB
 
  496      COMMON             /infoc/infot, noutc, ok, lerr
 
  519            null = n.LE.0.OR.m.LE.0
 
  525                  transa = ich( ica: ica )
 
  526                  trana = transa.EQ.
'T'.OR.transa.EQ.
'C' 
  546                  CALL zmake( 
'ge', 
' ', 
' ', ma, na, a, nmax, aa, lda,
 
  550                     transb = ich( icb: icb )
 
  551                     tranb = transb.EQ.
'T'.OR.transb.EQ.
'C' 
  571                     CALL zmake( 
'ge', 
' ', 
' ', mb, nb, b, nmax, bb,
 
  582                           CALL zmake( 
'ge', 
' ', 
' ', m, n, c, nmax,
 
  583     $                                 cc, ldc, reset, zero )
 
  613     $                        
CALL zprcn1(ntra, nc, sname, iorder,
 
  614     $                        transa, transb, m, n, k, alpha, lda,
 
  618                           CALL czgemm( iorder, transa, transb, m, n,
 
  619     $                                 k, alpha, aa, lda, bb, ldb,
 
  625                              WRITE( nout, fmt = 9994 )
 
  632                           isame( 1 ) = transa.EQ.tranas
 
  633                           isame( 2 ) = transb.EQ.tranbs
 
  637                           isame( 6 ) = als.EQ.alpha
 
  638                           isame( 7 ) = lze( as, aa, laa )
 
  639                           isame( 8 ) = ldas.EQ.lda
 
  640                           isame( 9 ) = lze( bs, bb, lbb )
 
  641                           isame( 10 ) = ldbs.EQ.ldb
 
  642                           isame( 11 ) = bls.EQ.beta
 
  644                              isame( 12 ) = lze( cs, cc, lcc )
 
  646                             isame( 12 ) = lzeres( 
'ge', 
' ', m, n, cs,
 
  649                           isame( 13 ) = ldcs.EQ.ldc
 
  656                              same = same.AND.isame( i )
 
  657                              IF( .NOT.isame( i ) )
 
  658     $                           
WRITE( nout, fmt = 9998 )i
 
  669                             CALL zmmch( transa, transb, m, n, k,
 
  670     $                                   alpha, a, nmax, b, nmax, beta,
 
  671     $                                   c, nmax, ct, g, cc, ldc, eps,
 
  672     $                                   err, fatal, nout, .true. )
 
  673                              errmax = max( errmax, err )
 
  696      IF( errmax.LT.thresh )
THEN 
  697         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
  698         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
  700         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
  701         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
  706      WRITE( nout, fmt = 9996 )sname
 
  707      CALL zprcn1(nout, nc, sname, iorder, transa, transb,
 
  708     $           m, n, k, alpha, lda, ldb, beta, ldc)
 
  71310003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
  714     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
  715     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
  71610002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
  717     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
  718     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
  71910001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
  720     $ 
' (', i6, 
' CALL', 
'S)' )
 
  72110000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
  722     $ 
' (', i6, 
' CALL', 
'S)' )
 
  723 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
  724     $      
'ANGED INCORRECTLY *******' )
 
  725 9996 
FORMAT( 
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
  726 9995 
FORMAT( 1x, i6, 
': ', a13,
'(''', a1, 
''',''', a1, 
''',',
 
  727     $     3( i3, 
',' ), 
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3,
 
  728     $     
',(', f4.1, 
',', f4.1, 
'), C,', i3, 
').' )
 
  729 9994 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
  736      SUBROUTINE zprcn1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
 
  737     $                 K, ALPHA, LDA, LDB, BETA, LDC)
 
  738      INTEGER          NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
 
  739      DOUBLE COMPLEX   ALPHA, BETA
 
  740      CHARACTER*1      TRANSA, TRANSB
 
  742      CHARACTER*14     CRC, CTA,CTB
 
  744      IF (transa.EQ.
'N')
THEN 
  745         cta = 
'  CblasNoTrans' 
  746      ELSE IF (transa.EQ.
'T')
THEN 
  749         cta = 
'CblasConjTrans' 
  751      IF (transb.EQ.
'N')
THEN 
  752         ctb = 
'  CblasNoTrans' 
  753      ELSE IF (transb.EQ.
'T')
THEN 
  756         ctb = 
'CblasConjTrans' 
  759         crc = 
' CblasRowMajor' 
  761         crc = 
' CblasColMajor' 
  763      WRITE(nout, fmt = 9995)nc,sname,crc, cta,ctb
 
  764      WRITE(nout, fmt = 9994)m, n, k, alpha, lda, ldb, beta, ldc
 
  766 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', a14, 
',', a14, 
',', a14, 
',')
 
  767 9994 
FORMAT( 10x, 3( i3, 
',' ) ,
' (', f4.1,
',',f4.1,
') , A,',
 
  768     $ i3, 
', B,', i3, 
', (', f4.1,
',',f4.1,
') , C,', i3, 
').' )
 
 
  771      SUBROUTINE zchk2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
  772     $                  FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
 
  773     $                  A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
 
  788      PARAMETER          ( ZERO = ( 0.0d0, 0.0d0 ) )
 
  789      DOUBLE PRECISION   RZERO
 
  790      PARAMETER          ( RZERO = 0.0d0 )
 
  792      DOUBLE PRECISION   EPS, THRESH
 
  793      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 
  794      LOGICAL            FATAL, REWI, TRACE
 
  797      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 
  798     $                   AS( NMAX*NMAX ), B( NMAX, NMAX ),
 
  799     $                   bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
 
  800     $                   c( nmax, nmax ), cc( nmax*nmax ),
 
  801     $                   cs( nmax*nmax ), ct( nmax )
 
  802      DOUBLE PRECISION   G( NMAX )
 
  803      INTEGER            IDIM( NIDIM )
 
  805      COMPLEX*16         ALPHA, ALS, BETA, BLS
 
  806      DOUBLE PRECISION   ERR, ERRMAX
 
  807      INTEGER            I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
 
  808     $                   LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
 
  810      LOGICAL            CONJ, LEFT, NULL, RESET, SAME
 
  811      CHARACTER*1        SIDE, SIDES, UPLO, UPLOS
 
  812      CHARACTER*2        ICHS, ICHU
 
  826      COMMON             /infoc/infot, noutc, ok, lerr
 
  828      DATA               ichs/
'LR'/, ichu/
'UL'/
 
  830      conj = sname( 8: 9 ).EQ.
'he' 
  850            null = n.LE.0.OR.m.LE.0
 
  862            CALL zmake( 
'ge', 
' ', 
' ', m, n, b, nmax, bb, ldb, reset,
 
  866               side = ichs( ics: ics )
 
  884                  uplo = ichu( icu: icu )
 
  888                  CALL zmake(sname( 8: 9 ), uplo, 
' ', na, na, a, nmax,
 
  889     $                        aa, lda, reset, zero )
 
  899                        CALL zmake( 
'ge', 
' ', 
' ', m, n, c, nmax, cc,
 
  929     $                      
CALL zprcn2(ntra, nc, sname, iorder,
 
  930     $                      side, uplo, m, n, alpha, lda, ldb,
 
  935                           CALL czhemm( iorder, side, uplo, m, n,
 
  936     $                                 alpha, aa, lda, bb, ldb, beta,
 
  939                           CALL czsymm( iorder, side, uplo, m, n,
 
  940     $                                 alpha, aa, lda, bb, ldb, beta,
 
  947                           WRITE( nout, fmt = 9994 )
 
  954                        isame( 1 ) = sides.EQ.side
 
  955                        isame( 2 ) = uplos.EQ.uplo
 
  958                        isame( 5 ) = als.EQ.alpha
 
  959                        isame( 6 ) = lze( as, aa, laa )
 
  960                        isame( 7 ) = ldas.EQ.lda
 
  961                        isame( 8 ) = lze( bs, bb, lbb )
 
  962                        isame( 9 ) = ldbs.EQ.ldb
 
  963                        isame( 10 ) = bls.EQ.beta
 
  965                           isame( 11 ) = lze( cs, cc, lcc )
 
  967                           isame( 11 ) = lzeres( 
'ge', 
' ', m, n, cs,
 
  970                        isame( 12 ) = ldcs.EQ.ldc
 
  977                           same = same.AND.isame( i )
 
  978                           IF( .NOT.isame( i ) )
 
  979     $                        
WRITE( nout, fmt = 9998 )i
 
  991                              CALL zmmch( 
'N', 
'N', m, n, m, alpha, a,
 
  992     $                                    nmax, b, nmax, beta, c, nmax,
 
  993     $                                    ct, g, cc, ldc, eps, err,
 
  994     $                                    fatal, nout, .true. )
 
  996                              CALL zmmch( 
'N', 
'N', m, n, n, alpha, b,
 
  997     $                                    nmax, a, nmax, beta, c, nmax,
 
  998     $                                    ct, g, cc, ldc, eps, err,
 
  999     $                                    fatal, nout, .true. )
 
 1001                           errmax = max( errmax, err )
 
 1022      IF( errmax.LT.thresh )
THEN 
 1023         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
 1024         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
 1026         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
 1027         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
 1032      WRITE( nout, fmt = 9996 )sname
 
 1033      CALL zprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda,
 
 103910003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
 1040     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1041     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 104210002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
 1043     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1044     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 104510001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
 1046     $ 
' (', i6, 
' CALL', 
'S)' )
 
 104710000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
 1048     $ 
' (', i6, 
' CALL', 
'S)' )
 
 1049 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
 1050     $      
'ANGED INCORRECTLY *******' )
 
 1051 9996 
FORMAT( 
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
 1052 9995 
FORMAT(1x, i6, 
': ', a13,
'(', 2( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 1053     $      
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3, 
',(', f4.1,
 
 1054     $      
',', f4.1, 
'), C,', i3, 
')    .' )
 
 1055 9994 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
 1062      SUBROUTINE zprcn2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
 
 1063     $                 ALPHA, LDA, LDB, BETA, LDC)
 
 1064      INTEGER          NOUT, NC, IORDER, M, N, LDA, LDB, LDC
 
 1065      DOUBLE COMPLEX   ALPHA, BETA
 
 1066      CHARACTER*1      SIDE, UPLO
 
 1068      CHARACTER*14     CRC, CS,CU
 
 1070      IF (side.EQ.
'L')
THEN 
 1075      IF (uplo.EQ.
'U')
THEN 
 1080      IF (iorder.EQ.1)
THEN 
 1081         crc = 
' CblasRowMajor' 
 1083         crc = 
' CblasColMajor' 
 1085      WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
 
 1086      WRITE(nout, fmt = 9994)m, n, alpha, lda, ldb, beta, ldc
 
 1088 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', a14, 
',', a14, 
',', a14, 
',')
 
 1089 9994 
FORMAT( 10x, 2( i3, 
',' ),
' (',f4.1,
',',f4.1, 
'), A,', i3,
 
 1090     $ 
', B,', i3, 
', (',f4.1,
',',f4.1, 
'), ', 
'C,', i3, 
').' )
 
 
 1093      SUBROUTINE zchk3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
 1094     $                  FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
 
 1095     $                  B, BB, BS, CT, G, C, IORDER )
 
 1108      COMPLEX*16    ZERO, ONE
 
 1109      PARAMETER     ( ZERO = ( 0.0d0, 0.0d0 ), one = ( 1.0d0, 0.0d0 ) )
 
 1110      DOUBLE PRECISION  RZERO
 
 1111      PARAMETER     ( RZERO = 0.0d0 )
 
 1113      DOUBLE PRECISION   EPS, THRESH
 
 1114      INTEGER            NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
 
 1115      LOGICAL            FATAL, REWI, TRACE
 
 1118      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 
 1119     $                   as( nmax*nmax ), b( nmax, nmax ),
 
 1120     $                   bb( nmax*nmax ), bs( nmax*nmax ),
 
 1121     $                   c( nmax, nmax ), ct( nmax )
 
 1122      DOUBLE PRECISION   G( NMAX )
 
 1123      INTEGER            IDIM( NIDIM )
 
 1125      COMPLEX*16         ALPHA, ALS
 
 1126      DOUBLE PRECISION   ERR, ERRMAX
 
 1127      INTEGER           I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
 
 1128     $                   lda, ldas, ldb, ldbs, m, ms, n, na, nargs, nc,
 
 1130      LOGICAL            LEFT, NULL, RESET, SAME
 
 1131      CHARACTER*1       DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
 
 1133      CHARACTER*2        ICHD, ICHS, ICHU
 
 1139      EXTERNAL           LZE, LZERES
 
 1145      INTEGER            INFOT, NOUTC
 
 1148      COMMON             /infoc/infot, noutc, ok, lerr
 
 1150      DATA              ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
 
 1164      DO 140 im = 1, nidim
 
 1167         DO 130 in = 1, nidim
 
 1177            null = m.LE.0.OR.n.LE.0
 
 1180               side = ichs( ics: ics )
 
 1197                  uplo = ichu( icu: icu )
 
 1200                     transa = icht( ict: ict )
 
 1203                        diag = ichd( icd: icd )
 
 1210                           CALL zmake( 
'tr', uplo, diag, na, na, a,
 
 1211     $                                 nmax, aa, lda, reset, zero )
 
 1215                           CALL zmake( 
'ge', 
' ', 
' ', m, n, b, nmax,
 
 1216     $                                 bb, ldb, reset, zero )
 
 1241                           IF( sname( 10: 11 ).EQ.
'mm' )
THEN 
 1243     $                           
CALL zprcn3( ntra, nc, sname, iorder,
 
 1244     $                           side, uplo, transa, diag, m, n, alpha,
 
 1248                              CALL cztrmm(iorder, side, uplo, transa,
 
 1249     $                                    diag, m, n, alpha, aa, lda,
 
 1251                           ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN 
 1253     $                           
CALL zprcn3( ntra, nc, sname, iorder,
 
 1254     $                           side, uplo, transa, diag, m, n, alpha,
 
 1258                              CALL cztrsm(iorder, side, uplo, transa,
 
 1259     $                                   diag, m, n, alpha, aa, lda,
 
 1266                              WRITE( nout, fmt = 9994 )
 
 1273                           isame( 1 ) = sides.EQ.side
 
 1274                           isame( 2 ) = uplos.EQ.uplo
 
 1275                           isame( 3 ) = tranas.EQ.transa
 
 1276                           isame( 4 ) = diags.EQ.diag
 
 1277                           isame( 5 ) = ms.EQ.m
 
 1278                           isame( 6 ) = ns.EQ.n
 
 1279                           isame( 7 ) = als.EQ.alpha
 
 1280                           isame( 8 ) = lze( as, aa, laa )
 
 1281                           isame( 9 ) = ldas.EQ.lda
 
 1283                              isame( 10 ) = lze( bs, bb, lbb )
 
 1285                             isame( 10 ) = lzeres( 
'ge', 
' ', m, n, bs,
 
 1288                           isame( 11 ) = ldbs.EQ.ldb
 
 1295                              same = same.AND.isame( i )
 
 1296                              IF( .NOT.isame( i ) )
 
 1297     $                           
WRITE( nout, fmt = 9998 )i
 
 1305                              IF( sname( 10: 11 ).EQ.
'mm' )
THEN 
 1310                                   CALL zmmch( transa, 
'N', m, n, m,
 
 1311     $                                         alpha, a, nmax, b, nmax,
 
 1312     $                                         zero, c, nmax, ct, g,
 
 1313     $                                         bb, ldb, eps, err,
 
 1314     $                                         fatal, nout, .true. )
 
 1316                                   CALL zmmch( 
'N', transa, m, n, n,
 
 1317     $                                         alpha, b, nmax, a, nmax,
 
 1318     $                                         zero, c, nmax, ct, g,
 
 1319     $                                         bb, ldb, eps, err,
 
 1320     $                                         fatal, nout, .true. )
 
 1322                              ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN 
 1329                                       c( i, j ) = bb( i + ( j - 1 )*
 
 1331                                       bb( i + ( j - 1 )*ldb ) = alpha*
 
 1337                                    CALL zmmch( transa, 
'N', m, n, m,
 
 1338     $                                          one, a, nmax, c, nmax,
 
 1339     $                                          zero, b, nmax, ct, g,
 
 1340     $                                          bb, ldb, eps, err,
 
 1341     $                                          fatal, nout, .false. )
 
 1343                                    CALL zmmch( 
'N', transa, m, n, n,
 
 1344     $                                          one, c, nmax, a, nmax,
 
 1345     $                                          zero, b, nmax, ct, g,
 
 1346     $                                          bb, ldb, eps, err,
 
 1347     $                                          fatal, nout, .false. )
 
 1350                              errmax = max( errmax, err )
 
 1373      IF( errmax.LT.thresh )
THEN 
 1374         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
 1375         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
 1377         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
 1378         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
 1383      WRITE( nout, fmt = 9996 )sname
 
 1385     $   
CALL zprcn3( ntra, nc, sname, iorder, side, uplo, transa, diag,
 
 1386     $         m, n, alpha, lda, ldb)
 
 139110003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
 1392     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1393     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 139410002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
 1395     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1396     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 139710001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
 1398     $ 
' (', i6, 
' CALL', 
'S)' )
 
 139910000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
 1400     $ 
' (', i6, 
' CALL', 
'S)' )
 
 1401 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
 1402     $      
'ANGED INCORRECTLY *******' )
 
 1403 9996 
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
 1404 9995 
FORMAT(1x, i6, 
': ', a13,
'(', 4( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 1405     $     
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3, 
')         ',
 
 1407 9994 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
 1414      SUBROUTINE zprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
 
 1415     $                 DIAG, M, N, ALPHA, LDA, LDB)
 
 1416      INTEGER          NOUT, NC, IORDER, M, N, LDA, LDB
 
 1417      DOUBLE COMPLEX   ALPHA
 
 1418      CHARACTER*1      SIDE, UPLO, TRANSA, DIAG
 
 1420      CHARACTER*14     CRC, CS, CU, CA, CD
 
 1422      IF (SIDE.EQ.
'L')THEN
 
 1427      IF (uplo.EQ.
'U')
THEN 
 1432      IF (transa.EQ.
'N')
THEN 
 1433         ca =  
'  CblasNoTrans' 
 1434      ELSE IF (transa.EQ.
'T')
THEN 
 1437         ca =  
'CblasConjTrans' 
 1439      IF (diag.EQ.
'N')
THEN 
 1440         cd =  
'  CblasNonUnit' 
 1444      IF (iorder.EQ.1)
THEN 
 1445         crc = 
' CblasRowMajor' 
 1447         crc = 
' CblasColMajor' 
 1449      WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
 
 1450      WRITE(nout, fmt = 9994)ca, cd, m, n, alpha, lda, ldb
 
 1452 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', a14, 
',', a14, 
',', a14, 
',')
 
 1453 9994 
FORMAT( 10x, 2( a14, 
',') , 2( i3, 
',' ), 
' (', f4.1, 
',',
 
 1454     $    f4.1, 
'), A,', i3, 
', B,', i3, 
').' )
 
 
 1457      SUBROUTINE zchk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
 1458     $                  FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
 
 1459     $                  A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
 
 1474      PARAMETER          ( ZERO = ( 0.0d0, 0.0d0 ) )
 
 1475      DOUBLE PRECISION   RONE, RZERO
 
 1476      PARAMETER          ( RONE = 1.0d0, rzero = 0.0d0 )
 
 1478      DOUBLE PRECISION   EPS, THRESH
 
 1479      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 
 1480      LOGICAL            FATAL, REWI, TRACE
 
 1483      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 
 1484     $                   AS( NMAX*NMAX ), B( NMAX, NMAX ),
 
 1485     $                   BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
 
 1486     $                   C( NMAX, NMAX ), CC( NMAX*NMAX ),
 
 1487     $                   cs( nmax*nmax ), ct( nmax )
 
 1488      DOUBLE PRECISION   G( NMAX )
 
 1489      INTEGER            IDIM( NIDIM )
 
 1491      COMPLEX*16         ALPHA, ALS, BETA, BETS
 
 1492      DOUBLE PRECISION   ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
 
 1493      INTEGER            I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
 
 1494     $                   laa, lcc, lda, ldas, ldc, ldcs, lj, ma, n, na,
 
 1496      LOGICAL            CONJ, NULL, RESET, SAME, TRAN, UPPER
 
 1497      CHARACTER*1        TRANS, TRANSS, TRANST, UPLO, UPLOS
 
 1498      CHARACTER*2        ICHT, ICHU
 
 1503      EXTERNAL           lze, lzeres
 
 1507      INTRINSIC          dcmplx, max, dble
 
 1509      INTEGER            INFOT, NOUTC
 
 1512      COMMON             /infoc/infot, noutc, ok, lerr
 
 1514      DATA               icht/
'NC'/, ichu/
'UL'/
 
 1516      conj = sname( 8: 9 ).EQ.
'he' 
 1523      DO 100 in = 1, nidim
 
 1538               trans = icht( ict: ict )
 
 1540               IF( tran.AND..NOT.conj )
 
 1560               CALL zmake( 
'ge', 
' ', 
' ', ma, na, a, nmax, aa, lda,
 
 1564                  uplo = ichu( icu: icu )
 
 1570                        ralpha = dble( alpha )
 
 1571                        alpha = dcmplx( ralpha, rzero )
 
 1577                           rbeta = dble( beta )
 
 1578                           beta = dcmplx( rbeta, rzero )
 
 1582     $                     null = null.OR.( ( k.LE.0.OR.ralpha.EQ.
 
 1583     $                            rzero ).AND.rbeta.EQ.rone )
 
 1587                        CALL zmake( sname( 8: 9 ), uplo, 
' ', n, n, c,
 
 1588     $                              nmax, cc, ldc, reset, zero )
 
 1621     $                        
CALL zprcn6( ntra, nc, sname, iorder,
 
 1622     $                        uplo, trans, n, k, ralpha, lda, rbeta,
 
 1626                           CALL czherk( iorder, uplo, trans, n, k,
 
 1627     $                                 ralpha, aa, lda, rbeta, cc,
 
 1631     $                        
CALL zprcn4( ntra, nc, sname, iorder,
 
 1632     $                        uplo, trans, n, k, alpha, lda, beta, ldc)
 
 1635                           CALL czsyrk( iorder, uplo, trans, n, k,
 
 1636     $                                 alpha, aa, lda, beta, cc, ldc )
 
 1642                           WRITE( nout, fmt = 9992 )
 
 1649                        isame( 1 ) = uplos.EQ.uplo
 
 1650                        isame( 2 ) = transs.EQ.trans
 
 1651                        isame( 3 ) = ns.EQ.n
 
 1652                        isame( 4 ) = ks.EQ.k
 
 1654                           isame( 5 ) = rals.EQ.ralpha
 
 1656                           isame( 5 ) = als.EQ.alpha
 
 1658                        isame( 6 ) = lze( as, aa, laa )
 
 1659                        isame( 7 ) = ldas.EQ.lda
 
 1661                           isame( 8 ) = rbets.EQ.rbeta
 
 1663                           isame( 8 ) = bets.EQ.beta
 
 1666                           isame( 9 ) = lze( cs, cc, lcc )
 
 1668                           isame( 9 ) = lzeres( sname( 8: 9 ), uplo, n,
 
 1671                        isame( 10 ) = ldcs.EQ.ldc
 
 1678                           same = same.AND.isame( i )
 
 1679                           IF( .NOT.isame( i ) )
 
 1680     $                        
WRITE( nout, fmt = 9998 )i
 
 1706                                 CALL zmmch( transt, 
'N', lj, 1, k,
 
 1707     $                                       alpha, a( 1, jj ), nmax,
 
 1708     $                                       a( 1, j ), nmax, beta,
 
 1709     $                                       c( jj, j ), nmax, ct, g,
 
 1710     $                                       cc( jc ), ldc, eps, err,
 
 1711     $                                       fatal, nout, .true. )
 
 1713                                 CALL zmmch( 
'N', transt, lj, 1, k,
 
 1714     $                                       alpha, a( jj, 1 ), nmax,
 
 1715     $                                       a( j, 1 ), nmax, beta,
 
 1716     $                                       c( jj, j ), nmax, ct, g,
 
 1717     $                                       cc( jc ), ldc, eps, err,
 
 1718     $                                       fatal, nout, .true. )
 
 1725                              errmax = max( errmax, err )
 
 1747      IF( errmax.LT.thresh )
THEN 
 1748         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
 1749         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
 1751         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
 1752         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
 1758     $   
WRITE( nout, fmt = 9995 )j
 
 1761      WRITE( nout, fmt = 9996 )sname
 
 1763      CALL zprcn6( nout, nc, sname, iorder, uplo, trans, n, k, ralpha,
 
 1766      CALL zprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
 
 177310003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
 1774     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1775     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 177610002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
 1777     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 1778     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 177910001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
 1780     $ 
' (', i6, 
' CALL', 
'S)' )
 
 178110000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
 1782     $ 
' (', i6, 
' CALL', 
'S)' )
 
 1783 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
 1784     $      
'ANGED INCORRECTLY *******' )
 
 1785 9996 
FORMAT( 
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
 1786 9995 
FORMAT( 
'      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 
 1787 9994 
FORMAT(1x, i6, 
': ', a13,
'(', 2( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 1788     $     f4.1, 
', A,', i3, 
',', f4.1, 
', C,', i3, 
')               ',
 
 1790 9993 
FORMAT(1x, i6, 
': ', a13,
'(', 2( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 1791     $      
'(', f4.1, 
',', f4.1, 
') , A,', i3, 
',(', f4.1, 
',', f4.1,
 
 1792     $      
'), C,', i3, 
')          .' )
 
 1793 9992 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
 1800      SUBROUTINE zprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
 
 1801     $                 N, K, ALPHA, LDA, BETA, LDC)
 
 1802      INTEGER          NOUT, NC, IORDER, N, K, LDA, LDC
 
 1803      DOUBLE COMPLEX   ALPHA, BETA
 
 1804      CHARACTER*1      UPLO, TRANSA
 
 1806      CHARACTER*14     CRC, CU, CA
 
 1808      IF (uplo.EQ.
'U')
THEN 
 1813      IF (transa.EQ.
'N')
THEN 
 1814         ca =  
'  CblasNoTrans' 
 1815      ELSE IF (transa.EQ.
'T')
THEN 
 1818         ca =  
'CblasConjTrans' 
 1820      IF (iorder.EQ.1)
THEN 
 1821         crc = 
' CblasRowMajor' 
 1823         crc = 
' CblasColMajor' 
 1825      WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
 
 1826      WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
 
 1828 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', 3( a14, 
',') )
 
 1829 9994 
FORMAT( 10x, 2( i3, 
',' ), 
' (', f4.1, 
',', f4.1 ,
'), A,',
 
 1830     $        i3, 
', (', f4.1,
',', f4.1, 
'), C,', i3, 
').' )
 
 
 1834      SUBROUTINE zprcn6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
 
 1835     $                 N, K, ALPHA, LDA, BETA, LDC)
 
 1836      INTEGER          NOUT, NC, IORDER, N, K, LDA, LDC
 
 1837      DOUBLE PRECISION ALPHA, BETA
 
 1838      CHARACTER*1      UPLO, TRANSA
 
 1840      CHARACTER*14     CRC, CU, CA
 
 1842      IF (uplo.EQ.
'U')
THEN 
 1847      IF (transa.EQ.
'N')
THEN 
 1848         ca =  
'  CblasNoTrans' 
 1849      ELSE IF (transa.EQ.
'T')
THEN 
 1852         ca =  
'CblasConjTrans' 
 1854      IF (iorder.EQ.1)
THEN 
 1855         crc = 
' CblasRowMajor' 
 1857         crc = 
' CblasColMajor' 
 1859      WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
 
 1860      WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
 
 1862 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', 3( a14, 
',') )
 
 1863 9994 
FORMAT( 10x, 2( i3, 
',' ),
 
 1864     $      f4.1, 
', A,', i3, 
',', f4.1, 
', C,', i3, 
').' )
 
 
 1867      SUBROUTINE zchk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
 1868     $                  FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
 
 1869     $                  AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
 
 1883      COMPLEX*16    ZERO, ONE
 
 1884      parameter( zero = ( 0.0d0, 0.0d0 ), one = ( 1.0d0, 0.0d0 ) )
 
 1885      DOUBLE PRECISION RONE, RZERO
 
 1886      parameter( rone = 1.0d0, rzero = 0.0d0 )
 
 1888      DOUBLE PRECISION  EPS, THRESH
 
 1889      INTEGER           NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 
 1890      LOGICAL           FATAL, REWI, TRACE
 
 1893      COMPLEX*16         AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
 
 1894     $                   ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
 
 1895     $                   BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
 
 1896     $                   CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
 
 1898      DOUBLE PRECISION   G( NMAX )
 
 1899      INTEGER            IDIM( NIDIM )
 
 1901      COMPLEX*16         ALPHA, ALS, BETA, BETS
 
 1902      DOUBLE PRECISION   ERR, ERRMAX, RBETA, RBETS
 
 1903      INTEGER            I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
 
 1904     $                   k, ks, laa, lbb, lcc, lda, ldas, ldb, ldbs,
 
 1905     $                   ldc, ldcs, lj, ma, n, na, nargs, nc, ns
 
 1906      LOGICAL            CONJ, NULL, RESET, SAME, TRAN, UPPER
 
 1907      CHARACTER*1        TRANS, TRANSS, TRANST, UPLO, UPLOS
 
 1908      CHARACTER*2        ICHT, ICHU
 
 1913      EXTERNAL           LZE, LZERES
 
 1915      EXTERNAL           CZHER2K, ZMAKE, ZMMCH, CZSYR2K
 
 1917      INTRINSIC          dcmplx, dconjg, max, dble
 
 1919      INTEGER            INFOT, NOUTC
 
 1922      COMMON             /infoc/infot, noutc, ok, lerr
 
 1924      DATA               icht/
'NC'/, ichu/
'UL'/
 
 1926      conj = sname( 8: 9 ).EQ.
'he' 
 1933      DO 130 in = 1, nidim
 
 1944         DO 120 ik = 1, nidim
 
 1948               trans = icht( ict: ict )
 
 1950               IF( tran.AND..NOT.conj )
 
 1971                  CALL zmake( 
'ge', 
' ', 
' ', ma, na, ab, 2*nmax, aa,
 
 1972     $                        lda, reset, zero )
 
 1974                 CALL zmake( 
'ge', 
' ', 
' ', ma, na, ab, nmax, aa, lda,
 
 1983                  CALL zmake( 
'ge', 
' ', 
' ', ma, na, ab( k + 1 ),
 
 1984     $                        2*nmax, bb, ldb, reset, zero )
 
 1986                  CALL zmake( 
'ge', 
' ', 
' ', ma, na, ab( k*nmax + 1 ),
 
 1987     $                        nmax, bb, ldb, reset, zero )
 
 1991                  uplo = ichu( icu: icu )
 
 2000                           rbeta = dble( beta )
 
 2001                           beta = dcmplx( rbeta, rzero )
 
 2005     $                     null = null.OR.( ( k.LE.0.OR.alpha.EQ.
 
 2006     $                            zero ).AND.rbeta.EQ.rone )
 
 2010                        CALL zmake( sname( 8: 9 ), uplo, 
' ', n, n, c,
 
 2011     $                              nmax, cc, ldc, reset, zero )
 
 2044     $                        
CALL zprcn7( ntra, nc, sname, iorder,
 
 2045     $                        uplo, trans, n, k, alpha, lda, ldb,
 
 2049                           CALL czher2k( iorder, uplo, trans, n, k,
 
 2050     $                                  alpha, aa, lda, bb, ldb, rbeta,
 
 2054     $                        
CALL zprcn5( ntra, nc, sname, iorder,
 
 2055     $                        uplo, trans, n, k, alpha, lda, ldb,
 
 2059                           CALL czsyr2k( iorder, uplo, trans, n, k,
 
 2060     $                                  alpha, aa, lda, bb, ldb, beta,
 
 2067                           WRITE( nout, fmt = 9992 )
 
 2074                        isame( 1 ) = uplos.EQ.uplo
 
 2075                        isame( 2 ) = transs.EQ.trans
 
 2076                        isame( 3 ) = ns.EQ.n
 
 2077                        isame( 4 ) = ks.EQ.k
 
 2078                        isame( 5 ) = als.EQ.alpha
 
 2079                        isame( 6 ) = lze( as, aa, laa )
 
 2080                        isame( 7 ) = ldas.EQ.lda
 
 2081                        isame( 8 ) = lze( bs, bb, lbb )
 
 2082                        isame( 9 ) = ldbs.EQ.ldb
 
 2084                           isame( 10 ) = rbets.EQ.rbeta
 
 2086                           isame( 10 ) = bets.EQ.beta
 
 2089                           isame( 11 ) = lze( cs, cc, lcc )
 
 2091                           isame( 11 ) = lzeres( 
'he', uplo, n, n, cs,
 
 2094                        isame( 12 ) = ldcs.EQ.ldc
 
 2101                           same = same.AND.isame( i )
 
 2102                           IF( .NOT.isame( i ) )
 
 2103     $                        
WRITE( nout, fmt = 9998 )i
 
 2131                                    w( i ) = alpha*ab( ( j - 1 )*2*
 
 2134                                       w( k + i ) = dconjg( alpha )*
 
 2143                                 CALL zmmch( transt, 
'N', lj, 1, 2*k,
 
 2144     $                                      one, ab( jjab ), 2*nmax, w,
 
 2145     $                                       2*nmax, beta, c( jj, j ),
 
 2146     $                                      nmax, ct, g, cc( jc ), ldc,
 
 2147     $                                       eps, err, fatal, nout,
 
 2152                                       w( i ) = alpha*dconjg( ab( ( k +
 
 2153     $                                          i - 1 )*nmax + j ) )
 
 2154                                       w( k + i ) = dconjg( alpha*
 
 2155     $                                             ab( ( i - 1 )*nmax +
 
 2158                                      w( i ) = alpha*ab( ( k + i - 1 )*
 
 2161     $                                             ab( ( i - 1 )*nmax +
 
 2165                                 CALL zmmch( 
'N', 
'N', lj, 1, 2*k, one,
 
 2166     $                                       ab( jj ), nmax, w, 2*nmax,
 
 2167     $                                      beta, c( jj, j ), nmax, ct,
 
 2168     $                                      g, cc( jc ), ldc, eps, err,
 
 2169     $                                       fatal, nout, .true. )
 
 2176     $                              jjab = jjab + 2*nmax
 
 2178                              errmax = max( errmax, err )
 
 2200      IF( errmax.LT.thresh )
THEN 
 2201         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
 2202         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
 2204         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
 2205         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
 2211     $   
WRITE( nout, fmt = 9995 )j
 
 2214      WRITE( nout, fmt = 9996 )sname
 
 2216         CALL zprcn7( nout, nc, sname, iorder, uplo, trans, n, k,
 
 2217     $      alpha, lda, ldb, rbeta, ldc)
 
 2219         CALL zprcn5( nout, nc, sname, iorder, uplo, trans, n, k,
 
 2220     $      alpha, lda, ldb, beta, ldc)
 
 222610003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
 2227     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 2228     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 222910002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
 2230     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 2231     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 223210001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
 2233     $ 
' (', i6, 
' CALL', 
'S)' )
 
 223410000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
 2235     $ 
' (', i6, 
' CALL', 
'S)' )
 
 2236 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
 2237     $      
'ANGED INCORRECTLY *******' )
 
 2238 9996 
FORMAT( 
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
 2239 9995 
FORMAT( 
'      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 
 2240 9994 
FORMAT(1x, i6, 
': ', a13,
'(', 2( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 2241     $      
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3, 
',', f4.1,
 
 2242     $      
', C,', i3, 
')           .' )
 
 2243 9993 
FORMAT(1x, i6, 
': ', a13,
'(', 2( 
'''', a1, 
''',' ), 2( i3, 
',' ),
 
 2244     $      
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3, 
',(', f4.1,
 
 2245     $      
',', f4.1, 
'), C,', i3, 
')    .' )
 
 2246 9992 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
 2253      SUBROUTINE zprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
 
 2254     $                 N, K, ALPHA, LDA, LDB, BETA, LDC)
 
 2255      INTEGER          NOUT, NC, IORDER, N, K, LDA, LDB, LDC
 
 2256      DOUBLE COMPLEX   ALPHA, BETA
 
 2257      CHARACTER*1      UPLO, TRANSA
 
 2259      CHARACTER*14     CRC, CU, CA
 
 2261      IF (uplo.EQ.
'U')
THEN 
 2266      IF (transa.EQ.
'N')
THEN 
 2267         ca =  
'  CblasNoTrans' 
 2268      ELSE IF (transa.EQ.
'T')
THEN 
 2271         ca =  
'CblasConjTrans' 
 2273      IF (iorder.EQ.1)
THEN 
 2274         crc = 
' CblasRowMajor' 
 2276         crc = 
' CblasColMajor' 
 2278      WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
 
 2279      WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
 
 2281 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', 3( a14, 
',') )
 
 2282 9994 
FORMAT( 10x, 2( i3, 
',' ), 
' (', f4.1, 
',', f4.1, 
'), A,',
 
 2283     $  i3, 
', B', i3, 
', (', f4.1, 
',', f4.1, 
'), C,', i3, 
').' )
 
 
 2287      SUBROUTINE zprcn7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
 
 2288     $                 N, K, ALPHA, LDA, LDB, BETA, LDC)
 
 2289      INTEGER          NOUT, NC, IORDER, N, K, LDA, LDB, LDC
 
 2290      DOUBLE COMPLEX   ALPHA
 
 2291      DOUBLE PRECISION BETA
 
 2292      CHARACTER*1      UPLO, TRANSA
 
 2294      CHARACTER*14     CRC, CU, CA
 
 2296      IF (uplo.EQ.
'U')
THEN 
 2301      IF (transa.EQ.
'N')
THEN 
 2302         ca =  
'  CblasNoTrans' 
 2303      ELSE IF (transa.EQ.
'T')
THEN 
 2306         ca =  
'CblasConjTrans' 
 2308      IF (iorder.EQ.1)
THEN 
 2309         crc = 
' CblasRowMajor' 
 2311         crc = 
' CblasColMajor' 
 2313      WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
 
 2314      WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
 
 2316 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', 3( a14, 
',') )
 
 2317 9994 
FORMAT( 10x, 2( i3, 
',' ), 
' (', f4.1, 
',', f4.1, 
'), A,',
 
 2318     $      i3, 
', B', i3, 
',', f4.1, 
', C,', i3, 
').' )
 
 
 2321      SUBROUTINE zmake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
 
 2339      COMPLEX*16         ZERO, ONE
 
 2340      PARAMETER          ( ZERO = ( 0.0d0, 0.0d0 ),
 
 2341     $                   one = ( 1.0d0, 0.0d0 ) )
 
 2343      parameter( rogue = ( -1.0d10, 1.0d10 ) )
 
 2344      DOUBLE PRECISION   RZERO
 
 2345      PARAMETER          ( RZERO = 0.0d0 )
 
 2346      DOUBLE PRECISION   RROGUE
 
 2347      PARAMETER          ( RROGUE = -1.0d10 )
 
 2350      INTEGER            LDA, M, N, NMAX
 
 2352      CHARACTER*1        DIAG, UPLO
 
 2355      COMPLEX*16         A( NMAX, * ), AA( * )
 
 2357      INTEGER            I, IBEG, IEND, J, JJ
 
 2358      LOGICAL            GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
 
 2363      INTRINSIC          dcmplx, dconjg, dble
 
 2369      upper = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'U' 
 2370      lower = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'L' 
 2371      unit = tri.AND.diag.EQ.
'U' 
 2377            IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
 
 2379               a( i, j ) = zbeg( reset ) + transl
 
 2382                  IF( n.GT.3.AND.j.EQ.n/2 )
 
 2385                     a( j, i ) = dconjg( a( i, j ) )
 
 2387                     a( j, i ) = a( i, j )
 
 2395     $      a( j, j ) = dcmplx( dble( a( j, j ) ), rzero )
 
 2397     $      a( j, j ) = a( j, j ) + one
 
 2404      IF( type.EQ.
'ge' )
THEN 
 2407               aa( i + ( j - 1 )*lda ) = a( i, j )
 
 2409            DO 40 i = m + 1, lda
 
 2410               aa( i + ( j - 1 )*lda ) = rogue
 
 2413      ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy'.OR.type.EQ.
'tr' )
THEN 
 2430            DO 60 i = 1, ibeg - 1
 
 2431               aa( i + ( j - 1 )*lda ) = rogue
 
 2433            DO 70 i = ibeg, iend
 
 2434               aa( i + ( j - 1 )*lda ) = a( i, j )
 
 2436            DO 80 i = iend + 1, lda
 
 2437               aa( i + ( j - 1 )*lda ) = rogue
 
 2440               jj = j + ( j - 1 )*lda
 
 2441               aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
 
 
 2450      SUBROUTINE zmmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
 
 2451     $                  BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
 
 2466      parameter( zero = ( 0.0d0, 0.0d0 ) )
 
 2467      DOUBLE PRECISION   RZERO, RONE
 
 2468      parameter( rzero = 0.0d0, rone = 1.0d0 )
 
 2470      COMPLEX*16         ALPHA, BETA
 
 2471      DOUBLE PRECISION   EPS, ERR
 
 2472      INTEGER            KK, LDA, LDB, LDC, LDCC, M, N, NOUT
 
 2474      CHARACTER*1        TRANSA, TRANSB
 
 2476      COMPLEX*16         A( LDA, * ), B( LDB, * ), C( LDC, * ),
 
 2477     $                   CC( LDCC, * ), CT( * )
 
 2478      DOUBLE PRECISION   G( * )
 
 2481      DOUBLE PRECISION   ERRI
 
 2483      LOGICAL            CTRANA, CTRANB, TRANA, TRANB
 
 2485      INTRINSIC          ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
 
 2487      DOUBLE PRECISION   ABS1
 
 2489      abs1( cl ) = abs( dble( cl ) ) + abs( dimag( cl ) )
 
 2491      trana = transa.EQ.
'T'.OR.transa.EQ.
'C' 
 2492      tranb = transb.EQ.
'T'.OR.transb.EQ.
'C' 
 2493      ctrana = transa.EQ.
'C' 
 2494      ctranb = transb.EQ.
'C' 
 2506         IF( .NOT.trana.AND..NOT.tranb )
THEN 
 2509                  ct( i ) = ct( i ) + a( i, k )*b( k, j )
 
 2510                  g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
 
 2513         ELSE IF( trana.AND..NOT.tranb )
THEN 
 2517                     ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
 
 2518                     g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2525                     ct( i ) = ct( i ) + a( k, i )*b( k, j )
 
 2526                     g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2531         ELSE IF( .NOT.trana.AND.tranb )
THEN 
 2535                     ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
 
 2536                     g( i ) = g( i ) + abs1( a( i, k ) )*
 
 2543                     ct( i ) = ct( i ) + a( i, k )*b( j, k )
 
 2544                     g( i ) = g( i ) + abs1( a( i, k ) )*
 
 2549         ELSE IF( trana.AND.tranb )
THEN 
 2554                        ct( i ) = ct( i ) + dconjg( a( k, i ) )*
 
 2555     $                            dconjg( b( j, k ) )
 
 2556                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2563                        ct( i ) = ct( i ) + dconjg( a( k, i ) )*
 
 2565                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2574                        ct( i ) = ct( i ) + a( k, i )*
 
 2575     $                            dconjg( b( j, k ) )
 
 2576                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2583                        ct( i ) = ct( i ) + a( k, i )*b( j, k )
 
 2584                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 2592            ct( i ) = alpha*ct( i ) + beta*c( i, j )
 
 2593            g( i ) = abs1( alpha )*g( i ) +
 
 2594     $               abs1( beta )*abs1( c( i, j ) )
 
 2601            erri = abs1( ct( i ) - cc( i, j ) )/eps
 
 2602            IF( g( i ).NE.rzero )
 
 2603     $         erri = erri/g( i )
 
 2604            err = max( err, erri )
 
 2605            IF( err*sqrt( eps ).GE.rone )
 
 2617      WRITE( nout, fmt = 9999 )
 
 2620            WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
 
 2622            WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
 
 2626     $   
WRITE( nout, fmt = 9997 )j
 
 2631 9999 
FORMAT( 
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
 
 2632     $      
'F ACCURATE *******', /
'                       EXPECTED RE',
 
 2633     $      
'SULT                    COMPUTED RESULT' )
 
 2634 9998 
FORMAT( 1x, i7, 2( 
'  (', g15.6, 
',', g15.6, 
')' ) )
 
 2635 9997 
FORMAT( 
'      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 
 
 2640      LOGICAL FUNCTION lze( RI, RJ, LR )
 
 2655      COMPLEX*16         ri( * ), rj( * )
 
 2660         IF( ri( i ).NE.rj( i ) )
 
 
 2672      LOGICAL FUNCTION lzeres( TYPE, UPLO, M, N, AA, AS, LDA )
 
 2691      COMPLEX*16         aa( lda, * ), as( lda, * )
 
 2693      INTEGER            i, ibeg, iend, j
 
 2697      IF( type.EQ.
'ge' )
THEN 
 2699            DO 10 i = m + 1, lda
 
 2700               IF( aa( i, j ).NE.as( i, j ) )
 
 2704      ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy' )
THEN 
 2713            DO 30 i = 1, ibeg - 1
 
 2714               IF( aa( i, j ).NE.as( i, j ) )
 
 2717            DO 40 i = iend + 1, lda
 
 2718               IF( aa( i, j ).NE.as( i, j ) )
 
 
 2750      INTEGER            i, ic, j, mi, mj
 
 2752      SAVE               i, ic, j, mi, mj
 
 2776      i = i - 1000*( i/1000 )
 
 2777      j = j - 1000*( j/1000 )
 
 2782      zbeg = dcmplx( ( i - 500 )/1001.0d0, ( j - 500 )/1001.0d0 )
 
 
 2799      DOUBLE PRECISION   x, y
 
 
 2808      SUBROUTINE zchk6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
 
 2809     $                  FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
 
 2810     $                  A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
 
 2823      PARAMETER          ( ZERO = ( 0.0, 0.0 ) )
 
 2824      double precision   rzero
 
 2825      parameter( rzero = 0.0 )
 
 2827      DOUBLE PRECISION   EPS, THRESH
 
 2828      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 
 2829      LOGICAL            FATAL, REWI, TRACE
 
 2832      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 
 2833     $                   as( nmax*nmax ), b( nmax, nmax ),
 
 2834     $                   bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
 
 2835     $                   c( nmax, nmax ), cc( nmax*nmax ),
 
 2836     $                   cs( nmax*nmax ), ct( nmax )
 
 2837      DOUBLE PRECISION   G( NMAX )
 
 2838      INTEGER            IDIM( NIDIM )
 
 2840      COMPLEX*16         ALPHA, ALS, BETA, BLS
 
 2841      DOUBLE PRECISION   ERR, ERRMAX
 
 2842      INTEGER            I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
 
 2843     $                   LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
 
 2844     $                   MA, MB, N, NA, NARGS, NB, NC, NS, IS
 
 2845      LOGICAL            NULL, RESET, SAME, TRANA, TRANB
 
 2846      CHARACTER*1        TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
 
 2853      EXTERNAL           LZE, LZERES
 
 2859      INTEGER            INFOT, NOUTC
 
 2862      COMMON             /INFOC/INFOT, NOUTC, OK, LERR
 
 2873      DO 100 in = 1, nidim
 
 2889               transa = ich( ica: ica )
 
 2890               trana = transa.EQ.
'T'.OR.transa.EQ.
'C' 
 2910               CALL zmake( 
'ge', 
' ', 
' ', ma, na, a, nmax, aa, lda,
 
 2914                  transb = ich( icb: icb )
 
 2915                  tranb = transb.EQ.
'T'.OR.transb.EQ.
'C' 
 2935                  CALL zmake( 
'ge', 
' ', 
' ', mb, nb, b, nmax, bb,
 
 2936     $                        ldb, reset, zero )
 
 2944                           uplo = ishape(is:is)
 
 2948                           CALL zmake( 
'ge', uplo, 
' ', n, n, c, nmax,
 
 2949     $                                 cc, ldc, reset, zero )
 
 2979     $                        
CALL zprcn8(ntra, nc, sname, iorder, uplo,
 
 2980     $                        transa, transb, n, k, alpha, lda,
 
 2984                           CALL czgemmtr(iorder, uplo, transa, transb,
 
 2985     $                                 n, k, alpha, aa, lda, bb, ldb,
 
 2991                              WRITE( nout, fmt = 9994 )
 
 2998                           isame( 1 ) = uplo .EQ. uplos
 
 2999                           isame( 2 ) = transa.EQ.tranas
 
 3000                           isame( 3 ) = transb.EQ.tranbs
 
 3001                           isame( 4 ) = ns.EQ.n
 
 3002                           isame( 5 ) = ks.EQ.k
 
 3003                           isame( 6 ) = als.EQ.alpha
 
 3004                           isame( 7 ) = lze( as, aa, laa )
 
 3005                           isame( 8 ) = ldas.EQ.lda
 
 3006                           isame( 9 ) = lze( bs, bb, lbb )
 
 3007                           isame( 10 ) = ldbs.EQ.ldb
 
 3008                           isame( 11 ) = bls.EQ.beta
 
 3010                              isame( 12 ) = lze( cs, cc, lcc )
 
 3012                             isame( 12 ) = lzeres( 
'ge', 
' ', n, n, cs,
 
 3015                           isame( 13 ) = ldcs.EQ.ldc
 
 3022                              same = same.AND.isame( i )
 
 3023                              IF( .NOT.isame( i ) )
 
 3024     $                           
WRITE( nout, fmt = 9998 )i
 
 3035                              CALL zmmtch( uplo, transa, transb, n, k,
 
 3036     $                                   alpha, a, nmax, b, nmax, beta,
 
 3037     $                                   c, nmax, ct, g, cc, ldc, eps,
 
 3038     $                                   err, fatal, nout, .true. )
 
 3039                              errmax = max( errmax, err )
 
 3063      IF( errmax.LT.thresh )
THEN 
 3064         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10000 )sname, nc
 
 3065         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10001 )sname, nc
 
 3067         IF ( iorder.EQ.0) 
WRITE( nout, fmt = 10002 )sname, nc, errmax
 
 3068         IF ( iorder.EQ.1) 
WRITE( nout, fmt = 10003 )sname, nc, errmax
 
 3073      WRITE( nout, fmt = 9996 )sname
 
 3074      CALL zprcn8(nout, nc, sname, iorder, uplo, transa, transb,
 
 3075     $           n, k, alpha, lda, ldb, beta, ldc)
 
 308010003 
FORMAT( 
' ', a13,
' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 
 3081     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 3082     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 308310002 
FORMAT( 
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 
 3084     $ 
'TESTS (', i6, 
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
 
 3085     $ 
'RATIO ', f8.2, 
' - SUSPECT *******' )
 
 308610001 
FORMAT( 
' ', a13,
' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 
 3087     $ 
' (', i6, 
' CALL', 
'S)' )
 
 308810000 
FORMAT( 
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 
 3089     $ 
' (', i6, 
' CALL', 
'S)' )
 
 3090 9998 
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2, 
' WAS CH',
 
 3091     $      
'ANGED INCORRECTLY *******' )
 
 3092 9996 
FORMAT( 
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
 
 3093 9995 
FORMAT( 1x, i6, 
': ', a13,
'(''', a1, 
''',''', a1, 
''',',
 
 3094     $     3( i3, 
',' ), 
'(', f4.1, 
',', f4.1, 
'), A,', i3, 
', B,', i3,
 
 3095     $     
',(', f4.1, 
',', f4.1, 
'), C,', i3, 
').' )
 
 3096 9994 
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 
 
 3103      SUBROUTINE zprcn8(NOUT, NC, SNAME, IORDER, UPLO,
 
 3104     $                 TRANSA, TRANSB, N,
 
 3105     $                 K, ALPHA, LDA, LDB, BETA, LDC)
 
 3106      INTEGER          NOUT, NC, IORDER, N, K, LDA, LDB, LDC
 
 3107      COMPLEX*16       ALPHA, BETA
 
 3108      CHARACTER*1      TRANSA, TRANSB, UPLO
 
 3110      CHARACTER*14     CRC, CTA,CTB,CUPLO
 
 3112      IF (uplo.EQ.
'U') 
THEN 
 3113          cuplo = 
'CblasUpper' 
 3115          cuplo = 
'CblasLower' 
 3117      IF (transa.EQ.
'N')
THEN 
 3118         cta = 
'  CblasNoTrans' 
 3119      ELSE IF (transa.EQ.
'T')
THEN 
 3122         cta = 
'CblasConjTrans' 
 3124      IF (transb.EQ.
'N')
THEN 
 3125         ctb = 
'  CblasNoTrans' 
 3126      ELSE IF (transb.EQ.
'T')
THEN 
 3129         ctb = 
'CblasConjTrans' 
 3131      IF (iorder.EQ.1)
THEN 
 3132         crc = 
' CblasRowMajor' 
 3134         crc = 
' CblasColMajor' 
 3136      WRITE(nout, fmt = 9995)nc,sname,crc, cuplo, cta,ctb
 
 3137      WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
 
 3139 9995 
FORMAT( 1x, i6, 
': ', a13,
'(', a14, 
',', a14, 
',', a14, 
',',
 
 3141 9994 
FORMAT( 10x, 2( i3, 
',' ) ,
' (', f4.1,
',',f4.1,
') , A,',
 
 3142     $ i3, 
', B,', i3, 
', (', f4.1,
',',f4.1,
') , C,', i3, 
').' )
 
 
 3145      SUBROUTINE zmmtch(UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
 
 3147     $                  BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
 
 3160      parameter( zero = ( 0.0, 0.0 ) )
 
 3161      DOUBLE PRECISION   RZERO, RONE
 
 3162      parameter( rzero = 0.0, rone = 1.0 )
 
 3164      COMPLEX*16         ALPHA, BETA
 
 3165      DOUBLE PRECISION   EPS, ERR
 
 3166      INTEGER            KK, LDA, LDB, LDC, LDCC, N, NOUT
 
 3168      CHARACTER*1        TRANSA, TRANSB, UPLO
 
 3170      COMPLEX*16         A( LDA, * ), B( LDB, * ), C( LDC, * ),
 
 3171     $                   cc( ldcc, * ), ct( * )
 
 3172      DOUBLE PRECISION   G( * )
 
 3175      DOUBLE PRECISION   ERRI
 
 3176      INTEGER            I, J, K, ISTART, ISTOP
 
 3177      LOGICAL            CTRANA, CTRANB, TRANA, TRANB, UPPER
 
 3179      INTRINSIC          DABS, DIMAG, DCONJG, MAX, DBLE, DSQRT
 
 3181      DOUBLE PRECISION   ABS1
 
 3183      ABS1( CL ) = dabs( dble( cl ) ) + dabs( dimag( cl ) )
 
 3187      trana = transa.EQ.
'T'.OR.transa.EQ.
'C' 
 3188      tranb = transb.EQ.
'T'.OR.transb.EQ.
'C' 
 3189      ctrana = transa.EQ.
'C' 
 3190      ctranb = transb.EQ.
'C' 
 3208         DO 10 i = istart, istop
 
 3212         IF( .NOT.trana.AND..NOT.tranb )
THEN 
 3214               DO 20 i = istart, istop
 
 3215                  ct( i ) = ct( i ) + a( i, k )*b( k, j )
 
 3216                  g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
 
 3219         ELSE IF( trana.AND..NOT.tranb )
THEN 
 3222                  DO 40 i =  istart, istop
 
 3223                     ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
 
 3224                     g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3230                  DO 60 i = istart, istop
 
 3231                     ct( i ) = ct( i ) + a( k, i )*b( k, j )
 
 3232                     g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3237         ELSE IF( .NOT.trana.AND.tranb )
THEN 
 3240                  DO 80 i =  istart, istop
 
 3241                     ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
 
 3242                     g( i ) = g( i ) + abs1( a( i, k ) )*
 
 3248                  DO 100 i = istart, istop
 
 3249                     ct( i ) = ct( i ) + a( i, k )*b( j, k )
 
 3250                     g( i ) = g( i ) + abs1( a( i, k ) )*
 
 3255         ELSE IF( trana.AND.tranb )
THEN 
 3259                     DO 120 i = istart, istop
 
 3260                        ct( i ) = ct( i ) + dconjg( a( k, i ) )*
 
 3261     $                            dconjg( b( j, k ) )
 
 3262                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3268                     DO 140 i =  istart, istop
 
 3269                       ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( j, k )
 
 3270                       g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3278                     DO 160 i =  istart, istop
 
 3279                       ct( i ) = ct( i ) + a( k, i )*dconjg( b( j, k ) )
 
 3280                       g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3286                     DO 180 i =  istart, istop
 
 3287                        ct( i ) = ct( i ) + a( k, i )*b( j, k )
 
 3288                        g( i ) = g( i ) + abs1( a( k, i ) )*
 
 3295         DO 200 i =  istart, istop
 
 3296            ct( i ) = alpha*ct( i ) + beta*c( i, j )
 
 3297            g( i ) = abs1( alpha )*g( i ) +
 
 3298     $               abs1( beta )*abs1( c( i, j ) )
 
 3304         DO 210 i =  istart, istop
 
 3305            erri = abs1( ct( i ) - cc( i, j ) )/eps
 
 3306            IF( g( i ).NE.rzero )
 
 3307     $         erri = erri/g( i )
 
 3308            err = max( err, erri )
 
 3309            IF( err*dsqrt( eps ).GE.rone )
 
 3321      WRITE( nout, fmt = 9999 )
 
 3322      DO 240 i =  istart, istop
 
 3324            WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
 
 3326            WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
 
 3330     $   
WRITE( nout, fmt = 9997 )j
 
 3335 9999 
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
 
 3336     $     
'F ACCURATE *******', /
'                       EXPECTED RE',
 
 3337     $     
'SULT                    COMPUTED RESULT' )
 
 3338 9998 
FORMAT( 1x, i7, 2( 
'  (', g15.6, 
',', g15.6, 
')' ) )
 
 3339 9997 
FORMAT( 
'      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 
 
subroutine zprcn6(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
subroutine zprcn7(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn3(nout, nc, sname, iorder, side, uplo, transa, diag, m, n, alpha, lda, ldb)
subroutine zprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda, ldb, beta, ldc)
subroutine zprcn1(nout, nc, sname, iorder, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
double precision function ddiff(x, y)
logical function lze(ri, rj, lr)
subroutine zchk2(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, nalf, alf, nbet, bet, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g)
subroutine zchk1(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, nalf, alf, nbet, bet, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g)
logical function lzeres(type, uplo, m, n, aa, as, lda)
complex *16 function zbeg(reset)
subroutine zchk3(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, xt, g, z)
subroutine zmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine zchk6(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
subroutine zchk5(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
subroutine zchk4(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
subroutine zmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine zmmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)