1746
 1747
 1748
 1749
 1750
 1751
 1752
 1753
 1754
 1755
 1756
 1757
 1758      DOUBLE PRECISION   ZERO
 1759      parameter( zero = 0.0d0 )
 1760
 1761      DOUBLE PRECISION   EPS, THRESH
 1762      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 1763      LOGICAL            FATAL, REWI, TRACE
 1764      CHARACTER*13       SNAME
 1765
 1766      DOUBLE PRECISION   AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
 1767     $                   ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
 1768     $                   BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
 1769     $                   CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
 1770     $                   G( NMAX ), W( 2*NMAX )
 1771      INTEGER            IDIM( NIDIM )
 1772
 1773      DOUBLE PRECISION   ALPHA, ALS, BETA, BETS, ERR, ERRMAX
 1774      INTEGER            I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
 1775     $                   K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
 1776     $                   LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
 1777      LOGICAL            NULL, RESET, SAME, TRAN, UPPER
 1778      CHARACTER*1        TRANS, TRANSS, UPLO, UPLOS
 1779      CHARACTER*2        ICHU
 1780      CHARACTER*3        ICHT
 1781
 1782      LOGICAL            ISAME( 13 )
 1783
 1784      LOGICAL            LDE, LDERES
 1786
 1788
 1789      INTRINSIC          max
 1790
 1791      INTEGER            INFOT, NOUTC
 1792      LOGICAL             OK
 1793
 1794      COMMON             /infoc/infot, noutc, ok
 1795
 1796      DATA               icht/'NTC'/, ichu/'UL'/
 1797
 1798
 1799      nargs = 12
 1800      nc = 0
 1801      reset = .true.
 1802      errmax = zero
 1803
 1804      DO 130 in = 1, nidim
 1805         n = idim( in )
 1806
 1807         ldc = n
 1808         IF( ldc.LT.nmax )
 1809     $      ldc = ldc + 1
 1810
 1811         IF( ldc.GT.nmax )
 1812     $      GO TO 130
 1813         lcc = ldc*n
 1814         null = n.LE.0
 1815
 1816         DO 120 ik = 1, nidim
 1817            k = idim( ik )
 1818
 1819            DO 110 ict = 1, 3
 1820               trans = icht( ict: ict )
 1821               tran = trans.EQ.'T'.OR.trans.EQ.'C'
 1822               IF( tran )THEN
 1823                  ma = k
 1824                  na = n
 1825               ELSE
 1826                  ma = n
 1827                  na = k
 1828               END IF
 1829
 1830               lda = ma
 1831               IF( lda.LT.nmax )
 1832     $            lda = lda + 1
 1833
 1834               IF( lda.GT.nmax )
 1835     $            GO TO 110
 1836               laa = lda*na
 1837
 1838
 1839
 1840               IF( tran )THEN
 1841                  CALL dmake( 
'GE', 
' ', 
' ', ma, na, ab, 2*nmax, aa,
 
 1842     $                        lda, reset, zero )
 1843               ELSE
 1844                  CALL dmake( 
'GE', 
' ', 
' ', ma, na, ab, nmax, aa, lda,
 
 1845     $                        reset, zero )
 1846               END IF
 1847
 1848
 1849
 1850               ldb = lda
 1851               lbb = laa
 1852               IF( tran )THEN
 1853                  CALL dmake( 
'GE', 
' ', 
' ', ma, na, ab( k + 1 ),
 
 1854     $                        2*nmax, bb, ldb, reset, zero )
 1855               ELSE
 1856                  CALL dmake( 
'GE', 
' ', 
' ', ma, na, ab( k*nmax + 1 ),
 
 1857     $                        nmax, bb, ldb, reset, zero )
 1858               END IF
 1859
 1860               DO 100 icu = 1, 2
 1861                  uplo = ichu( icu: icu )
 1862                  upper = uplo.EQ.'U'
 1863
 1864                  DO 90 ia = 1, nalf
 1865                     alpha = alf( ia )
 1866
 1867                     DO 80 ib = 1, nbet
 1868                        beta = bet( ib )
 1869
 1870
 1871
 1872                        CALL dmake( 
'SY', uplo, 
' ', n, n, c, nmax, cc,
 
 1873     $                              ldc, reset, zero )
 1874
 1875                        nc = nc + 1
 1876
 1877
 1878
 1879                        uplos = uplo
 1880                        transs = trans
 1881                        ns = n
 1882                        ks = k
 1883                        als = alpha
 1884                        DO 10 i = 1, laa
 1885                           as( i ) = aa( i )
 1886   10                   CONTINUE
 1887                        ldas = lda
 1888                        DO 20 i = 1, lbb
 1889                           bs( i ) = bb( i )
 1890   20                   CONTINUE
 1891                        ldbs = ldb
 1892                        bets = beta
 1893                        DO 30 i = 1, lcc
 1894                           cs( i ) = cc( i )
 1895   30                   CONTINUE
 1896                        ldcs = ldc
 1897
 1898
 1899
 1900                        IF( trace )
 1901     $                     
