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)