1405 $ TRNAVAL, TRNBVAL, UPLOVAL, MVAL,
1406 $ NVAL, KVAL, MAVAL, NAVAL, IMBAVAL,
1407 $ MBAVAL, INBAVAL, NBAVAL, RSCAVAL,
1408 $ CSCAVAL, IAVAL, JAVAL, MBVAL, NBVAL,
1409 $ IMBBVAL, MBBVAL, INBBVAL, NBBVAL,
1410 $ RSCBVAL, CSCBVAL, IBVAL, JBVAL,
1411 $ MCVAL, NCVAL, IMBCVAL, MBCVAL,
1412 $ INBCVAL, NBCVAL, RSCCVAL, CSCCVAL,
1413 $ ICVAL, JCVAL, LDVAL, NGRIDS, PVAL,
1414 $ LDPVAL, QVAL, LDQVAL, NBLOG, LTEST, SOF,
1415 $ TEE, IAM, IGAP, IVERB, NPROCS, THRESH,
1416 $ ALPHA, BETA, WORK )
1425 INTEGER IAM, IGAP, IVERB, LDPVAL, LDQVAL, LDVAL, NBLOG,
1426 $ NGRIDS, NMAT, NOUT, NPROCS
1428 COMPLEX*16 ALPHA, BETA
1431 CHARACTER*( * ) SUMMRY
1432 CHARACTER*1 DIAGVAL( LDVAL ), SIDEVAL( LDVAL ),
1433 $ TRNAVAL( LDVAL ), TRNBVAL( LDVAL ),
1436INTEGER CSCAVAL( LDVAL ), ( LDVAL ),
1437 $ csccval( ldval ), iaval( ldval ),
1438 $ ibval( ldval ), icval( ldval ),
1439 $ imbaval( ldval ), imbbval( ldval ),
1440 $ imbcval( ldval ), inbaval( ldval ),
1441 $ inbbval( ldval ), inbcval( ldval ),
1442 $ javal( ldval ), jbval( ldval ), jcval( ldval ),
1443 $ kval( ldval ), maval( ldval ), mbaval( ldval ),
1444 $ mbbval( ldval ), mbcval( ldval ),
1445 $ mbval( ldval ), mcval( ldval ), mval( ldval ),
1446 $ naval( ldval ), nbaval( ldval ),
1447 $ nbbval( ldval ), nbcval( ldval ),
1448 $ nbval( ldval ), ncval( ldval ), nval( ldval ),
1449 $ pval( ldpval ), qval( ldqval ),
1450 $ rscaval( ldval ), rscbval( ldval ),
1451 $ rsccval( ldval ), work( * )
1743 PARAMETER ( NIN = 11, nsubs = 11 )
1748 DOUBLE PRECISION EPS
1752 CHARACTER*79 USRINFO
1760 DOUBLE PRECISION PDLAMCH
1764 INTRINSIC char, ichar,
max,
min
1767 CHARACTER*7 SNAMES( NSUBS )
1768 COMMON /SNAMEC/SNAMES
1779 OPEN'PZBLAS3TST.dat', status=
'OLD' )
1780 READ( nin, fmt = * ) summry
1785 READ( nin, fmt = 9999 ) usrinfo
1789 READ( nin, fmt = * ) summry
1790 READ( nin, fmt = * ) nout
1791 IF( nout.NE.0 .AND. nout.NE.6 )
1792 $
OPEN( nout, file = summry, status =
'UNKNOWN' )
1798 READ( nin, fmt = * ) sof
1802 READ( nin, fmt = * ) tee
1806 READ( nin, fmt = * ) iverb
1807 IF( iverb.LT.0 .OR. iverb.GT.3 )
1818 READ( nin, fmt = * ) thresh
1824 READ( nin, fmt = * ) nblog
1830 READ( nin, fmt = * ) ngrids
1831 IF( ngrids.LT.1 .OR. ngrids.GT.ldpval )
THEN
1832 WRITE( nout, fmt = 9998 )
'Grids', ldpval
1834 ELSE IF( ngrids.GT.ldqval )
THEN
1835 WRITE( nout, fmt = 9998 )
'Grids', ldqval
1841 READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
1842 READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
1846 READ( nin, fmt = * ) alpha
1847 READ( nin, fmt = * ) beta
1851 READ( nin, fmt = * ) nmat
1852 IF( nmat.LT.1 .OR. nmat.GT.ldval )
THEN
1853 WRITE( nout, fmt = 9998 )
'Tests', ldval
1859 READ( nin, fmt = * ) ( diagval( i ), i = 1, nmat )
1860 READ( nin, fmt = * ) ( sideval( i ), i = 1, nmat )
1861 READ( nin, fmt = * ) ( trnaval( i ), i = 1, nmat )
1862 READ( nin, fmt = * ) ( trnbval( i ), i = 1, nmat )
1863 READ( nin, fmt = * ) ( uploval( i ), i = 1, nmat )
1864 READ( nin, fmt = * ) ( mval( i ), i = 1, nmat )
1865 READ( nin, fmt = * ) ( nval( i ), i = 1, nmat )
1866 READ( nin, fmt = * ) ( kval( i ), i = 1, nmat )
1867 READ( nin, fmt = * ) ( maval
1868 READ( nin, fmt = * ) ( naval( i ), i = 1, nmat )
1869 READ( nin, fmt = * ) ( imbaval( i ), i = 1, nmat )
1870 READ( nin, fmt = * ) ( inbaval( i ), i = 1, nmat )
1871 READ( nin, fmt = * ) ( mbaval( i ), i = 1, nmat )
1872 READ( nin, fmt = * ) ( nbaval( i ), i = 1, nmat )
1873 READ( nin, fmt = * ) ( rscaval( i ), i = 1, nmat )
1874 READ( nin, fmt = * ) ( cscaval( i ), i = 1, nmat )
1875 READ( nin, fmt = * ) ( iaval( i ), i = 1, nmat )
1876 READ( nin, fmt = * ) ( javal( i ), i = 1, nmat )
1877 READ( nin, fmt = * ) ( mbval( i ), i = 1, nmat )
1878 READ( nin, fmt = * ) ( nbval( i ), i = 1, nmat )
1879 READ( nin, fmt = * ) ( imbbval( i ), i = 1, nmat )
1880 READ( nin, fmt = * ) ( inbbval( i ), i = 1, nmat )
1881 READ( nin, fmt = * ) ( mbbval( i ), i = 1, nmat )
1882 READ( nin, fmt = * ) ( nbbval( i ), i = 1, nmat )
1883 READ( nin, fmt = * ) ( rscbval( i ), i = 1, nmat )
1885 READ( nin, fmt = * ) ( ibval( i ), i = 1, nmat )
1886 READ( nin, fmt = * ) ( jbval( i ), i = 1, nmat )
1887 READ( nin, fmt = * ) ( mcval( i ), i = 1, nmat )
1888 READ( nin, fmt = * ) ( ncval( i ), i = 1, nmat )
1889 READ( nin, fmt = * ) ( imbcval( i ), i = 1, nmat )
1890 READ( nin, fmt = * ) ( inbcval( i ), i = 1, nmat )
1891 READ( nin, fmt = * ) ( mbcval( i ), i = 1, nmat )
1892 READ( nin, fmt = * ) ( nbcval( i ), i = 1, nmat )
1893 READ( nin, fmt = * ) ( rsccval( i ), i = 1, nmat )
1894 READ( nin, fmt = * ) ( csccval( i ), i = 1, nmat )
1895 READ( nin, fmt = * ) ( icval( i ), i = 1, nmat )
1896 READ( nin, fmt = * ) ( jcval( i ), i = 1, nmat )
1902 ltest( i ) = .false.
1905 READ( nin, fmt = 9996,
END = 50 ) SNAMET, ltestt
1907 IF( snamet.EQ.snames( i ) )
1911 WRITE( nout, fmt = 9995 )snamet
1927 IF( nprocs.LT.1 )
THEN
1930 nprocs =
max( nprocs, pval( i )*qval( i ) )
1932 CALL blacs_setup( iam, nprocs )
1938 CALL blacs_get( -1, 0, ictxt )
1947 CALL sgebs2d( ictxt,
'All',
' ', 1, 1, thresh, 1 )
1949 CALL zgebs2d( ictxt,
'All',
' ',
1954 CALL igebs2d( ictxt,
'All',
' ', 3, 1, work, 3 )
1974 work( i ) = ichar( diagval( j ) )
1975 work( i+1 ) = ichar( sideval( j ) )
1976 work( i+2 ) = ichar( trnaval( j ) )
1977 work( i+3 ) = ichar( trnbval( j ) )
1978 work( i+4 ) = ichar( uploval( j ) )
1981 CALL icopy( ngrids, pval, 1, work( i ), 1 )
1983 CALL icopy( ngrids, qval, 1, work( i ), 1 )
1985 CALL icopy( nmat, mval, 1, work( i ), 1 )
1987 CALL icopy( nmat, nval, 1, work( i ), 1 )
1989 CALL icopy( nmat, kval, 1, work( i ), 1 )
1991 CALL icopy( nmat, maval, 1, work( i ), 1 )
1993 CALL icopy( nmat, naval, 1, work( i ), 1 )
1995 CALL icopy( nmat, imbaval, 1, work( i ), 1 )
1997 CALL icopy( nmat, inbaval, 1, work( i ), 1 )
1999 CALL icopy( nmat, mbaval, 1, work( i ), 1 )
2001 CALL icopy( nmat, nbaval, 1, work( i ), 1 )
2003 CALL icopy( nmat, rscaval, 1, work( i ), 1 )
2005 CALL icopy( nmat, cscaval, 1, work( i ), 1 )
2007 CALL icopy( nmat, iaval, 1, work( i ), 1 )
2009 CALL icopy( nmat, javal, 1, work( i ), 1 )
2011 CALL icopy( nmat, mbval, 1, work( i ), 1 )
2013 CALL icopy( nmat, nbval, 1, work( i ), 1 )
2015 CALL icopy( nmat, imbbval, 1, work( i ), 1 )
2017 CALL icopy( nmat, inbbval
2019 CALL icopy( nmat, mbbval, 1, work( i ), 1 )
2021 CALL icopy( nmat, nbbval, 1, work( i ), 1 )
2023 CALL icopy( nmat, rscbval, 1, work( i ), 1 )
2025 CALL icopy( nmat, cscbval, 1, work( i ), 1 )
2027 CALL icopy( nmat, ibval, 1, work( i ), 1 )
2029 CALL icopy( nmat, jbval, 1, work( i ), 1 )
2031 CALL icopy( nmat, mcval, 1, work( i ), 1 )
2033 CALL icopy( nmat, ncval, 1, work( i ), 1 )
2035 CALL icopy( nmat, imbcval, 1, work( i ), 1 )
2037 CALL icopy( nmat, inbcval, 1, work( i ), 1 )
2039 CALL icopy( nmat, mbcval, 1, work( i ), 1 )
2041 CALL icopy( nmat, nbcval, 1, work( i ), 1 )
2043 CALL icopy( nmat, rsccval, 1, work( i ), 1 )
2045 CALL icopy( nmat, csccval, 1, work( i ), 1 )
2047 CALL icopy( nmat, icval, 1, work( i ), 1 )
2049 CALL icopy( nmat, jcval, 1, work( i ), 1 )
2053 IF( ltest( j ) )
THEN
2061 CALL igebs2d( ictxt,
'All',
' ', i, 1, work, i )
2065 WRITE( nout, fmt = 9999 )
'Level 3 PBLAS testing program.'
2066 WRITE( nout, fmt = 9999 ) usrinfo
2067 WRITE( nout, fmt = * )
2068 WRITE( nout, fmt = 9999 )
2069 $
'Tests of the complex double precision '//
2071 WRITE( nout, fmt = * )
2072 WRITE( nout, fmt = 9993 ) nmat
2073 WRITE( nout, fmt = 9979 ) nblog
2074 WRITE( nout, fmt = 9992 ) ngrids
2075 WRITE( nout, fmt = 9990 )
2076 $
'P', ( pval(i), i = 1,
min(ngrids, 5) )
2078 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
2079 $
min( 10, ngrids ) )
2081 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
2082 $
min( 15, ngrids ) )
2084 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
2085 WRITE( nout, fmt = 9990 )
2086 $
'Q', ( qval(i), i = 1,
min(ngrids, 5) )
2088 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
2089 $
min( 10, ngrids ) )
2091 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
2092 $
min( 15, ngrids ) )
2094 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 16, ngrids )
2095 WRITE( nout, fmt = 9988 ) sof
2096 WRITE( nout, fmt = 9987 ) tee
2097 WRITE( nout, fmt = 9983 ) igap
2098 WRITE( nout, fmt = 9986 ) iverb
2099 WRITE( nout, fmt = 9980 ) thresh
2100 WRITE( nout, fmt = 9982 )
alpha
2101 WRITE( nout, fmt = 9981 ) beta
2102 IF( ltest( 1 ) )
THEN
2103 WRITE( nout, fmt = 9985 ) snames( 1 ),
' ... Yes'
2105 WRITE( nout, fmt = 9985 ) snames( 1 ),
' ... No '
2108 IF( ltest( i ) )
THEN
2109 WRITE( nout, fmt = 9984 ) snames( i ),
' ... Yes'
2111 WRITE( nout, fmt = 9984 ) snames( i ),
' ... No '
2114 WRITE( nout, fmt = 9994 ) eps
2115 WRITE( nout, fmt = * )
2122 $
CALL blacs_setup( iam, nprocs )
2127 CALL blacs_get( -1, 0, ictxt )
2134 CALL sgebr2d( ictxt,
'All',
' ', 1, 1, thresh, 1, 0, 0 )
2135 CALL zgebr2d( ictxt,
'All',
' ', 1, 1,
alpha, 1, 0, 0 )
2136 CALL zgebr2d( ictxt,
'All',
' ', 1, 1, beta, 1, 0, 0 )
2138 CALL igebr2d( ictxt,
'All',
' ', 3, 1, work, 3, 0, 0 )
2143 i = 2*ngrids + 38*nmat + nsubs + 4
2144 CALL igebr2d( ictxt,
'All',
' ', i, 1, work, i, 0, 0 )
2147 IF( work( i ).EQ.1 )
THEN
2153 IF( work( i ).EQ.1 )
THEN
2164 diagval( j ) = char( work( i ) )
2165 sideval( j ) = char( work( i+1 ) )
2166 trnaval( j ) = char( work( i+2 ) )
2167 trnbval( j ) = char( work( i+3 ) )
2168 uploval( j ) = char( work( i+4 ) )
2171 CALL icopy( ngrids, work( i ), 1, pval, 1 )
2173 CALL icopy( ngrids, work( i ), 1, qval, 1 )
2175 CALL icopy( nmat, work( i ), 1, mval, 1 )
2177 CALL icopy( nmat, work( i ), 1, nval, 1 )
2179 CALL icopy( nmat, work( i ), 1, kval, 1 )
2181 CALL icopy( nmat, work( i ), 1, maval, 1 )
2183 CALL icopy( nmat, work( i ), 1, naval, 1 )
2185 CALL icopy( nmat, work( i ), 1, imbaval, 1 )
2187 CALL icopy( nmat, work( i ), 1, inbaval, 1 )
2189 CALL icopy( nmat, work( i ), 1, mbaval, 1 )
2191 CALL icopy( nmat, work( i ), 1, nbaval, 1 )
2193 CALL icopy( nmat, work( i ), 1, rscaval, 1 )
2195 CALL icopy( nmat, work( i ), 1, cscaval, 1 )
2197 CALL icopy( nmat, work( i
2201 CALL icopy( nmat, work( i ), 1, mbval, 1 )
2203 CALL icopy( nmat, work( i ), 1, nbval, 1 )
2205 CALL icopy( nmat, work( i ), 1, imbbval, 1 )
2207 CALL icopy( nmat, work( i ), 1, inbbval, 1 )
2209 CALL icopy( nmat, work( i ), 1, mbbval, 1 )
2211 CALL icopy( nmat, work( i ), 1, nbbval, 1 )
2213 CALL icopy( nmat, work( i ), 1, rscbval, 1 )
2215 CALL icopy( nmat, work( i ), 1, cscbval, 1 )
2217 CALL icopy( nmat, work( i ), 1, ibval, 1 )
2219 CALL icopy( nmat, work( i ), 1, jbval, 1 )
2221 CALL icopy( nmat, work( i ), 1, mcval, 1 )
2223 CALL icopy( nmat, work( i ), 1, ncval, 1 )
2225 CALL icopy( nmat, work( i ), 1, imbcval, 1 )
2227 CALL icopy( nmat, work( i ), 1, inbcval, 1 )
2229 CALL icopy( nmat, work( i ), 1, mbcval, 1 )
2231 CALL icopy( nmat, work( i ), 1, nbcval, 1 )
2233 CALL icopy( nmat, work( i ), 1, rsccval, 1 )
2235 CALL icopy( nmat, work( i ), 1, csccval, 1 )
2237 CALL icopy( nmat, work
2239 CALL icopy( nmat, work( i ), 1, jcval, 1 )
2243 IF( work( i ).EQ.1 )
THEN
2246 ltest( j ) = .false.
2257 120
WRITE( nout, fmt = 9997 )
2259 IF( nout.NE.6 .AND. nout.NE.0 )
2261 CALL blacs_abort( ictxt, 1 )
2266 9998
FORMAT(
' Number of values of ',5a,
' is less than 1 or greater ',
2268 9997
FORMAT(
' Illegal input in file ',40a,
'. Aborting run.' )
2270 9995
FORMAT(
' Subprogram name ', a7,
' not recognized',
2271 $ /
' ******* TESTS ABANDONED *******' )
2272 9994
FORMAT( 2x,
'Relative machine precision (eps) is taken to be '
2274 9993
FORMAT( 2x,
'Number of Tests : ', i6 )
2275 9992
FORMAT( 2x,
'Number of process grids : ', i6 )
2276 9991
FORMAT( 2x,
' : ', 5i6 )
2277 9990
FORMAT( 2x, a1,
' : ', 5i6 )
2278 9988
FORMAT( 2x,
'Stop on failure flag : ', l6 )
2279 9987
FORMAT( 2x,
'Test for error exits flag : ', l6 )
2280 9986
FORMAT( 2x,
'Verbosity level : ', i6 )
2281 9985
FORMAT( 2x,
'Routines to be tested : ', a, a8 )
2282 9984
FORMAT( 2x,
' ', a, a8 )
2283 9983
FORMAT( 2x,
'Leading dimension gap : ', i6 )
2284 9982
FORMAT( 2x,
'Alpha : (', g16.6,
2286 9981
FORMAT( 2x,
'Beta : (', g16.6,
2288 9980
FORMAT( 2x,
'Threshold value : ', g16.6 )
2289 9979
FORMAT( 2x,
'Logical block size : ', i6 )
2302 INTEGER INOUT, NPROCS
2376 PARAMETER ( NSUBS = 11 )
2380 INTEGER I, ICTXT, MYCOL, MYROW, NPCOL, NPROW
2383 INTEGER SCODE( NSUBS )
2386 EXTERNAL BLACS_GET, BLACS_GRIDEXIT, ,
2389 $ pzsymm, pzsyr2k, pzsyrk, pztradd, pztrmm,
2395 CHARACTER*7 SNAMES( NSUBS )
2396 COMMON /SNAMEC/SNAMES
2397 COMMON /PBERRORC/NOUT, ABRTFLG
2400 DATA scode/31, 32, 32, 33, 34, 35, 36, 38, 38, 39,
2408 CALL blacs_get( -1, 0, ictxt )
2423 IF( ltest( i ) )
THEN
2424 CALL pzoptee( ictxt, nout, pzgemm, scode( i ), snames( i ) )
2425 CALL pzdimee( ictxt, nout, pzgemm, scode( i ), snames( i ) )
2426 CALL pzmatee( ictxt, nout, pzgemm, scode( i ), snames( i ) )
2432 IF( ltest( i ) )
THEN
2433 CALL pzoptee( ictxt, nout, pzsymm, scode( i ), snames( i ) )
2434 CALL pzdimee( ictxt, nout, pzsymm, scode( i ), snames( i ) )
2435 CALL pzmatee( ictxt, nout, pzsymm, scode( i ), snames( i ) )
2441 IF( ltest( i ) )
THEN
2442 CALL pzoptee( ictxt, nout, pzhemm, scode( i ), snames( i ) )
2443 CALL pzdimee( ictxt, nout, pzhemm, scode( i ), snames( i ) )
2444 CALL pzmatee( ictxt, nout, pzhemm, scode( i ), snames( i ) )
2450 IF( ltest( i ) )
THEN
2451 CALL pzoptee( ictxt, nout, pzsyrk, scode( i ), snames( i ) )
2452 CALL pzdimee( ictxt, nout, pzsyrk, scode( i ), snames( i ) )
2453 CALL pzmatee( ictxt, nout, pzsyrk, scode( i ), snames( i ) )
2459 IF( ltest( i ) )
THEN
2460 CALL pzoptee( ictxt, nout, pzherk, scode( i ), snames( i ) )
2461 CALL pzdimee( ictxt, nout, pzherk, scode( i ), snames( i ) )
2462 CALL pzmatee( ictxt, nout, pzherk, scode( i ), snames( i ) )
2468 IF( ltest( i ) )
THEN
2469 CALL pzoptee( ictxt, nout, pzsyr2k, scode( i ), snames( i ) )
2470 CALL pzdimee( ictxt, nout, pzsyr2k, scode( i ), snames( i ) )
2477 IF( ltest( i ) )
THEN
2478 CALL pzoptee( ictxt, nout, pzher2k, scode( i ), snames( i ) )
2479 CALL pzdimee( ictxt, nout, pzher2k, scode( i ), snames( i ) )
2480 CALL pzmatee( ictxt, nout, pzher2k, scode( i ), snames( i ) )
2486 IF( ltest( i ) )
THEN
2487 CALL pzoptee( ictxt, nout, pztrmm, scode( i ), snames( i ) )
2488 CALL pzdimee( ictxt, nout, pztrmm, scode( i ), snames( i ) )
2489 CALL pzmatee( ictxt, nout, pztrmm, scode( i ), snames( i ) )
2495 IF( ltest( i ) )
THEN
2496 CALL pzoptee( ictxt, nout,
pztrsm, scode( i ), snames( i ) )
2497 CALL pzdimee( ictxt, nout,
pztrsm, scode( i ), snames( i ) )
2498 CALL pzmatee( ictxt, nout,
pztrsm, scode( i ), snames( i ) )
2504 IF( ltest( i ) )
THEN
2505 CALL pzoptee( ictxt, nout, pzgeadd, scode( i ), snames( i ) )
2506 CALL pzdimee( ictxt, nout, pzgeadd, scode( i ), snames( i ) )
2507 CALL pzmatee( ictxt, nout, pzgeadd, scode( i ), snames( i ) )
2513 IF( ltest( i ) )
THEN
2514 CALL pzoptee( ictxt, nout, pztradd, scode( i ), snames( i ) )
2515 CALL pzdimee( ictxt, nout, pztradd, scode( i ), snames( i ) )
2516 CALL pzmatee( ictxt, nout, pztradd, scode( i ), snames( i ) )
2519 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2520 $
WRITE( nout, fmt = 9999 )
2522 CALL blacs_gridexit( ictxt )
2528 9999
FORMAT( 2x,
'Error-exit tests completed.' )
2865 SUBROUTINE PZBLAS3TSTCHK( ICTXT, NOUT, NROUT, SIDE, UPLO, TRANSA,
2866 $ TRANSB, DIAG, M, N, K, ALPHA, A, PA, IA,
2867 $ JA, DESCA, B, PB, IB, JB, DESCB, BETA,
2868 $ C, PC, IC, JC, DESCC, THRESH, ROGUE,
2869 $ WORK, RWORK, INFO )
2877 CHARACTER*1 DIAG, SIDE, TRANSA, TRANSB, UPLO
2878 INTEGER IA, IB, IC, ICTXT, INFO, JA, JB, JC, K, M, N,
2881 COMPLEX*16 ALPHA, BETA, ROGUE
2884 INTEGER DESCA( * ), DESCB( * ), DESCC( * )
2885 DOUBLE PRECISION RWORK( * )
2886 COMPLEX*16 A( * ), B( * ), C( * ), PA( * ), PB( * ),
2887 $ PC( * ), WORK( * )
3113 DOUBLE PRECISION RZERO
3114 PARAMETER ( RZERO = 0.0D+0 )
3115 COMPLEX*16 ONE, ZERO
3116 PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ),
3117 $ ZERO = ( 0.0D+0, 0.0D+0 ) )
3118 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3119 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3121 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
3122 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
3123 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
3124 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
3127 INTEGER I, MYCOL, MYROW, NPCOL, NPROW
3128 DOUBLE PRECISION ERR
3129 COMPLEX*16 ALPHA1, BETA1
3135 EXTERNAL BLACS_GRIDINFO, PB_ZLASET, PZCHKMIN, PZMMCH,
3136 $ PZMMCH1, PZMMCH2, PZMMCH3, PZTRMM, ZTRSM
3143 INTRINSIC DBLE, DCMPLX
3151.LE..OR..LE.
IF( ( M0 )( N0 ) )
3156 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
3162.EQ.
IF( NROUT1 ) THEN
3168 CALL PZMMCH( ICTXT, TRANSA, TRANSB, M, N, K, ALPHA, A, IA, JA,
3169 $ DESCA, B, IB, JB, DESCB, BETA, C, PC, IC, JC,
3170 $ DESCC, WORK, RWORK, ERR, IERR( 3 ) )
3172.NE.
IF( IERR( 3 )0 ) THEN
3173.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
3174 $ WRITE( NOUT, FMT = 9998 )
3175.GT.
ELSE IF( ERRDBLE( THRESH ) ) THEN
3176.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
3177 $ WRITE( NOUT, FMT = 9997 ) ERR
3182 IF( LSAME( TRANSA, 'n
' ) ) THEN
3183 CALL PZCHKMIN( ERR, M, K, A, PA, IA, JA, DESCA, IERR( 1 ) )
3185 CALL PZCHKMIN( ERR, K, M, A, PA, IA, JA, DESCA, IERR( 1 ) )
3187 IF( LSAME( TRANSB, 'n
' ) ) THEN
3188 CALL PZCHKMIN( ERR, K, N, B, PB, IB, JB, DESCB, IERR( 2 ) )
3190 CALL PZCHKMIN( ERR, N, K, B, PB, IB, JB, DESCB, IERR( 2 ) )
3193.EQ.
ELSE IF( NROUT2 ) THEN
3199 IF( LSAME( SIDE, 'l
' ) ) THEN
3200 CALL PZMMCH( ICTXT, 'no transpose
', 'no transpose
', M, N, M,
3201 $ ALPHA, A, IA, JA, DESCA, B, IB, JB, DESCB,
3202 $ BETA, C, PC, IC, JC, DESCC, WORK, RWORK, ERR,
3205 CALL PZMMCH( ICTXT, 'no transpose',
'No transpose', m, n, n,
3206 $ alpha, b, ib, jb, descb, a, ia, ja, desca,
3207 $ beta, c, pc, ic, jc, descc, work, rwork, err,
3211 IF( ierr( 3 ).NE.0 )
THEN
3212 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3213 $
WRITE( nout, fmt = 9998 )
3214 ELSE IF( err.GT.dble( thresh ) )
THEN
3215 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3216 $
WRITE( nout, fmt = 9997 ) err
3221 IF( lsame( uplo,
'L' ) )
THEN
3222 IF( lsame( side,
'L' ) )
THEN
3223 CALL pb_zlaset(
'Upper', m-1, m-1, 0, rogue, rogue,
3224 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3226 CALL pb_zlaset(
'Upper', n-1, n-1, 0, rogue, rogue,
3227 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3230 IF( lsame( side,
'L' ) )
THEN
3231 CALL pb_zlaset(
'Lower', m-1, m-1, 0, rogue, rogue,
3232 $ a( ia+1+(ja-1)*desca( m_ ) ),
3235 CALL pb_zlaset(
'Lower', n-1, n-1, 0, rogue, rogue,
3236 $ a( ia+1+(ja-1)*desca( m_ ) ),
3241 IF( lsame( side,
'L' ) )
THEN
3242 CALL pzchkmin( err, m, m, a, pa, ia, ja, desca, ierr( 1 ) )
3244 CALL pzchkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
3246 CALL pzchkmin( err, m, n, b, pb, ib, jb, descb, ierr( 2 ) )
3248 ELSE IF( nrout.EQ.3 )
THEN
3254 IF( lsame( side,
'L' ) )
THEN
3255 CALL pzmmch( ictxt,
'No transpose',
'No transpose', m, n, m,
3256 $ alpha, a, ia, ja, desca, b, ib, jb, descb,
3257 $ beta, c, pc, ic, jc, descc, work, rwork, err,
3260 CALL pzmmch( ictxt,
'No transpose',
'No transpose', m, n, n,
3261 $ alpha, b, ib, jb, descb, a, ia, ja, desca,
3262 $ beta, c, pc, ic, jc, descc, work, rwork, err,
3266 IF( ierr( 3 ).NE.0 )
THEN
3267 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3268 $
WRITE( nout, fmt = 9998 )
3269 ELSE IF( err.GT.dble( thresh ) )
THEN
3270 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3271 $
WRITE( nout, fmt = 9997 ) err
3276 IF( lsame( uplo,
'L' ) )
THEN
3277 IF( lsame( side,
'L' ) )
THEN
3278 CALL pb_zlaset(
'Upper', m-1, m-1, 0, rogue, rogue,
3279 $ a( ia+ja*desca( m_ ) )
3281 CALL pb_zlaset(
'Upper', n-1, n-1, 0, rogue, rogue,
3282 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3285 IF( lsame( side,
'L' ) )
THEN
3286 CALL pb_zlaset(
'Lower', m-1, m-1, 0, rogue, rogue,
3287 $ a( ia+1+(ja-1)*desca( m_ ) ),
3290 CALL pb_zlaset(
'Lower', n-1, n-1, 0, rogue, rogue,
3291 $ a( ia+1+(ja-1)*desca( m_ ) ),
3296 IF( lsame( side,
'L' ) )
THEN
3297 CALL pzchkmin( err, m, m, a, pa, ia, ja, desca, ierr( 1 ) )
3299 CALL pzchkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
3301 CALL pzchkmin( err, m, n, b, pb, ib, jb, descb, ierr( 2 ) )
3303 ELSE IF( nrout.EQ.4 )
THEN
3309 IF( lsame( transa,
'N' ) )
THEN
3310 CALL pzmmch1( ictxt, uplo,
'No transpose', n, k, alpha, a,
3311 $ ia, ja, desca, beta, c, pc, ic, jc, descc,
3312 $ work, rwork, err, ierr( 3 ) )
3314 CALL pzmmch1( ictxt, uplo,
'Transpose', n, k, alpha, a, ia,
3315 $ ja, desca, beta, c, pc, ic, jc, descc, work,
3316 $ rwork, err, ierr( 3 ) )
3319 IF( ierr( 3 ).NE.0 )
THEN
3320 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3321 $
WRITE( nout, fmt = 9998 )
3322 ELSE IF( err.GT.dble( thresh ) )
THEN
3323 IF( myrow.EQ.0 .AND. mycol.EQ.0
3324 $
WRITE( nout, fmt = 9997 ) err
3329 IF( lsame( transa,
'N' ) )
THEN
3330 CALL pzchkmin( err, n, k, a, pa, ia, ja, desca, ierr( 1 ) )
3335 ELSE IF( nrout.EQ.5 )
THEN
3341 beta1 = dcmplx( dble
3342 alpha1 = dcmplx( dble( alpha ), rzero )
3343 IF( lsame( transa,
'N' ) )
THEN
3344 CALL pzmmch1'Hermitian', n, k, alpha1, a, ia,
3346 $ rwork, err, ierr( 3 ) )
3348 CALL pzmmch1( ictxt, uplo,
'Conjugate transpose', n, k,
3349 $ alpha1, a, ia, ja, desca, beta1, c, pc, ic,
3350 $ jc, descc, work, rwork, err, ierr( 3 ) )
3353 IF( ierr( 3 ).NE.0 )
THEN
3354 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3355 $
WRITE( nout, fmt = 9998 )
3356 ELSE IF( err.GT.dble( thresh ) )
THEN
3357 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3358 $
WRITE( nout, fmt = 9997 ) err
3363 IF( lsame( transa,
'N' ) )
THEN
3364 CALL pzchkmin( err, n, k, a, pa, ia, ja, desca, ierr( 1 ) )
3366 CALL pzchkmin( err, k, n, a, pa, ia, ja, desca, ierr( 1 ) )
3369 ELSE IF( nrout.EQ.6 )
THEN
3375 IF( lsame( transa,
'N' ) )
THEN
3376 CALL pzmmch2( ictxt, uplo,
'No transpose', n, k, alpha, a,
3377 $ ia, ja, desca, b, ib, jb, descb, beta, c, pc,
3378 $ ic, jc, descc, work, rwork, err, ierr( 3 ) )
3380 CALL pzmmch2( ictxt, uplo,
'Transpose', n, k, alpha, a,
3381 $ ia, ja, desca, b, ib, jb, descb, beta, c, pc,
3382 $ ic, jc, descc, work, rwork, err,
3386 IF( ierr( 3 ).NE.0 )
THEN
3387 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3388 $
WRITE( nout, fmt = 9998 )
3389 ELSE IF( err.GT.dble( thresh ) )
THEN
3390 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3391 $
WRITE( nout, fmt = 9997 ) err
3396 IF( lsame( transa,
'N' ) )
THEN
3397 CALL pzchkmin( err, n, k, a, pa, ia, ja, desca, ierr( 1 ) )
3398 CALL pzchkmin( err, n, k, b, pb, ib, jb, descb, ierr( 2 ) )
3400 CALL pzchkmin( err, k, n, a, pa, ia, ja, desca, ierr( 1 ) )
3401 CALL pzchkmin( err, k, n, b, pb, ib, jb, descb, ierr( 2 ) )
3404 ELSE IF( nrout.EQ.7 )
THEN
3410 beta1 = dcmplx( dble( beta ), rzero )
3411 IF( lsame( transa,
'N' ) )
THEN
3412 CALL pzmmch2( ictxt, uplo,
'Hermitian', n, k, alpha, a, ia,
3413 $ ja, desca, b, ib, jb, descb, beta1, c, pc, ic,
3414 $ jc, descc, work, rwork, err, ierr( 3 ) )
3416 CALL pzmmch2( ictxt, uplo,
'Conjugate transpose', n, k,
3417 $ alpha, a, ia, ja, desca, b, ib, jb, descb,
3418 $ beta1, c, pc, ic, jc, descc, work, rwork, err,
3422 IF( ierr( 3 ).NE.0 )
THEN
3423 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3424 $
WRITE( nout, fmt = 9998 )
3425 ELSE IF( err.GT.dble( thresh ) )
THEN
3426 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3427 $
WRITE( nout, fmt = 9997 ) err
3432 IF( lsame( transa,
'N' ) )
THEN
3433 CALL pzchkmin( err, n, k, a, pa, ia, ja, desca, ierr( 1 ) )
3434 CALL pzchkmin( err, n, k, b, pb, ib, jb, descb, ierr( 2 ) )
3436 CALL pzchkmin( err, k, n, a, pa, ia, ja, desca, ierr( 1 ) )
3437 CALL pzchkmin( err, k, n, b, pb, ib, jb, descb, ierr( 2 ) )
3440 ELSE IF( nrout.EQ.8 )
THEN
3446 IF( lsame( side,
'L' ) )
THEN
3447 CALL pzmmch( ictxt, transa,
'No transpose', m, n, m,
3448 $ alpha, a, ia, ja, desca, c, ib, jb, descb,
3449 $ zero, b, pb, ib, jb, descb, work, rwork, err,
3452 CALL pzmmch( ictxt,
'No transpose', transa, m, n, n,
3453 $ alpha, c, ib, jb, descb, a, ia, ja, desca,
3454 $ zero, b, pb, ib, jb, descb, work, rwork, err,
3458 IF( ierr( 2 ).NE.0 )
THEN
3459 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3460 $
WRITE( nout, fmt = 9998 )
3461 ELSE IF( err.GT.dble( thresh ) )
THEN
3462 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3463 $
WRITE( nout, fmt = 9997 ) err
3468 IF( lsame( side,
'L' ) )
THEN
3469 IF( lsame( uplo,
'L' ) )
THEN
3470 IF( lsame( diag,
'N' ) )
THEN
3471 CALL pb_zlaset(
'Upper', m-1, m-1, 0, rogue, rogue,
3472 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3474 CALL pb_zlaset(
'Upper', m, m, 0, rogue, one,
3475 $ a( ia+(ja-1)*desca( m_ ) ),
3479 IF( lsame( diag,
'N' ) )
THEN
3480 CALL pb_zlaset(
'Lower', m-1, m-1, 0, rogue, rogue,
3481 $ a( ia+1+(ja-1)*desca( m_ ) ),
3484 CALL pb_zlaset(
'Lower', m, m, 0, rogue, one,
3489 CALL pzchkmin( err, m, m, a, pa, ia, ja, desca, ierr( 1 ) )
3491 IF( lsame( uplo,
'L' ) )
THEN
3492 IF( lsame( diag,
'N' ) )
THEN
3493 CALL pb_zlaset(
'Upper', n-1, n-1, 0, rogue, rogue,
3494 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3496 CALL pb_zlaset(
'Upper', n, n, 0, rogue, one,
3497 $ a( ia+(ja-1)*desca( m_ ) ),
3501 IF( lsame( diag,
'N' ) )
THEN
3502 CALL pb_zlaset(
'Lower', n-1, n-1, 0, rogue, rogue,
3503 $ a( ia+1+(ja-1)*desca( m_ ) ),
3506 CALL pb_zlaset(
'Lower', n, n, 0, rogue, one,
3507 $ a( ia+(ja-1)*desca( m_ ) ),
3511 CALL pzchkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
3514 ELSE IF( nrout.EQ.9 )
THEN
3520 CALL ztrsm( side, uplo, transa, diag, m, n, alpha,
3521 $ a( ia+(ja-1)*desca( m_ ) ), desca( m_ ),
3522 $ b( ib+(jb-1)*descb( m_ ) ), descb( m_ ) )
3523 CALL pztrmm( side, uplo, transa, diag, m, n, alpha, pa, ia, ja,
3524 $ desca, pb, ib, jb, descb )
3525 IF( lsame( side,
'L' ) )
THEN
3526 CALL pzmmch( ictxt, transa,
'No transpose', m, n, m, alpha,
3527 $ a, ia, ja, desca, b, ib, jb, descb, zero, c,
3528 $ pb, ib, jb, descb, work, rwork, err,
3531 CALL pzmmch( ictxt,
'No transpose', transa, m, n, n, alpha,
3532 $ b, ib, jb, descb, a, ia, ja, desca, zero, c,
3533 $ pb, ib, jb, descb, work, rwork, err,
3537 IF( ierr( 2 ).NE.0 )
THEN
3538 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3539 $
WRITE( nout, fmt = 9998 )
3540 ELSE IF( err.GT.dble( thresh ) )
THEN
3542 $
WRITE( nout, fmt = 9997 ) err
3547 IF( lsame( side,
'L' ) )
THEN
3548 IF( lsame( uplo,
'L' ) )
THEN
3553 CALL pb_zlaset(
'Upper', m, m, 0, rogue, one
3558 IF( lsame( diag,
'N' ) )
THEN
3559 CALL pb_zlaset( 'lower
', M-1, M-1, 0, ROGUE, ROGUE,
3560 $ A( IA+1+(JA-1)*DESCA( M_ ) ),
3563 CALL PB_ZLASET( 'lower
', M, M, 0, ROGUE, ONE,
3564 $ A( IA+(JA-1)*DESCA( M_ ) ),
3568 CALL PZCHKMIN( ERR, M, M, A, PA, IA, JA, DESCA, IERR( 1 ) )
3570 IF( LSAME( UPLO, 'l
' ) ) THEN
3571 IF( LSAME( DIAG, 'n' ) )
THEN
3572 CALL pb_zlaset(
'Upper', n-1, n-1, 0, rogue, rogue,
3573 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
3575 CALL pb_zlaset(
'Upper', n, n, 0, rogue, one,
3576 $ a( ia+(ja-1)*desca( m_ ) ),
3580 IF( lsame( diag,
'N' ) )
THEN
3581 CALL pb_zlaset(
'Lower', n-1, n-1, 0, rogue, rogue,
3582 $ a( ia+1+(ja-1)*desca( m_ ) ),
3585 CALL pb_zlaset(
'Lower', n, n, 0, rogue, one,
3586 $ a( ia+(ja-1)*desca( m_ ) ),
3590 CALL pzchkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
3592 ELSE IF( nrout.EQ.10 )
THEN
3598 CALL pzmmch3(
'All', transa, m, n, alpha, a, ia, ja, desca,
3599 $ beta, c, pc, ic, jc, descc, err, ierr( 3 ) )
3603 IF( lsame( transa,
'N' ) )
THEN
3604 CALL pzchkmin( err, m, n, a, pa, ia, ja, desca, ierr( 1 ) )
3606 CALL pzchkmin( err, n, m, a, pa, ia, ja, desca, ierr( 1 ) )
3609 ELSE IF( nrout.EQ.11 )
THEN
3615 CALL pzmmch3( uplo, transa, m, n, alpha, a, ia, ja, desca,
3616 $ beta, c, pc, ic, jc, descc, err, ierr( 3 ) )
3620 IF( lsame( transa,
'N' ) )
THEN
3621 CALL pzchkmin( err, m, n, a, pa, ia, ja, desca, ierr( 1 ) )
3623 CALL pzchkmin( err, n, m, a, pa, ia, ja, desca, ierr( 1 ) )
3628 IF( ierr( 1 ).NE.0 )
THEN
3630 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3631 $
WRITE( nout, fmt = 9999 )
'A'
3634 IF( ierr( 2 ).NE.0 )
THEN
3636 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3637 $
WRITE( nout, fmt = 9999 )
'B'
3640 IF( ierr( 3 ).NE.0 )
THEN
3642 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3643 $
WRITE( nout, fmt = 9999 )
'C'
3646 9999
FORMAT( 2x,
' ***** ERROR: Matrix operand ', a,
3647 $
' is incorrect.' )
3648 9998
FORMAT( 2x,
' ***** FATAL ERROR - Computed result is less ',
3649 $
'than half accurate *****' )
3650 9997
FORMAT( 2x,
' ***** Test completed with maximum test ratio: ',
3651 $ f11.5,
' SUSPECT *****' )