CALL dprcn5( ntra, nc, sname, iorder, uplo,
 
 1902     $                     trans, n, k, alpha, lda, ldb, beta, ldc)
 1903                        IF( rewi )
 1904     $                     rewind ntra
 1905                        CALL cdsyr2k( iorder, uplo, trans, n, k,
 1906     $                               alpha, aa, lda, bb, ldb, beta,
 1907     $                   cc, ldc )
 1908
 1909
 1910
 1911                        IF( .NOT.ok )THEN
 1912                           WRITE( nout, fmt = 9993 )
 1913                           fatal = .true.
 1914                           GO TO 150
 1915                        END IF
 1916
 1917
 1918
 1919                        isame( 1 ) = uplos.EQ.uplo
 1920                        isame( 2 ) = transs.EQ.trans
 1921                        isame( 3 ) = ns.EQ.n
 1922                        isame( 4 ) = ks.EQ.k
 1923                        isame( 5 ) = als.EQ.alpha
 1924                        isame( 6 ) = 
lde( as, aa, laa )
 
 1925                        isame( 7 ) = ldas.EQ.lda
 1926                        isame( 8 ) = 
lde( bs, bb, lbb )
 
 1927                        isame( 9 ) = ldbs.EQ.ldb
 1928                        isame( 10 ) = bets.EQ.beta
 1929                        IF( null )THEN
 1930                           isame( 11 ) = 
lde( cs, cc, lcc )
 
 1931                        ELSE
 1932                           isame( 11 ) = 
