701
  702
  703
  704
  705
  706
  707
  708
  709
  710
  711
  712
  713      COMPLEX*16         ZERO
  714      parameter( zero = ( 0.0d0, 0.0d0 ) )
  715      DOUBLE PRECISION   RZERO
  716      parameter( rzero = 0.0d0 )
  717
  718      DOUBLE PRECISION   EPS, THRESH
  719      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA
  720      LOGICAL            FATAL, REWI, TRACE
  721      CHARACTER*7        SNAME
  722
  723      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
  724     $                   AS( NMAX*NMAX ), B( NMAX, NMAX ),
  725     $                   BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
  726     $                   C( NMAX, NMAX ), CC( NMAX*NMAX ),
  727     $                   CS( NMAX*NMAX ), CT( NMAX )
  728      DOUBLE PRECISION   G( NMAX )
  729      INTEGER            IDIM( NIDIM )
  730
  731      COMPLEX*16         ALPHA, ALS, BETA, BLS
  732      DOUBLE PRECISION   ERR, ERRMAX
  733      INTEGER            I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
  734     $                   LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
  735     $                   NARGS, NC, NS
  736      LOGICAL            CONJ, LEFT, NULL, RESET, SAME
  737      CHARACTER*1        SIDE, SIDES, UPLO, UPLOS
  738      CHARACTER*2        ICHS, ICHU
  739
  740      LOGICAL            ISAME( 13 )
  741
  742      LOGICAL            LZE, LZERES
  744
  746
  747      INTRINSIC          max
  748
  749      INTEGER            INFOT, NOUTC
  750      LOGICAL            LERR, OK
  751
  752      COMMON             /infoc/infot, noutc, ok, lerr
  753
  754      DATA               ichs/'LR'/, ichu/'UL'/
  755
  756      conj = sname( 2: 3 ).EQ.'HE'
  757
  758      nargs = 12
  759      nc = 0
  760      reset = .true.
  761      errmax = rzero
  762
  763      DO 100 im = 1, nidim
  764         m = idim( im )
  765
  766         DO 90 in = 1, nidim
  767            n = idim( in )
  768
  769            ldc = m
  770            IF( ldc.LT.nmax )
  771     $         ldc = ldc + 1
  772
  773            IF( ldc.GT.nmax )
  774     $         GO TO 90
  775            lcc = ldc*n
  776            null = n.LE.0.OR.m.LE.0
  777
  778            ldb = m
  779            IF( ldb.LT.nmax )
  780     $         ldb = ldb + 1
  781
  782            IF( ldb.GT.nmax )
  783     $         GO TO 90
  784            lbb = ldb*n
  785
  786
  787
  788            CALL zmake( 
'GE', 
' ', 
' ', m, n, b, nmax, bb, ldb, reset,
 
  789     $                  zero )
  790
  791            DO 80 ics = 1, 2
  792               side = ichs( ics: ics )
  793               left = side.EQ.'L'
  794
  795               IF( left )THEN
  796                  na = m
  797               ELSE
  798                  na = n
  799               END IF
  800
  801               lda = na
  802               IF( lda.LT.nmax )
  803     $            lda = lda + 1
  804
  805               IF( lda.GT.nmax )
  806     $            GO TO 80
  807               laa = lda*na
  808
  809               DO 70 icu = 1, 2
  810                  uplo = ichu( icu: icu )
  811
  812
  813
  814                  CALL zmake( sname( 2: 3 ), uplo, 
' ', na, na, a, nmax,
 
  815     $                        aa, lda, reset, zero )
  816
  817                  DO 60 ia = 1, nalf
  818                     alpha = alf( ia )
  819
  820                     DO 50 ib = 1, nbet
  821                        beta = bet( ib )
  822
  823
  824
  825                        CALL zmake( 
'GE', 
' ', 
' ', m, n, c, nmax, cc,
 
  826     $                              ldc, reset, zero )
  827
  828                        nc = nc + 1
  829
  830
  831
  832
  833                        sides = side
  834                        uplos = uplo
  835                        ms = m
  836                        ns = n
  837                        als = alpha
  838                        DO 10 i = 1, laa
  839                           as( i ) = aa( i )
  840   10                   CONTINUE
  841                        ldas = lda
  842                        DO 20 i = 1, lbb
  843                           bs( i ) = bb( i )
  844   20                   CONTINUE
  845                        ldbs = ldb
  846                        bls = beta
  847                        DO 30 i = 1, lcc
  848                           cs( i ) = cc( i )
  849   30                   CONTINUE
  850                        ldcs = ldc
  851
  852
  853
  854                        IF( trace )
  855     $                     WRITE( ntra, fmt = 9995 )nc, sname, side,
  856     $                     uplo, m, n, alpha, lda, ldb, beta, ldc
  857                        IF( rewi )
  858     $                     rewind ntra
  859                        IF( conj )THEN
  860                           CALL zhemm( side, uplo, m, n, alpha, aa, lda,
 
  861     $                                 bb, ldb, beta, cc, ldc )
  862                        ELSE
  863                           CALL zsymm( side, uplo, m, n, alpha, aa, lda,
 
  864     $                                 bb, ldb, beta, cc, ldc )
  865                        END IF
  866
  867
  868
  869                        IF( .NOT.ok )THEN
  870                           WRITE( nout, fmt = 9994 )
  871                           fatal = .true.
  872                           GO TO 110
  873                        END IF
  874
  875
  876
  877                        isame( 1 ) = sides.EQ.side
  878                        isame( 2 ) = uplos.EQ.uplo
  879                        isame( 3 ) = ms.EQ.m
  880                        isame( 4 ) = ns.EQ.n
  881                        isame( 5 ) = als.EQ.alpha
  882                        isame( 6 ) = 
