1677
1678
1679
1680
1681
1682
1683
1684 CHARACTER*1 ARGNAM
1685 INTEGER ARGPOS, ICTXT, NOUT, SCODE
1686
1687
1688 CHARACTER*(*) SNAME
1689
1690
1691 EXTERNAL subptr
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
1799
1800
1801 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
1802 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
1803 $ RSRC_
1804 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
1805 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
1806 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
1807 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
1808 INTEGER DESCMULT
1809 parameter( descmult = 100 )
1810
1811
1812 INTEGER I, INFOT, NPROW, NPCOL, MYROW, MYCOL
1813
1814
1816
1817
1818 LOGICAL LSAME
1820
1821
1822 INTEGER IA, IB, IC, INCX, INCY, ISCLR, IX, IY, JA, JB,
1823 $ JC, JX, JY
1824 INTEGER DESCA( DLEN_ ), DESCB( DLEN_ ), DESCC( DLEN_ ),
1825 $ DESCX( DLEN_ ), DESCY( DLEN_ )
1826 COMMON /pblasd/desca, descb, descc, descx, descy
1827 COMMON /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
1828 $ ja, jb, jc, jx, jy
1829
1830
1831
1832 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
1833
1834 IF(
lsame( argnam,
'A' ) )
THEN
1835
1836
1837
1839 ia = -1
1840 infot = argpos + 1
1842 CALL pchkpbe( ictxt, nout, sname, infot )
1843
1844
1845
1847 ja = -1
1848 infot = argpos + 2
1850 CALL pchkpbe( ictxt, nout, sname, infot )
1851
1852
1853
1854 DO 10 i = 1, dlen_
1855
1856
1857
1859 desca( i ) = -2
1860 infot = ( ( argpos + 3 ) * descmult ) + i
1862 CALL pchkpbe( ictxt, nout, sname, infot )
1863
1864
1865
1866 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1867 $ ( i.EQ.lld_ ) ) THEN
1868
1870
1871
1872
1873 IF( i.EQ.rsrc_ )
1874 $ desca( i ) = nprow
1875
1876
1877
1878 IF( i.EQ.csrc_ )
1879 $ desca( i ) = npcol
1880
1881
1882
1883 IF( i.EQ.lld_ ) THEN
1884 IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
1885 desca( i ) = 1
1886 ELSE
1887 desca( i ) = 0
1888 END IF
1889 END IF
1890
1891 infot = ( ( argpos + 3 ) * descmult ) + i
1893 CALL pchkpbe( ictxt, nout, sname, infot )
1894
1895 END IF
1896
1897 10 CONTINUE
1898
1899 ELSE IF(
lsame( argnam,
'B' ) )
THEN
1900
1901
1902
1904 ib = -1
1905 infot = argpos + 1
1907 CALL pchkpbe( ictxt, nout, sname, infot )
1908
1909
1910
1912 jb = -1
1913 infot = argpos + 2
1915 CALL pchkpbe( ictxt, nout, sname, infot )
1916
1917
1918
1919 DO 20 i = 1, dlen_
1920
1921
1922
1924 descb( i ) = -2
1925 infot = ( ( argpos + 3 ) * descmult ) + i
1927 CALL pchkpbe( ictxt, nout, sname, infot )
1928
1929
1930
1931 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1932 $ ( i.EQ.lld_ ) ) THEN
1933
1935
1936
1937
1938 IF( i.EQ.rsrc_ )
1939 $ descb( i ) = nprow
1940
1941
1942
1943 IF( i.EQ.csrc_ )
1944 $ descb( i ) = npcol
1945
1946
1947
1948 IF( i.EQ.lld_ ) THEN
1949 IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
1950 descb( i ) = 1
1951 ELSE
1952 descb( i ) = 0
1953 END IF
1954 END IF
1955
1956 infot = ( ( argpos + 3 ) * descmult ) + i
1958 CALL pchkpbe( ictxt, nout, sname, infot )
1959
1960 END IF
1961
1962 20 CONTINUE
1963
1964 ELSE IF(
lsame( argnam,
'C' ) )
THEN
1965
1966
1967
1969 ic = -1
1970 infot = argpos + 1
1972 CALL pchkpbe( ictxt, nout, sname, infot )
1973
1974
1975
1977 jc = -1
1978 infot = argpos + 2
1980 CALL pchkpbe( ictxt, nout, sname, infot )
1981
1982
1983
1984 DO 30 i = 1, dlen_
1985
1986
1987
1989 descc( i ) = -2
1990 infot = ( ( argpos + 3 ) * descmult ) + i
1992 CALL pchkpbe( ictxt, nout, sname, infot )
1993
1994
1995
1996 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1997 $ ( i.EQ.lld_ ) ) THEN
1998
2000
2001
2002
2003 IF( i.EQ.rsrc_ )
2004 $ descc( i ) = nprow
2005
2006
2007
2008 IF( i.EQ.csrc_ )
2009 $ descc( i ) = npcol
2010
2011
2012
2013 IF( i.EQ.lld_ ) THEN
2014 IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
2015 descc( i ) = 1
2016 ELSE
2017 descc( i ) = 0
2018 END IF
2019 END IF
2020
2021 infot = ( ( argpos + 3 ) * descmult ) + i
2023 CALL pchkpbe( ictxt, nout, sname, infot )
2024
2025 END IF
2026
2027 30 CONTINUE
2028
2029 ELSE IF(
lsame( argnam,
'X' ) )
THEN
2030
2031
2032
2034 ix = -1
2035 infot = argpos + 1
2037 CALL pchkpbe( ictxt, nout, sname, infot )
2038
2039
2040
2042 jx = -1
2043 infot = argpos + 2
2045 CALL pchkpbe( ictxt, nout, sname, infot )
2046
2047
2048
2049 DO 40 i = 1, dlen_
2050
2051
2052
2054 descx( i ) = -2
2055 infot = ( ( argpos + 3 ) * descmult ) + i
2057 CALL pchkpbe( ictxt, nout, sname, infot )
2058
2059
2060
2061 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2062 $ ( i.EQ.lld_ ) ) THEN
2063
2065
2066
2067
2068 IF( i.EQ.rsrc_ )
2069 $ descx( i ) = nprow
2070
2071
2072
2073 IF( i.EQ.csrc_ )
2074 $ descx( i ) = npcol
2075
2076
2077
2078 IF( i.EQ.lld_ ) THEN
2079 IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
2080 descx( i ) = 1
2081 ELSE
2082 descx( i ) = 0
2083 END IF
2084 END IF
2085
2086 infot = ( ( argpos + 3 ) * descmult ) + i
2088 CALL pchkpbe( ictxt, nout, sname, infot )
2089
2090 END IF
2091
2092 40 CONTINUE
2093
2094
2095
2097 incx = -1
2098 infot = argpos + 4
2100 CALL pchkpbe( ictxt, nout, sname, infot )
2101
2102 ELSE
2103
2104
2105
2107 iy = -1
2108 infot = argpos + 1
2110 CALL pchkpbe( ictxt, nout, sname, infot )
2111
2112
2113
2115 jy = -1
2116 infot = argpos + 2
2118 CALL pchkpbe( ictxt, nout, sname, infot )
2119
2120
2121
2122 DO 50 i = 1, dlen_
2123
2124
2125
2127 descy( i ) = -2
2128 infot = ( ( argpos + 3 ) * descmult ) + i
2130 CALL pchkpbe( ictxt, nout, sname, infot )
2131
2132
2133
2134 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2135 $ ( i.EQ.lld_ ) ) THEN
2136
2138
2139
2140
2141 IF( i.EQ.rsrc_ )
2142 $ descy( i ) = nprow
2143
2144
2145
2146 IF( i.EQ.csrc_ )
2147 $ descy( i ) = npcol
2148
2149
2150
2151 IF( i.EQ.lld_ ) THEN
2152 IF( myrow.EQ.0 .AND.mycol.EQ.0 ) THEN
2153 descy( i ) = 1
2154 ELSE
2155 descy( i ) = 0
2156 END IF
2157 END IF
2158
2159 infot = ( ( argpos + 3 ) * descmult ) + i
2161 CALL pchkpbe( ictxt, nout, sname, infot )
2162
2163 END IF
2164
2165 50 CONTINUE
2166
2167
2168
2170 incy = -1
2171 infot = argpos + 4
2173 CALL pchkpbe( ictxt, nout, sname, infot )
2174
2175 END IF
2176
2177 RETURN
2178
2179
2180
subroutine pchkpbe(ictxt, nout, sname, infot)
subroutine pccallsub(subptr, scode)
subroutine pcsetpblas(ictxt)