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 pzcallsub(subptr, scode)
 
subroutine pzsetpblas(ictxt)