lze( as, aa, laa )
 
  883                        isame( 7 ) = ldas.EQ.lda
  884                        isame( 8 ) = 
lze( bs, bb, lbb )
 
  885                        isame( 9 ) = ldbs.EQ.ldb
  886                        isame( 10 ) = bls.EQ.beta
  887                        IF( null )THEN
  888                           isame( 11 ) = 
lze( cs, cc, lcc )
 
  889                        ELSE
  890                           isame( 11 ) = 
lzeres( 
'GE', 
' ', m, n, cs,
 
  891     $                                   cc, ldc )
  892                        END IF
  893                        isame( 12 ) = ldcs.EQ.ldc
  894
  895
  896
  897
  898                        same = .true.
  899                        DO 40 i = 1, nargs
  900                           same = same.AND.isame( i )
  901                           IF( .NOT.isame( i ) )
  902     $                        WRITE( nout, fmt = 9998 )i
  903   40                   CONTINUE
  904                        IF( .NOT.same )THEN
  905                           fatal = .true.
  906                           GO TO 110
  907                        END IF
  908
  909                        IF( .NOT.null )THEN
  910
  911
  912
  913                           IF( left )THEN
  914                              CALL zmmch( 
'N', 
'N', m, n, m, alpha, a,
 
  915     $                                    nmax, b, nmax, beta, c, nmax,
  916     $                                    ct, g, cc, ldc, eps, err,
  917     $                                    fatal, nout, .true. )
  918                           ELSE
  919                              CALL zmmch( 
'N', 
'N', m, n, n, alpha, b,
 
  920     $                                    nmax, a, nmax, beta, c, nmax,
  921     $                                    ct, g, cc, ldc, eps, err,
  922     $                                    fatal, nout, .true. )
  923                           END IF
  924                           errmax = max( errmax, err )
  925
  926
  927                           IF( fatal )
  928     $                        GO TO 110
  929                        END IF
  930
  931   50                CONTINUE
  932
  933   60             CONTINUE
  934
  935   70          CONTINUE
  936
  937   80       CONTINUE
  938
  939   90    CONTINUE
  940
  941  100 CONTINUE
  942
  943
  944
  945      IF( errmax.LT.thresh )THEN
  946         WRITE( nout, fmt = 9999 )sname, nc
  947      ELSE
  948         WRITE( nout, fmt = 9997 )sname, nc, errmax
  949      END IF
  950      GO TO 120
  951
  952  110 CONTINUE
  953      WRITE( nout, fmt = 9996 )sname
  954      WRITE( nout, fmt = 9995 )nc, sname, side, uplo, m, n, alpha, lda,
  955     $   ldb, beta, ldc
  956
  957  120 CONTINUE
  958      RETURN
  959
  960 9999 FORMAT( ' ', a6, ' PASSED THE COMPUTATIONAL TESTS (', i6, ' CALL',
  961     $      'S)' )
  962 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
  963     $      'ANGED INCORRECTLY *******' )
  964 9997 FORMAT( ' ', a6, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
  965     $      'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
  966     $      ' - SUSPECT *******' )
  967 9996 FORMAT( ' ******* ', a6, ' FAILED ON CALL NUMBER:' )
  968 9995 FORMAT( 1x, i6, ': ', a6, '(', 2( '''', a1, ''',' ), 2( i3, ',' ),
  969     $      '(', f4.1, ',', f4.1, '), A,', i3, ', B,', i3, ',(', f4.1,
  970     $      ',', f4.1, '), C,', i3, ')    .' )
  971 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
  972     $      '******' )
  973
  974
  975
subroutine zhemm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
ZHEMM
subroutine zsymm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
ZSYMM
logical function lze(ri, rj, lr)
logical function lzeres(type, uplo, m, n, aa, as, lda)
subroutine zmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine zmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)