1417
 1418
 1419
 1420
 1421
 1422
 1423
 1424      LOGICAL            SOF, TEE
 1425      INTEGER            IAM, IGAP, IVERB, LDPVAL, LDQVAL, LDVAL, NBLOG,
 1426     $                   NGRIDS, NMAT, NOUT, NPROCS
 1427      REAL               THRESH
 1428      COMPLEX*16         ALPHA, BETA
 1429
 1430
 1431      CHARACTER*( * )    SUMMRY
 1432      CHARACTER*1        DIAGVAL( LDVAL ), SIDEVAL( LDVAL ),
 1433     $                   TRNAVAL( LDVAL ), TRNBVAL( LDVAL ),
 1434     $                   UPLOVAL( LDVAL )
 1435      LOGICAL            LTEST( * )
 1436      INTEGER            CSCAVAL( LDVAL ), CSCBVAL( 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( * )
 1452
 1453
 1454
 1455
 1456
 1457
 1458
 1459
 1460
 1461
 1462
 1463
 1464
 1465
 1466
 1467
 1468
 1469
 1470
 1471
 1472
 1473
 1474
 1475
 1476
 1477
 1478
 1479
 1480
 1481
 1482
 1483
 1484
 1485
 1486
 1487
 1488
 1489
 1490
 1491
 1492
 1493
 1494
 1495
 1496
 1497
 1498
 1499
 1500
 1501
 1502
 1503
 1504
 1505
 1506
 1507
 1508
 1509
 1510
 1511
 1512
 1513
 1514
 1515
 1516
 1517
 1518
 1519
 1520
 1521
 1522
 1523
 1524
 1525
 1526
 1527
 1528
 1529
 1530
 1531
 1532
 1533
 1534
 1535
 1536
 1537
 1538
 1539
 1540
 1541
 1542
 1543
 1544
 1545
 1546
 1547
 1548
 1549
 1550
 1551
 1552
 1553
 1554
 1555
 1556
 1557
 1558
 1559
 1560
 1561
 1562
 1563
 1564
 1565
 1566
 1567
 1568
 1569
 1570
 1571
 1572
 1573
 1574
 1575
 1576
 1577
 1578
 1579
 1580
 1581
 1582
 1583
 1584
 1585
 1586
 1587
 1588
 1589
 1590
 1591
 1592
 1593
 1594
 1595
 1596
 1597
 1598
 1599
 1600
 1601
 1602
 1603
 1604
 1605
 1606
 1607
 1608
 1609
 1610
 1611
 1612
 1613
 1614
 1615
 1616
 1617
 1618
 1619
 1620
 1621
 1622
 1623
 1624
 1625
 1626
 1627
 1628
 1629
 1630
 1631
 1632
 1633
 1634
 1635
 1636
 1637
 1638
 1639
 1640
 1641
 1642
 1643
 1644
 1645
 1646
 1647
 1648
 1649
 1650
 1651
 1652
 1653
 1654
 1655
 1656
 1657
 1658
 1659
 1660
 1661
 1662
 1663
 1664
 1665
 1666
 1667
 1668
 1669
 1670
 1671
 1672
 1673
 1674
 1675
 1676
 1677
 1678
 1679
 1680
 1681
 1682
 1683
 1684
 1685
 1686
 1687
 1688
 1689
 1690
 1691
 1692
 1693
 1694
 1695
 1696
 1697
 1698
 1699
 1700
 1701
 1702
 1703
 1704
 1705
 1706
 1707
 1708
 1709
 1710
 1711
 1712
 1713
 1714
 1715
 1716
 1717
 1718
 1719
 1720
 1721
 1722
 1723
 1724
 1725
 1726
 1727
 1728
 1729
 1730
 1731
 1732
 1733
 1734
 1735
 1736
 1737
 1738
 1739
 1740
 1741
 1742      INTEGER            NIN, NSUBS
 1743      parameter( nin = 11, nsubs = 11 )
 1744
 1745
 1746      LOGICAL            LTESTT
 1747      INTEGER            I, ICTXT, J
 1748      DOUBLE PRECISION   EPS
 1749
 1750
 1751      CHARACTER*7        SNAMET
 1752      CHARACTER*79       USRINFO
 1753
 1754
 1755      EXTERNAL           blacs_abort, blacs_get, blacs_gridexit,
 1756     $                   blacs_gridinit, blacs_setup, 
icopy, igebr2d,
 
 1757     $                   igebs2d, sgebr2d, sgebs2d, zgebr2d, zgebs2d
 1758
 1759
 1760      DOUBLE PRECISION   PDLAMCH
 1762
 1763
 1764      INTRINSIC          char, ichar, 
max, 
min 
 1765
 1766
 1767      CHARACTER*7        SNAMES( NSUBS )
 1768      COMMON             /snamec/snames
 1769
 1770
 1771
 1772
 1773
 1774
 1775      IF( iam.EQ.0 ) THEN
 1776
 1777
 1778
 1779         OPEN( nin, file='PZBLAS3TST.dat', status='OLD' )
 1780         READ( nin, fmt = * ) summry
 1781         summry = ' '
 1782
 1783
 1784
 1785         READ( nin, fmt = 9999 ) usrinfo
 1786
 1787
 1788
 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' )
 1793
 1794
 1795
 1796
 1797
 1798         READ( nin, fmt = * ) sof
 1799
 1800
 1801
 1802         READ( nin, fmt = * ) tee
 1803
 1804
 1805
 1806         READ( nin, fmt = * ) iverb
 1807         IF( iverb.LT.0 .OR. iverb.GT.3 )
 1808     $      iverb = 0
 1809
 1810
 1811
 1812         READ( nin, fmt = * ) igap
 1813         IF( igap.LT.0 )
 1814     $      igap = 0
 1815
 1816
 1817
 1818         READ( nin, fmt = * ) thresh
 1819         IF( thresh.LT.0.0 )
 1820     $      thresh = 16.0
 1821
 1822
 1823
 1824         READ( nin, fmt = * ) nblog
 1825         IF( nblog.LT.1 )
 1826     $      nblog = 32
 1827
 1828
 1829
 1830         READ( nin, fmt = * ) ngrids
 1831         IF( ngrids.LT.1 .OR. ngrids.GT.ldpval ) THEN
 1832            WRITE( nout, fmt = 9998 ) 'Grids', ldpval
 1833            GO TO 120
 1834         ELSE IF( ngrids.GT.ldqval ) THEN
 1835            WRITE( nout, fmt = 9998 ) 'Grids', ldqval
 1836            GO TO 120
 1837         END IF
 1838
 1839
 1840
 1841         READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
 1842         READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
 1843
 1844
 1845
 1846         READ( nin, fmt = * ) alpha
 1847         READ( nin, fmt = * ) beta
 1848
 1849
 1850
 1851         READ( nin, fmt = * ) nmat
 1852         IF( nmat.LT.1 .OR. nmat.GT.ldval ) THEN
 1853            WRITE( nout, fmt = 9998 ) 'Tests', ldval
 1854            GO TO 120
 1855         ENDIF
 1856
 1857
 1858
 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( i ), i = 1, nmat )
 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 )
 1884         READ( nin, fmt = * ) ( cscbval( 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 )
 1897
 1898
 1899
 1900
 1901         DO 10 i = 1, nsubs
 1902            ltest( i ) = .false.
 1903   10    CONTINUE
 1904   20    CONTINUE
 1905         READ( nin, fmt = 9996, END = 50 ) SNAMET, ltestt
 1906         DO 30 i = 1, nsubs
 1907            IF( snamet.EQ.snames( i ) )
 1908     $         GO TO 40
 1909   30    CONTINUE
 1910
 1911         WRITE( nout, fmt = 9995 )snamet
 1912         GO TO 120
 1913
 1914   40    CONTINUE
 1915         ltest( i ) = ltestt
 1916         GO TO 20
 1917
 1918   50    CONTINUE
 1919
 1920
 1921
 1922         CLOSE ( nin )
 1923
 1924
 1925
 1926
 1927         IF( nprocs.LT.1 ) THEN
 1928            nprocs = 0
 1929            DO 60 i = 1, ngrids
 1930               nprocs = 
max( nprocs, pval( i )*qval( i ) )
 
 1931   60       CONTINUE
 1932            CALL blacs_setup( iam, nprocs )
 1933         END IF
 1934
 1935
 1936
 1937
 1938         CALL blacs_get( -1, 0, ictxt )
 1939         CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
 1940
 1941
 1942
 1944
 1945
 1946
 1947         CALL sgebs2d( ictxt, 'All', ' ', 1, 1, thresh, 1 )
 1948         CALL zgebs2d( ictxt, 'All', ' ', 1, 1, alpha, 1 )
 1949         CALL zgebs2d( ictxt, 'All', ' ', 1, 1, beta,  1 )
 1950
 1951         work( 1 ) = ngrids
 1952         work( 2 ) = nmat
 1953         work( 3 ) = nblog
 1954         CALL igebs2d( ictxt, 'All', ' ', 3, 1, work, 3 )
 1955
 1956         i = 1
 1957         IF( sof ) THEN
 1958            work( i ) = 1
 1959         ELSE
 1960            work( i ) = 0
 1961         END IF
 1962         i = i + 1
 1963         IF( tee ) THEN
 1964            work( i ) = 1
 1965         ELSE
 1966            work( i ) = 0
 1967         END IF
 1968         i = i + 1
 1969         work( i ) = iverb
 1970         i = i + 1
 1971         work( i ) = igap
 1972         i = i + 1
 1973         DO 70 j = 1, nmat
 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 ) )
 1979            i = i + 5
 1980   70    CONTINUE
 1981         CALL icopy( ngrids, pval,     1, work( i ), 1 )
 
 1982         i = i + ngrids
 1983         CALL icopy( ngrids, qval,     1, work( i ), 1 )
 
 1984         i = i + ngrids
 1985         CALL icopy( nmat,   mval,     1, work( i ), 1 )
 
 1986         i = i + nmat
 1987         CALL icopy( nmat,   nval,     1, work( i ), 1 )
 
 1988         i = i + nmat
 1989         CALL icopy( nmat,   kval,     1, work( i ), 1 )
 
 1990         i = i + nmat
 1991         CALL icopy( nmat,   maval,    1, work( i ), 1 )
 
 1992         i = i + nmat
 1993         CALL icopy( nmat,   naval,    1, work( i ), 1 )
 
 1994         i = i + nmat
 1995         CALL icopy( nmat,   imbaval,  1, work( i ), 1 )
 
 1996         i = i + nmat
 1997         CALL icopy( nmat,   inbaval,  1, work( i ), 1 )
 
 1998         i = i + nmat
 1999         CALL icopy( nmat,   mbaval,   1, work( i ), 1 )
 
 2000         i = i + nmat
 2001         CALL icopy( nmat,   nbaval,   1, work( i ), 1 )
 
 2002         i = i + nmat
 2003         CALL icopy( nmat,   rscaval,  1, work( i ), 1 )
 
 2004         i = i + nmat
 2005         CALL icopy( nmat,   cscaval,  1, work( i ), 1 )
 
 2006         i = i + nmat
 2007         CALL icopy( nmat,   iaval,    1, work( i ), 1 )
 
 2008         i = i + nmat
 2009         CALL icopy( nmat,   javal,    1, work( i ), 1 )
 
 2010         i = i + nmat
 2011         CALL icopy( nmat,   mbval,    1, work( i ), 1 )
 
 2012         i = i + nmat
 2013         CALL icopy( nmat,   nbval,    1, work( i ), 1 )
 
 2014         i = i + nmat
 2015         CALL icopy( nmat,   imbbval,  1, work( i ), 1 )
 
 2016         i = i + nmat
 2017         CALL icopy( nmat,   inbbval,  1, work( i ), 1 )
 
 2018         i = i + nmat
 2019         CALL icopy( nmat,   mbbval,   1, work( i ), 1 )
 
 2020         i = i + nmat
 2021         CALL icopy( nmat,   nbbval,   1, work( i ), 1 )
 
 2022         i = i + nmat
 2023         CALL icopy( nmat,   rscbval,  1, work( i ), 1 )
 
 2024         i = i + nmat
 2025         CALL icopy( nmat,   cscbval,  1, work( i ), 1 )
 
 2026         i = i + nmat
 2027         CALL icopy( nmat,   ibval,    1, work( i ), 1 )
 
 2028         i = i + nmat
 2029         CALL icopy( nmat,   jbval,    1, work( i ), 1 )
 
 2030         i = i + nmat
 2031         CALL icopy( nmat,   mcval,    1, work( i ), 1 )
 
 2032         i = i + nmat
 2033         CALL icopy( nmat,   ncval,    1, work( i ), 1 )
 
 2034         i = i + nmat
 2035         CALL icopy( nmat,   imbcval,  1, work( i ), 1 )
 
 2036         i = i + nmat
 2037         CALL icopy( nmat,   inbcval,  1, work( i ), 1 )
 
 2038         i = i + nmat
 2039         CALL icopy( nmat,   mbcval,   1, work( i ), 1 )
 
 2040         i = i + nmat
 2041         CALL icopy( nmat,   nbcval,   1, work( i ), 1 )
 
 2042         i = i + nmat
 2043         CALL icopy( nmat,   rsccval,  1, work( i ), 1 )
 
 2044         i = i + nmat
 2045         CALL icopy( nmat,   csccval,  1, work( i ), 1 )
 
 2046         i = i + nmat
 2047         CALL icopy( nmat,   icval,    1, work( i ), 1 )
 
 2048         i = i + nmat
 2049         CALL icopy( nmat,   jcval,    1, work( i ), 1 )
 
 2050         i = i + nmat
 2051
 2052         DO 80 j = 1, nsubs
 2053            IF( ltest( j ) ) THEN
 2054               work( i ) = 1
 2055            ELSE
 2056               work( i ) = 0
 2057            END IF
 2058            i = i + 1
 2059   80    CONTINUE
 2060         i = i - 1
 2061         CALL igebs2d( ictxt, 'All', ' ', i, 1, work, i )
 2062
 2063
 2064
 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 '//
 2070     $               'Level 3 PBLAS'
 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) )
 
 2077         IF( ngrids.GT.5 )
 2078     $      WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
 2079     $                                  
