1558
 1559
 1560
 1561
 1562
 1563
 1564
 1565
 1566
 1567
 1568      COMPLEX            ZERO, HALF, ONE
 1569      parameter( zero = ( 0.0, 0.0 ), half = ( 0.5, 0.0 ),
 1570     $                   one = ( 1.0, 0.0 ) )
 1571      REAL               RZERO
 1572      parameter( rzero = 0.0 )
 1573
 1574      REAL               EPS, THRESH
 1575      INTEGER            INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA,
 1576     $                   IORDER
 1577      LOGICAL            FATAL, REWI, TRACE
 1578      CHARACTER*12       SNAME
 1579
 1580      COMPLEX            A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 1581     $                   AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
 1582     $                   XX( NMAX*INCMAX ), Y( NMAX ),
 1583     $                   YS( NMAX*INCMAX ), YT( NMAX ),
 1584     $                   YY( NMAX*INCMAX ), Z( NMAX )
 1585      REAL               G( NMAX )
 1586      INTEGER            IDIM( NIDIM ), INC( NINC )
 1587
 1588      COMPLEX            ALPHA, ALS, TRANSL
 1589      REAL               ERR, ERRMAX
 1590      INTEGER            I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX,
 1591     $                  IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS,
 1592     $                   NC, ND, NS
 1593      LOGICAL            CONJ, NULL, RESET, SAME
 1594
 1595      COMPLEX            W( 1 )
 1596      LOGICAL            ISAME( 13 )
 1597
 1598      LOGICAL            LCE, LCERES
 1600
 1602
 1603      INTRINSIC          abs, conjg, max, min
 1604
 1605      INTEGER            INFOT, NOUTC
 1606      LOGICAL             OK
 1607
 1608      COMMON             /infoc/infot, noutc, ok
 1609
 1610      conj = sname( 11: 11 ).EQ.'c'
 1611
 1612      nargs = 9
 1613
 1614      nc = 0
 1615      reset = .true.
 1616      errmax = rzero
 1617
 1618      DO 120 in = 1, nidim
 1619         n = idim( in )
 1620         nd = n/2 + 1
 1621
 1622         DO 110 im = 1, 2
 1623            IF( im.EQ.1 )
 1624     $         m = max( n - nd, 0 )
 1625            IF( im.EQ.2 )
 1626     $         m = min( n + nd, nmax )
 1627
 1628
 1629            lda = m
 1630            IF( lda.LT.nmax )
 1631     $         lda = lda + 1
 1632
 1633            IF( lda.GT.nmax )
 1634     $         GO TO 110
 1635            laa = lda*n
 1636            null = n.LE.0.OR.m.LE.0
 1637
 1638            DO 100 ix = 1, ninc
 1639               incx = inc( ix )
 1640               lx = abs( incx )*m
 1641
 1642
 1643
 1644               transl = half
 1645               CALL cmake( 
'ge', 
' ', 
' ', 1, m, x, 1, xx, abs( incx ),
 
 1646     $                     0, m - 1, reset, transl )
 1647               IF( m.GT.1 )THEN
 1648                  x( m/2 ) = zero
 1649                  xx( 1 + abs( incx )*( m/2 - 1 ) ) = zero
 1650               END IF
 1651
 1652               DO 90 iy = 1, ninc
 1653                  incy = inc( iy )
 1654                  ly = abs( incy )*n
 1655
 1656
 1657
 1658                  transl = zero
 1659                  CALL cmake( 
'ge', 
' ', 
' ', 1, n, y, 1, yy,
 
 1660     $                        abs( incy ), 0, n - 1, reset, transl )
 1661                  IF( n.GT.1 )THEN
 1662                     y( n/2 ) = zero
 1663                     yy( 1 + abs( incy )*( n/2 - 1 ) ) = zero
 1664                  END IF
 1665
 1666                  DO 80 ia = 1, nalf
 1667                     alpha = alf( ia )
 1668
 1669
 1670
 1671                     transl = zero
 1672                     CALL cmake(sname( 8: 9 ), 
' ', 
' ', m, n, a, nmax,
 
 1673     $                           aa, lda, m - 1, n - 1, reset, transl )
 1674
 1675                     nc = nc + 1
 1676
 1677
 1678
 1679                     ms = m
 1680                     ns = n
 1681                     als = alpha
 1682                     DO 10 i = 1, laa
 1683                        as( i ) = aa( i )
 1684   10                CONTINUE
 1685                     ldas = lda
 1686                     DO 20 i = 1, lx
 1687                        xs( i ) = xx( i )
 1688   20                CONTINUE
 1689                     incxs = incx
 1690                     DO 30 i = 1, ly
 1691                        ys( i ) = yy( i )
 1692   30                CONTINUE
 1693                     incys = incy
 1694
 1695
 1696
 1697                     IF( trace )
 1698     $                  WRITE( ntra, fmt = 9994 )nc, sname, m, n,
 1699     $                  alpha, incx, incy, lda
 1700                     IF( conj )THEN
 1701                        IF( rewi )
 1702     $                     rewind ntra
 1703                        CALL ccgerc( iorder, m, n, alpha, xx, incx,
 1704     $                              yy, incy, aa, lda )
 1705                     ELSE
 1706                        IF( rewi )
 1707     $                     rewind ntra
 1708                        CALL ccgeru( iorder, m, n, alpha, xx, incx,
 1709     $                              yy, incy, aa, lda )
 1710                     END IF
 1711
 1712
 1713
 1714                     IF( .NOT.ok )THEN
 1715                        WRITE( nout, fmt = 9993 )
 1716                        fatal = .true.
 1717                        GO TO 140
 1718                     END IF
 1719
 1720
 1721
 1722                     isame( 1 ) = ms.EQ.m
 1723                     isame( 2 ) = ns.EQ.n
 1724                     isame( 3 ) = als.EQ.alpha
 1725                     isame( 4 ) = 