lderes( 
'SY', uplo, n, n, cs,
 
 1933     $                                   cc, ldc )
 1934                        END IF
 1935                        isame( 12 ) = ldcs.EQ.ldc
 1936
 1937
 1938
 1939
 1940                        same = .true.
 1941                        DO 40 i = 1, nargs
 1942                           same = same.AND.isame( i )
 1943                           IF( .NOT.isame( i ) )
 1944     $                        WRITE( nout, fmt = 9998 )i
 1945   40                   CONTINUE
 1946                        IF( .NOT.same )THEN
 1947                           fatal = .true.
 1948                           GO TO 150
 1949                        END IF
 1950
 1951                        IF( .NOT.null )THEN
 1952
 1953
 1954
 1955                           jjab = 1
 1956                           jc = 1
 1957                           DO 70 j = 1, n
 1958                              IF( upper )THEN
 1959                                 jj = 1
 1960                                 lj = j
 1961                              ELSE
 1962                                 jj = j
 1963                                 lj = n - j + 1
 1964                              END IF
 1965                              IF( tran )THEN
 1966                                 DO 50 i = 1, k
 1967                                    w( i ) = ab( ( j - 1 )*2*nmax + k +
 1968     $                                       i )
 1969                                    w( k + i ) = ab( ( j - 1 )*2*nmax +
 1970     $                                           i )
 1971   50                            CONTINUE
 1972                                 CALL dmmch( 
'T', 
'N', lj, 1, 2*k,
 
 1973     $                                       alpha, ab( jjab ), 2*nmax,
 1974     $                                       w, 2*nmax, beta,
 1975     $                                       c( jj, j ), nmax, ct, g,
 1976     $                                       cc( jc ), ldc, eps, err,
 1977     $                                       fatal, nout, .true. )
 1978                              ELSE
 1979                                 DO 60 i = 1, k
 1980                                    w( i ) = ab( ( k + i - 1 )*nmax +
 1981     $                                       j )
 1982                                    w( k + i ) = ab( ( i - 1 )*nmax +
 1983     $                                           j )
 1984   60                            CONTINUE
 1985                                 CALL dmmch( 
'N', 
'N', lj, 1, 2*k,
 
 1986     $                                       alpha, ab( jj ), nmax, w,
 1987     $                                       2*nmax, beta, c( jj, j ),
 1988     $                                       nmax, ct, g, cc( jc ), ldc,
 1989     $                                       eps, err, fatal, nout,
 1990     $                                       .true. )
 1991                              END IF
 1992                              IF( upper )THEN
 1993                                 jc = jc + ldc
 1994                              ELSE
 1995                                 jc = jc + ldc + 1
 1996                                 IF( tran )
 1997     $                              jjab = jjab + 2*nmax
 1998                              END IF
 1999                              errmax = max( errmax, err )
 2000
 2001
 2002                              IF( fatal )
 2003     $                           GO TO 140
 2004   70                      CONTINUE
 2005                        END IF
 2006
 2007   80                CONTINUE
 2008
 2009   90             CONTINUE
 2010
 2011  100          CONTINUE
 2012
 2013  110       CONTINUE
 2014
 2015  120    CONTINUE
 2016
 2017  130 CONTINUE
 2018
 2019
 2020
 2021      IF( errmax.LT.thresh )THEN
 2022         IF ( iorder.EQ.0) WRITE( nout, fmt = 10000 )sname, nc
 2023         IF ( iorder.EQ.1) WRITE( nout, fmt = 10001 )sname, nc
 2024      ELSE
 2025         IF ( iorder.EQ.0) WRITE( nout, fmt = 10002 )sname, nc, errmax
 2026         IF ( iorder.EQ.1) WRITE( nout, fmt = 10003 )sname, nc, errmax
 2027      END IF
 2028      GO TO 160
 2029
 2030  140 CONTINUE
 2031      IF( n.GT.1 )
 2032     $   WRITE( nout, fmt = 9995 )j
 2033
 2034  150 CONTINUE
 2035      WRITE( nout, fmt = 9996 )sname
 2036      CALL dprcn5( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
 
 2037     $   lda, ldb, beta, ldc)
 2038
 2039  160 CONTINUE
 2040      RETURN
 2041
 204210003 FORMAT( ' ', a13,' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 2043     $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
 2044     $ 'RATIO ', f8.2, ' - SUSPECT *******' )
 204510002 FORMAT( ' ', a13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 2046     $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
 2047     $ 'RATIO ', f8.2, ' - SUSPECT *******' )
 204810001 FORMAT( ' ', a13,' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 2049     $ ' (', i6, ' CALL', 'S)' )
 205010000 FORMAT( ' ', a13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 2051     $ ' (', i6, ' CALL', 'S)' )
 2052 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
 2053     $      'ANGED INCORRECTLY *******' )
 2054 9996 FORMAT( ' ******* ', a13,' FAILED ON CALL NUMBER:' )
 2055 9995 FORMAT( '      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 2056 9994 FORMAT( 1x, i6, ': ', a13,'(', 2( '''', a1, ''',' ), 2( i3, ',' ),
 2057     $      f4.1, ', A,', i3, ', B,', i3, ',', f4.1, ', C,', i3, ')   ',
 2058     $      ' .' )
 2059 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 2060     $      '******' )
 2061
 2062
 2063
subroutine dprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
logical function lde(ri, rj, lr)
logical function lderes(type, uplo, m, n, aa, as, lda)
subroutine dmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine dmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)