1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812 COMPLEX*16 ZERO, HALF, ONE
1813 parameter( zero = ( 0.0d0, 0.0d0 ),
1814 $ half = ( 0.5d0, 0.0d0 ),
1815 $ one = ( 1.0d0, 0.0d0 ) )
1816 DOUBLE PRECISION RZERO
1817 parameter( rzero = 0.0d0 )
1818
1819 DOUBLE PRECISION EPS, THRESH
1820 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1821 LOGICAL FATAL, REWI, TRACE
1822 CHARACTER*6 SNAME
1823
1824 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1825 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
1826 $ XX( NMAX*INCMAX ), Y( NMAX ),
1827 $ YS( NMAX*INCMAX ), YT( NMAX ),
1828 $ YY( NMAX*INCMAX ), Z( NMAX )
1829 DOUBLE PRECISION G( NMAX )
1830 INTEGER IDIM( NIDIM ), INC( NINC )
1831
1832 COMPLEX*16 ALPHA, TRANSL
1833 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS
1834 INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA,
1835 $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS
1836 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
1837 CHARACTER*1 UPLO, UPLOS
1838 CHARACTER*2 ICH
1839
1840 COMPLEX*16 W( 1 )
1841 LOGICAL ISAME( 13 )
1842
1843 LOGICAL LZE, LZERES
1845
1847
1848 INTRINSIC abs, dble, dcmplx, dconjg, max
1849
1850 INTEGER INFOT, NOUTC
1851 LOGICAL LERR, OK
1852
1853 COMMON /infoc/infot, noutc, ok, lerr
1854
1855 DATA ich/'UL'/
1856
1857 full = sname( 3: 3 ).EQ.'E'
1858 packed = sname( 3: 3 ).EQ.'P'
1859
1860 IF( full )THEN
1861 nargs = 7
1862 ELSE IF( packed )THEN
1863 nargs = 6
1864 END IF
1865
1866 nc = 0
1867 reset = .true.
1868 errmax = rzero
1869
1870 DO 100 in = 1, nidim
1871 n = idim( in )
1872
1873 lda = n
1874 IF( lda.LT.nmax )
1875 $ lda = lda + 1
1876
1877 IF( lda.GT.nmax )
1878 $ GO TO 100
1879 IF( packed )THEN
1880 laa = ( n*( n + 1 ) )/2
1881 ELSE
1882 laa = lda*n
1883 END IF
1884
1885 DO 90 ic = 1, 2
1886 uplo = ich( ic: ic )
1887 upper = uplo.EQ.'U'
1888
1889 DO 80 ix = 1, ninc
1890 incx = inc( ix )
1891 lx = abs( incx )*n
1892
1893
1894
1895 transl = half
1896 CALL zmake(
'GE',
' ',
' ', 1, n, x, 1, xx, abs( incx ),
1897 $ 0, n - 1, reset, transl )
1898 IF( n.GT.1 )THEN
1899 x( n/2 ) = zero
1900 xx( 1 + abs( incx )*( n/2 - 1 ) ) = zero
1901 END IF
1902
1903 DO 70 ia = 1, nalf
1904 ralpha = dble( alf( ia ) )
1905 alpha = dcmplx( ralpha, rzero )
1906 null = n.LE.0.OR.ralpha.EQ.rzero
1907
1908
1909
1910 transl = zero
1911 CALL zmake( sname( 2: 3 ), uplo,
' ', n, n, a, nmax,
1912 $ aa, lda, n - 1, n - 1, reset, transl )
1913
1914 nc = nc + 1
1915
1916
1917
1918 uplos = uplo
1919 ns = n
1920 rals = ralpha
1921 DO 10 i = 1, laa
1922 as( i ) = aa( i )
1923 10 CONTINUE
1924 ldas = lda
1925 DO 20 i = 1, lx
1926 xs( i ) = xx( i )
1927 20 CONTINUE
1928 incxs = incx
1929
1930
1931
1932 IF( full )THEN
1933 IF( trace )
1934 $ WRITE( ntra, fmt = 9993 )nc, sname, uplo, n,
1935 $ ralpha, incx, lda
1936 IF( rewi )
1937 $ rewind ntra
1938 CALL zher( uplo, n, ralpha, xx, incx, aa, lda )
1939 ELSE IF( packed )THEN
1940 IF( trace )
1941 $ WRITE( ntra, fmt = 9994 )nc, sname, uplo, n,
1942 $ ralpha, incx
1943 IF( rewi )
1944 $ rewind ntra
1945 CALL zhpr( uplo, n, ralpha, xx, incx, aa )
1946 END IF
1947
1948
1949
1950 IF( .NOT.ok )THEN
1951 WRITE( nout, fmt = 9992 )
1952 fatal = .true.
1953 GO TO 120
1954 END IF
1955
1956
1957
1958 isame( 1 ) = uplo.EQ.uplos
1959 isame( 2 ) = ns.EQ.n
1960 isame( 3 ) = rals.EQ.ralpha
1961 isame( 4 ) =
lze( xs, xx, lx )
1962 isame( 5 ) = incxs.EQ.incx
1963 IF( null )THEN
1964 isame( 6 ) =
lze( as, aa, laa )
1965 ELSE
1966 isame( 6 ) =
lzeres( sname( 2: 3 ), uplo, n, n, as,
1967 $ aa, lda )
1968 END IF
1969 IF( .NOT.packed )THEN
1970 isame( 7 ) = ldas.EQ.lda
1971 END IF
1972
1973
1974
1975 same = .true.
1976 DO 30 i = 1, nargs
1977 same = same.AND.isame( i )
1978 IF( .NOT.isame( i ) )
1979 $ WRITE( nout, fmt = 9998 )i
1980 30 CONTINUE
1981 IF( .NOT.same )THEN
1982 fatal = .true.
1983 GO TO 120
1984 END IF
1985
1986 IF( .NOT.null )THEN
1987
1988
1989
1990 IF( incx.GT.0 )THEN
1991 DO 40 i = 1, n
1992 z( i ) = x( i )
1993 40 CONTINUE
1994 ELSE
1995 DO 50 i = 1, n
1996 z( i ) = x( n - i + 1 )
1997 50 CONTINUE
1998 END IF
1999 ja = 1
2000 DO 60 j = 1, n
2001 w( 1 ) = dconjg( z( j ) )
2002 IF( upper )THEN
2003 jj = 1
2004 lj = j
2005 ELSE
2006 jj = j
2007 lj = n - j + 1
2008 END IF
2009 CALL zmvch(
'N', lj, 1, alpha, z( jj ), lj, w,
2010 $ 1, one, a( jj, j ), 1, yt, g,
2011 $ aa( ja ), eps, err, fatal, nout,
2012 $ .true. )
2013 IF( full )THEN
2014 IF( upper )THEN
2015 ja = ja + lda
2016 ELSE
2017 ja = ja + lda + 1
2018 END IF
2019 ELSE
2020 ja = ja + lj
2021 END IF
2022 errmax = max( errmax, err )
2023
2024 IF( fatal )
2025 $ GO TO 110
2026 60 CONTINUE
2027 ELSE
2028
2029 IF( n.LE.0 )
2030 $ GO TO 100
2031 END IF
2032
2033 70 CONTINUE
2034
2035 80 CONTINUE
2036
2037 90 CONTINUE
2038
2039 100 CONTINUE
2040
2041
2042
2043 IF( errmax.LT.thresh )THEN
2044 WRITE( nout, fmt = 9999 )sname, nc
2045 ELSE
2046 WRITE( nout, fmt = 9997 )sname, nc, errmax
2047 END IF
2048 GO TO 130
2049
2050 110 CONTINUE
2051 WRITE( nout, fmt = 9995 )j
2052
2053 120 CONTINUE
2054 WRITE( nout, fmt = 9996 )sname
2055 IF( full )THEN
2056 WRITE( nout, fmt = 9993 )nc, sname, uplo, n, ralpha, incx, lda
2057 ELSE IF( packed )THEN
2058 WRITE( nout, fmt = 9994 )nc, sname, uplo, n, ralpha, incx
2059 END IF
2060
2061 130 CONTINUE
2062 RETURN
2063
2064 9999 FORMAT( ' ', a6, ' PASSED THE COMPUTATIONAL TESTS (', i6, ' CALL',
2065 $ 'S)' )
2066 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
2067 $ 'ANGED INCORRECTLY *******' )
2068 9997 FORMAT( ' ', a6, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
2069 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2070 $ ' - SUSPECT *******' )
2071 9996 FORMAT( ' ******* ', a6, ' FAILED ON CALL NUMBER:' )
2072 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2073 9994 FORMAT( 1x, i6, ': ', a6, '(''', a1, ''',', i3, ',', f4.1, ', X,',
2074 $ i2, ', AP) .' )
2075 9993 FORMAT( 1x, i6, ': ', a6, '(''', a1, ''',', i3, ',', f4.1, ', X,',
2076 $ i2, ', A,', i3, ') .' )
2077 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2078 $ '******' )
2079
2080
2081
subroutine zher(uplo, n, alpha, x, incx, a, lda)
ZHER
subroutine zhpr(uplo, n, alpha, x, incx, ap)
ZHPR
logical function lze(ri, rj, lr)
logical function lzeres(type, uplo, m, n, aa, as, lda)
subroutine zmvch(trans, m, n, alpha, a, nmax, x, incx, beta, y, incy, yt, g, yy, eps, err, fatal, nout, mv)
subroutine zmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)