min( 10, ngrids ) )
 
 2080         IF( ngrids.GT.10 )
 2081     $      WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
 2082     $                                  
min( 15, ngrids ) )
 
 2083         IF( ngrids.GT.15 )
 2084     $      WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
 2085         WRITE( nout, fmt = 9990 )
 2086     $               
'Q', ( qval(i), i = 1, 
min(ngrids, 5) )
 
 2087         IF( ngrids.GT.5 )
 2088     $      WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
 2089     $                                  
min( 10, ngrids ) )
 
 2090         IF( ngrids.GT.10 )
 2091     $      WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
 2092     $                                  
min( 15, ngrids ) )
 
 2093         IF( ngrids.GT.15 )
 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'
 2104         ELSE
 2105            WRITE( nout, fmt = 9985 ) snames( 1 ), ' ... No '
 2106         END IF
 2107         DO 90 i = 2, nsubs
 2108            IF( ltest( i ) ) THEN
 2109               WRITE( nout, fmt = 9984 ) snames( i ), ' ... Yes'
 2110            ELSE
 2111               WRITE( nout, fmt = 9984 ) snames( i ), ' ... No '
 2112            END IF
 2113   90    CONTINUE
 2114         WRITE( nout, fmt = 9994 ) eps
 2115         WRITE( nout, fmt = * )
 2116
 2117      ELSE
 2118
 2119
 2120
 2121         IF( nprocs.LT.1 )
 2122     $      CALL blacs_setup( iam, nprocs )
 2123
 2124
 2125
 2126
 2127         CALL blacs_get( -1, 0, ictxt )
 2128         CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
 2129
 2130
 2131
 2133
 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 )
 2137
 2138         CALL igebr2d( ictxt, 'All', ' ', 3, 1, work, 3, 0, 0 )
 2139         ngrids = work( 1 )
 2140         nmat   = work( 2 )
 2141         nblog  = work( 3 )
 2142
 2143         i = 2*ngrids + 38*nmat + nsubs + 4
 2144         CALL igebr2d( ictxt, 'All', ' ', i, 1, work, i, 0, 0 )
 2145
 2146         i = 1
 2147         IF( work( i ).EQ.1 ) THEN
 2148            sof = .true.
 2149         ELSE
 2150            sof = .false.
 2151         END IF
 2152         i = i + 1
 2153         IF( work( i ).EQ.1 ) THEN
 2154            tee = .true.
 2155         ELSE
 2156            tee = .false.
 2157         END IF
 2158         i = i + 1
 2159         iverb = work( i )
 2160         i = i + 1
 2161         igap = work( i )
 2162         i = i + 1
 2163         DO 100 j = 1, nmat
 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 ) )
 2169            i = i + 5
 2170  100    CONTINUE
 2171         CALL icopy( ngrids, work( i ), 1, pval,     1 )
 
 2172         i = i + ngrids
 2173         CALL icopy( ngrids, work( i ), 1, qval,     1 )
 
 2174         i = i + ngrids
 2175         CALL icopy( nmat,   work( i ), 1, mval,     1 )
 
 2176         i = i + nmat
 2177         CALL icopy( nmat,   work( i ), 1, nval,     1 )
 
 2178         i = i + nmat
 2179         CALL icopy( nmat,   work( i ), 1, kval,     1 )
 
 2180         i = i + nmat
 2181         CALL icopy( nmat,   work( i ), 1, maval,    1 )
 
 2182         i = i + nmat
 2183         CALL icopy( nmat,   work( i ), 1, naval,    1 )
 
 2184         i = i + nmat
 2185         CALL icopy( nmat,   work( i ), 1, imbaval,  1 )
 
 2186         i = i + nmat
 2187         CALL icopy( nmat,   work( i ), 1, inbaval,  1 )
 
 2188         i = i + nmat
 2189         CALL icopy( nmat,   work( i ), 1, mbaval,   1 )
 
 2190         i = i + nmat
 2191         CALL icopy( nmat,   work( i ), 1, nbaval,   1 )
 
 2192         i = i + nmat
 2193         CALL icopy( nmat,   work( i ), 1, rscaval,  1 )
 
 2194         i = i + nmat
 2195         CALL icopy( nmat,   work( i ), 1, cscaval,  1 )
 
 2196         i = i + nmat
 2197         CALL icopy( nmat,   work( i ), 1, iaval,    1 )
 
 2198         i = i + nmat
 2199         CALL icopy( nmat,   work( i ), 1, javal,    1 )
 
 2200         i = i + nmat
 2201         CALL icopy( nmat,   work( i ), 1, mbval,    1 )
 
 2202         i = i + nmat
 2203         CALL icopy( nmat,   work( i ), 1, nbval,    1 )
 
 2204         i = i + nmat
 2205         CALL icopy( nmat,   work( i ), 1, imbbval,  1 )
 
 2206         i = i + nmat
 2207         CALL icopy( nmat,   work( i ), 1, inbbval,  1 )
 
 2208         i = i + nmat
 2209         CALL icopy( nmat,   work( i ), 1, mbbval,   1 )
 
 2210         i = i + nmat
 2211         CALL icopy( nmat,   work( i ), 1, nbbval,   1 )
 
 2212         i = i + nmat
 2213         CALL icopy( nmat,   work( i ), 1, rscbval,  1 )
 
 2214         i = i + nmat
 2215         CALL icopy( nmat,   work( i ), 1, cscbval,  1 )
 
 2216         i = i + nmat
 2217         CALL icopy( nmat,   work( i ), 1, ibval,    1 )
 
 2218         i = i + nmat
 2219         CALL icopy( nmat,   work( i ), 1, jbval,    1 )
 
 2220         i = i + nmat
 2221         CALL icopy( nmat,   work( i ), 1, mcval,    1 )
 
 2222         i = i + nmat
 2223         CALL icopy( nmat,   work( i ), 1, ncval,    1 )
 
 2224         i = i + nmat
 2225         CALL icopy( nmat,   work( i ), 1, imbcval,  1 )
 
 2226         i = i + nmat
 2227         CALL icopy( nmat,   work( i ), 1, inbcval,  1 )
 
 2228         i = i + nmat
 2229         CALL icopy( nmat,   work( i ), 1, mbcval,   1 )
 
 2230         i = i + nmat
 2231         CALL icopy( nmat,   work( i ), 1, nbcval,   1 )
 
 2232         i = i + nmat
 2233         CALL icopy( nmat,   work( i ), 1, rsccval,  1 )
 
 2234         i = i + nmat
 2235         CALL icopy( nmat,   work( i ), 1, csccval,  1 )
 
 2236         i = i + nmat
 2237         CALL icopy( nmat,   work( i ), 1, icval,    1 )
 
 2238         i = i + nmat
 2239         CALL icopy( nmat,   work( i ), 1, jcval,    1 )
 
 2240         i = i + nmat
 2241
 2242         DO 110 j = 1, nsubs
 2243            IF( work( i ).EQ.1 ) THEN
 2244               ltest( j ) = .true.
 2245            ELSE
 2246               ltest( j ) = .false.
 2247            END IF
 2248            i = i + 1
 2249  110    CONTINUE
 2250
 2251      END IF
 2252
 2253      CALL blacs_gridexit( ictxt )
 2254
 2255      RETURN
 2256
 2257  120 WRITE( nout, fmt = 9997 )
 2258      CLOSE( nin )
 2259      IF( nout.NE.6 .AND. nout.NE.0 )
 2260     $   CLOSE( nout )
 2261      CALL blacs_abort( ictxt, 1 )
 2262
 2263      stop
 2264
 2265 9999 FORMAT( a )
 2266 9998 FORMAT( ' Number of values of ',5a, ' is less than 1 or greater ',
 2267     $        'than ', i2 )
 2268 9997 FORMAT( ' Illegal input in file ',40a,'.  Aborting run.' )
 2269 9996 FORMAT( a7, l2 )
 2270 9995 FORMAT( '  Subprogram name ', a7, ' not recognized',
 2271     $        /' ******* TESTS ABANDONED *******' )
 2272 9994 FORMAT( 2x, 'Relative machine precision (eps) is taken to be ',
 2273     $        e18.6 )
 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,
 2285     $        ',', g16.6, ')' )
 2286 9981 FORMAT( 2x, 'Beta                      :      (', g16.6,
 2287     $        ',', g16.6, ')' )
 2288 9980 FORMAT( 2x, 'Threshold value           : ', g16.6 )
 2289 9979 FORMAT( 2x, 'Logical block size        : ', i6 )
 2290
 2291
 2292
subroutine icopy(n, sx, incx, sy, incy)
 
double precision function pdlamch(ictxt, cmach)