1674
 1675
 1676
 1677
 1678
 1679
 1680
 1681      CHARACTER*1         ARGNAM
 1682      INTEGER             ARGPOS, ICTXT, NOUT, SCODE
 1683
 1684
 1685      CHARACTER*(*)       SNAME
 1686
 1687
 1688      EXTERNAL            subptr
 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
 1743
 1744
 1745
 1746
 1747
 1748
 1749
 1750
 1751
 1752
 1753
 1754
 1755
 1756
 1757
 1758
 1759
 1760
 1761
 1762
 1763
 1764
 1765
 1766
 1767
 1768
 1769
 1770
 1771
 1772
 1773
 1774
 1775
 1776
 1777
 1778
 1779
 1780
 1781
 1782
 1783
 1784
 1785
 1786
 1787
 1788
 1789
 1790
 1791
 1792
 1793
 1794
 1795
 1796
 1797
 1798      INTEGER            BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
 1799     $                   DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
 1800     $                   RSRC_
 1801      parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
 1802     $                   dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
 1803     $                   imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
 1804     $                   rsrc_ = 9, csrc_ = 10, lld_ = 11 )
 1805      INTEGER             DESCMULT
 1806      parameter( descmult = 100 )
 1807
 1808
 1809      INTEGER             I, INFOT, NPROW, NPCOL, MYROW, MYCOL
 1810
 1811
 1813
 1814
 1815      LOGICAL             LSAME
 1817
 1818
 1819      INTEGER            IA, IB, IC, INCX, INCY, ISCLR, IX, IY, JA, JB,
 1820     $                   JC, JX, JY
 1821      INTEGER            DESCA( DLEN_ ), DESCB( DLEN_ ), DESCC( DLEN_ ),
 1822     $                   DESCX( DLEN_ ), DESCY( DLEN_ )
 1823      COMMON             /pblasd/desca, descb, descc, descx, descy
 1824      COMMON             /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
 1825     $                   ja, jb, jc, jx, jy
 1826
 1827
 1828
 1829      CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
 1830
 1831      IF( 
lsame( argnam, 
'A' ) ) 
THEN 
 1832
 1833
 1834
 1836         ia    = -1
 1837         infot = argpos + 1
 1839         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1840
 1841
 1842
 1844         ja    = -1
 1845         infot = argpos + 2
 1847         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1848
 1849
 1850
 1851         DO 10 i = 1, dlen_
 1852
 1853
 1854
 1856            desca( i ) =  -2
 1857            infot = ( ( argpos + 3 ) * descmult ) + i
 1859            CALL pchkpbe( ictxt, nout, sname, infot )
 
 1860
 1861
 1862
 1863            IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
 1864     $          ( i.EQ.lld_ ) ) THEN
 1865
 1867
 1868
 1869
 1870               IF( i.EQ.rsrc_ )
 1871     $            desca( i ) =  nprow
 1872
 1873
 1874
 1875               IF( i.EQ.csrc_ )
 1876     $            desca( i ) =  npcol
 1877
 1878
 1879
 1880               IF( i.EQ.lld_ ) THEN
 1881                  IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
 1882                     desca( i ) = 1
 1883                  ELSE
 1884                     desca( i ) = 0
 1885                  END IF
 1886               END IF
 1887
 1888               infot = ( ( argpos + 3 ) * descmult ) + i
 1890               CALL pchkpbe( ictxt, nout, sname, infot )
 
 1891
 1892            END IF
 1893
 1894   10    CONTINUE
 1895
 1896      ELSE IF( 
lsame( argnam, 
'B' ) ) 
THEN 
 1897
 1898
 1899
 1901         ib    = -1
 1902         infot = argpos + 1
 1904         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1905
 1906
 1907
 1909         jb    = -1
 1910         infot = argpos + 2
 1912         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1913
 1914
 1915
 1916         DO 20 i = 1, dlen_
 1917
 1918
 1919
 1921            descb( i ) =  -2
 1922            infot = ( ( argpos + 3 ) * descmult ) + i
 1924            CALL pchkpbe( ictxt, nout, sname, infot )
 
 1925
 1926
 1927
 1928            IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
 1929     $          ( i.EQ.lld_ ) ) THEN
 1930
 1932
 1933
 1934
 1935               IF( i.EQ.rsrc_ )
 1936     $            descb( i ) =  nprow
 1937
 1938
 1939
 1940               IF( i.EQ.csrc_ )
 1941     $            descb( i ) =  npcol
 1942
 1943
 1944
 1945               IF( i.EQ.lld_ ) THEN
 1946                  IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
 1947                     descb( i ) = 1
 1948                  ELSE
 1949                     descb( i ) = 0
 1950                  END IF
 1951               END IF
 1952
 1953               infot = ( ( argpos + 3 ) * descmult ) + i
 1955               CALL pchkpbe( ictxt, nout, sname, infot )
 
 1956
 1957            END IF
 1958
 1959   20    CONTINUE
 1960
 1961      ELSE IF( 
lsame( argnam, 
'C' ) ) 
THEN 
 1962
 1963
 1964
 1966         ic    = -1
 1967         infot = argpos + 1
 1969         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1970
 1971
 1972
 1974         jc    = -1
 1975         infot = argpos + 2
 1977         CALL pchkpbe( ictxt, nout, sname, infot )
 
 1978
 1979
 1980
 1981         DO 30 i = 1, dlen_
 1982
 1983
 1984
 1986            descc( i ) =  -2
 1987            infot = ( ( argpos + 3 ) * descmult ) + i
 1989            CALL pchkpbe( ictxt, nout, sname, infot )
 
 1990
 1991
 1992
 1993            IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
 1994     $          ( i.EQ.lld_ ) ) THEN
 1995
 1997
 1998
 1999
 2000               IF( i.EQ.rsrc_ )
 2001     $            descc( i ) =  nprow
 2002
 2003
 2004
 2005               IF( i.EQ.csrc_ )
 2006     $            descc( i ) =  npcol
 2007
 2008
 2009
 2010               IF( i.EQ.lld_ ) THEN
 2011                  IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
 2012                     descc( i ) = 1
 2013                  ELSE
 2014                     descc( i ) = 0
 2015                  END IF
 2016               END IF
 2017
 2018               infot = ( ( argpos + 3 ) * descmult ) + i
 2020               CALL pchkpbe( ictxt, nout, sname, infot )
 
 2021
 2022            END IF
 2023
 2024   30    CONTINUE
 2025
 2026      ELSE IF( 
lsame( argnam, 
'X' ) ) 
THEN 
 2027
 2028
 2029
 2031         ix    = -1
 2032         infot = argpos + 1
 2034         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2035
 2036
 2037
 2039         jx    = -1
 2040         infot = argpos + 2
 2042         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2043
 2044
 2045
 2046         DO 40 i = 1, dlen_
 2047
 2048
 2049
 2051            descx( i ) =  -2
 2052            infot = ( ( argpos + 3 ) * descmult ) + i
 2054            CALL pchkpbe( ictxt, nout, sname, infot )
 
 2055
 2056
 2057
 2058            IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
 2059     $          ( i.EQ.lld_ ) ) THEN
 2060
 2062
 2063
 2064
 2065               IF( i.EQ.rsrc_ )
 2066     $            descx( i ) =  nprow
 2067
 2068
 2069
 2070               IF( i.EQ.csrc_ )
 2071     $            descx( i ) =  npcol
 2072
 2073
 2074
 2075               IF( i.EQ.lld_ ) THEN
 2076                  IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
 2077                     descx( i ) = 1
 2078                  ELSE
 2079                     descx( i ) = 0
 2080                  END IF
 2081               END IF
 2082
 2083               infot = ( ( argpos + 3 ) * descmult ) + i
 2085               CALL pchkpbe( ictxt, nout, sname, infot )
 
 2086
 2087            END IF
 2088
 2089   40    CONTINUE
 2090
 2091
 2092
 2094         incx  =  -1
 2095         infot = argpos + 4
 2097         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2098
 2099      ELSE
 2100
 2101
 2102
 2104         iy    = -1
 2105         infot = argpos + 1
 2107         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2108
 2109
 2110
 2112         jy    = -1
 2113         infot = argpos + 2
 2115         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2116
 2117
 2118
 2119         DO 50 i = 1, dlen_
 2120
 2121
 2122
 2124            descy( i ) =  -2
 2125            infot = ( ( argpos + 3 ) * descmult ) + i
 2127            CALL pchkpbe( ictxt, nout, sname, infot )
 
 2128
 2129
 2130
 2131            IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
 2132     $          ( i.EQ.lld_ ) ) THEN
 2133
 2135
 2136
 2137
 2138               IF( i.EQ.rsrc_ )
 2139     $            descy( i ) = nprow
 2140
 2141
 2142
 2143               IF( i.EQ.csrc_ )
 2144     $            descy( i ) = npcol
 2145
 2146
 2147
 2148               IF( i.EQ.lld_ ) THEN
 2149                  IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
 2150                     descy( i ) = 1
 2151                  ELSE
 2152                     descy( i ) = 0
 2153                  END IF
 2154               END IF
 2155
 2156               infot = ( ( argpos + 3 ) * descmult ) + i
 2158               CALL pchkpbe( ictxt, nout, sname, infot )
 
 2159
 2160            END IF
 2161
 2162   50    CONTINUE
 2163
 2164
 2165
 2167         incy =  -1
 2168         infot = argpos + 4
 2170         CALL pchkpbe( ictxt, nout, sname, infot )
 
 2171
 2172      END IF
 2173
 2174      RETURN
 2175
 2176
 2177
subroutine pchkpbe(ictxt, nout, sname, infot)
 
subroutine pssetpblas(ictxt)
 
subroutine pscallsub(subptr, scode)