lce( xs, xx, lx )
 
 1726                     isame( 5 ) = incxs.EQ.incx
 1727                     isame( 6 ) = 
lce( ys, yy, ly )
 
 1728                     isame( 7 ) = incys.EQ.incy
 1729                     IF( null )THEN
 1730                        isame( 8 ) = 
lce( as, aa, laa )
 
 1731                     ELSE
 1732                        isame( 8 ) = 
lceres( 
'ge', 
' ', m, n, as, aa,
 
 1733     $                               lda )
 1734                     END IF
 1735                     isame( 9 ) = ldas.EQ.lda
 1736
 1737
 1738
 1739                     same = .true.
 1740                     DO 40 i = 1, nargs
 1741                        same = same.AND.isame( i )
 1742                        IF( .NOT.isame( i ) )
 1743     $                     WRITE( nout, fmt = 9998 )i
 1744   40                CONTINUE
 1745                     IF( .NOT.same )THEN
 1746                        fatal = .true.
 1747                        GO TO 140
 1748                     END IF
 1749
 1750                     IF( .NOT.null )THEN
 1751
 1752
 1753
 1754                        IF( incx.GT.0 )THEN
 1755                           DO 50 i = 1, m
 1756                              z( i ) = x( i )
 1757   50                      CONTINUE
 1758                        ELSE
 1759                           DO 60 i = 1, m
 1760                              z( i ) = x( m - i + 1 )
 1761   60                      CONTINUE
 1762                        END IF
 1763                        DO 70 j = 1, n
 1764                           IF( incy.GT.0 )THEN
 1765                              w( 1 ) = y( j )
 1766                           ELSE
 1767                              w( 1 ) = y( n - j + 1 )
 1768                           END IF
 1769                           IF( conj )
 1770     $                        w( 1 ) = conjg( w( 1 ) )
 1771                           CALL cmvch( 
'N', m, 1, alpha, z, nmax, w, 1,
 
 1772     $                                 one, a( 1, j ), 1, yt, g,
 1773     $                                 aa( 1 + ( j - 1 )*lda ), eps,
 1774     $                                 err, fatal, nout, .true. )
 1775                           errmax = max( errmax, err )
 1776
 1777                           IF( fatal )
 1778     $                        GO TO 130
 1779   70                   CONTINUE
 1780                     ELSE
 1781
 1782                        GO TO 110
 1783                     END IF
 1784
 1785   80             CONTINUE
 1786
 1787   90          CONTINUE
 1788
 1789  100       CONTINUE
 1790
 1791  110    CONTINUE
 1792
 1793  120 CONTINUE
 1794
 1795
 1796
 1797      IF( errmax.LT.thresh )THEN
 1798         WRITE( nout, fmt = 9999 )sname, nc
 1799      ELSE
 1800         WRITE( nout, fmt = 9997 )sname, nc, errmax
 1801      END IF
 1802      GO TO 150
 1803
 1804  130 CONTINUE
 1805      WRITE( nout, fmt = 9995 )j
 1806
 1807  140 CONTINUE
 1808      WRITE( nout, fmt = 9996 )sname
 1809      WRITE( nout, fmt = 9994 )nc, sname, m, n, alpha, incx, incy, lda
 1810
 1811  150 CONTINUE
 1812      RETURN
 1813
 1814 9999 FORMAT(' ',a12, ' PASSED THE COMPUTATIONAL TESTS (', i6, ' CALL',
 1815     $      'S)' )
 1816 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
 1817     $      'ANGED INCORRECTLY *******' )
 1818 9997 FORMAT(' ',a12, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
 1819     $      'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
 1820     $      ' - SUSPECT *******' )
 1821 9996 FORMAT( ' ******* ',a12, ' FAILED ON CALL NUMBER:' )
 1822 9995 FORMAT( '      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 1823 9994 FORMAT(1x, i6, ': ',a12, '(', 2( i3, ',' ), '(', f4.1, ',', f4.1,
 1824     $     '), X,', i2, ', Y,', i2, ', A,', i3, ') .' )
 1825 9993 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 1826     $      '******' )
 1827
 1828
 1829
subroutine cmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
logical function lceres(type, uplo, m, n, aa, as, lda)
subroutine cmvch(trans, m, n, alpha, a, nmax, x, incx, beta, y, incy, yt, g, yy, eps, err, fatal, nout, mv)
logical function lce(ri, rj, lr)