1 SUBROUTINE pcoptee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
9 INTEGER ICTXT, NOUT, SCODE
156 IF( scode.EQ.21 )
THEN
161 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
163 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
169 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
171 ELSE IF( scode.EQ.23 )
THEN
176 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
181 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
186 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
190 ELSE IF( scode.EQ.31 )
THEN
195 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
200 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'B', apos )
202 ELSE IF( scode.EQ.32 )
THEN
207 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
212 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
214 ELSE IF( scode.EQ.33 .OR. scode.EQ.34 .OR. scode.EQ.35 .OR.
215 $ scode.EQ.36 .OR. scode.EQ.40 )
THEN
220 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
225 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'A'
227 ELSE IF( scode.EQ.38 )
THEN
232 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
237 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
242 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
247 CALL pcchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
250 ELSE IF( scode.EQ.39 )
THEN
255 CALL pcchkopt( ictxt, nout, subptr
'A', apos )
454 SUBROUTINE pcdimee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
462 INTEGER ICTXT, NOUT, SCODE
609 IF( scode.EQ.11 .OR. scode.EQ.12 .OR. scode.EQ.13 .OR.
610 $ scode.EQ.14 .OR. scode.EQ.15 )
THEN
615 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
619 ELSE IF( scode.EQ.21 )
THEN
624 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
629 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
631 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
637 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
639 ELSE IF( scode.EQ.23 )
THEN
644 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
646 ELSE IF( scode.EQ.24 )
THEN
651 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
656 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
660 ELSE IF( scode.EQ.31 )
THEN
665 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
670 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
675 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'K', apos )
677 ELSE IF( scode.EQ.32 )
THEN
682 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
687 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
689 ELSE IF( scode.EQ.33 .OR. scode.EQ.34 .OR. scode.EQ.35 .OR.
695 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
700 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'K', apos )
702 ELSE IF( scode.EQ.37 )
THEN
707 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
712 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
714 ELSE IF( scode.EQ.38 )
THEN
719 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
724 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
726 ELSE IF( scode.EQ.39 )
THEN
731 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
736 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N'
738 ELSE IF( scode.EQ.40 )
THEN
743 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
748 CALL pcchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
935 SUBROUTINE pcvecee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
1092 IF( scode.EQ.11 )
THEN
1097 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1102 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1104 ELSE IF( scode.EQ.12 .OR. scode.EQ.15 )
THEN
1109 CALL pcchkmat( ictxt, nout, subptr, scode, sname
'X'
1111 ELSE IF( scode.EQ.13 )
THEN
1116 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1121 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1123 ELSE IF( scode.EQ.14 )
THEN
1128 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1132 ELSE IF( scode.EQ.21 )
THEN
1137 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1142 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1144 ELSE IF( scode.EQ.22 )
THEN
1149 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1154 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1156 ELSE IF( scode.EQ.23 )
THEN
1161 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1163 ELSE IF( scode.EQ.24 .OR. scode.EQ.27 )
THEN
1168 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1173 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1175 ELSE IF( scode.EQ.26 .OR. scode.EQ.27 )
THEN
1180 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1189 SUBROUTINE pcmatee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
1197 INTEGER ICTXT, NOUT, SCODE
1346 IF( scode.EQ.21 .OR. scode.EQ.23 )
THEN
1351 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1353 ELSE IF( scode.EQ.22 )
THEN
1358 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1360 ELSE IF( scode.EQ.24 .OR. scode.EQ.27 )
THEN
1365 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1367 ELSE IF( scode.EQ.25 .OR. scode.EQ.26 )
THEN
1372 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1376 ELSE IF( scode.EQ.31 )
THEN
1381 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1386 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'B', apos )
1391 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1393 ELSE IF( scode.EQ.32 .OR. scode.EQ.35 .OR. scode.EQ.36 )
THEN
1398 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1403 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'B', apos )
1408 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1410 ELSE IF( scode.EQ.33 .OR. scode.EQ.34 )
THEN
1415 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1420 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1422 ELSE IF( scode.EQ.37 )
THEN
1427 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1432 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1434 ELSE IF( scode.EQ.38 )
THEN
1439 CALL pcchkmat( ictxt, nout, subptr
'A'
1444 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'B', apos )
1446 ELSE IF( scode.EQ.39 )
THEN
1451 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1456 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1458 ELSE IF( scode.EQ.40 )
THEN
1463 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'A', apos )
1468 CALL pcchkmat( ictxt, nout, subptr, scode, sname,
'C', apos )
1570 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
1571 $ DTYPE_, IMB_, INB_, LLD_, , M_, NB_, N_,
1573 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
1575 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
1576 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
1579 parameter( one = ( 1.0e+0, 0.0e+0 ),
1586 CHARACTER*1 DIAG, SIDE, TRANSA, TRANSB, UPLO
1587 INTEGER IA, IB, IC, INCX, INCY, ISCLR, IX, IY, JA, JB,
1588 $
jc, jx, jy, kdim, mdim, ndim
1591 INTEGER DESCA( DLEN_ ), DESCB( DLEN_ ), DESCC( DLEN_ ),
1592 $ descx( dlen_ ), descy( dlen_ )
1593 COMPLEX A( 2, 2 ), B( 2, 2 ), C( 2, 2 ), X( 2 ), Y( 2 )
1594 COMMON /PBLASC/DIAG, SIDE, TRANSA, TRANSB, UPLO
1595 COMMON /pblasd/desca, descb, descc, descx, descy
1596 COMMON /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
1597 $ ja, jb,
jc, jx, jy
1598 COMMON /pblasm/a, b, c
1599 COMMON /pblasn/kdim, mdim, ndim
1600 COMMON /pblass/sclr, usclr
1630 CALL pb_descset2( desca, 2, 2, 1, 1, 1, 1, 0, 0, ictxt, 2 )
1640 CALL pb_descset2( descb, 2, 2, 1, 1, 1, 1, 0, 0, ictxt, 2 )
1650 CALL pb_descset2( descc, 2, 2, 1, 1, 1, 1, 0, 0, ictxt, 2 )
1658 CALL pb_descset2( descx, 2, 1, 1, 1, 1, 1, 0, 0, ictxt, 2 )
1667 CALL pb_descset2( descy, 2, 1, 1, 1, 1, 1, 0, 0, ictxt, 2 )
1675 SUBROUTINE pcchkmat( ICTXT, NOUT, SUBPTR, SCODE, SNAME, ARGNAM,
1685 INTEGER ARGPOS, ICTXT, NOUT, SCODE
1801 INTEGER BLOCK_CYCLIC_2D_INB, , CTXT_, DLEN_,
1802 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
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 )
1809 PARAMETER ( DESCMULT = 100 )
1812 INTEGER I, INFOT, NPROW, NPCOL, MYROW, MYCOL
1822 INTEGER IA, IB, IC, , INCY, , IX, IY
1827 COMMON /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
1834 IF( lsame( argnam,
'A' ) )
THEN
1842 CALL pchkpbe( ictxt, nout, sname, infot )
1850 CALL pchkpbe( ictxt, nout, sname, infot )
1860 infot = ( ( argpos + 3 ) * descmult ) + i
1862 CALL pchkpbe( ictxt, nout, sname, infot )
1866 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1867 $ ( i.EQ.lld_ ) )
THEN
1874 $ desca( i ) = nprow
1879 $ desca( i ) = npcol
1883 IF( i.EQ.lld_ )
THEN
1884 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
1891 infot = ( ( argpos + 3 ) * descmult ) + i
1893 CALL pchkpbe( ictxt, nout, sname, infot )
1899 ELSE IF( lsame( argnam,
'B' ) )
THEN
1907 CALL pchkpbe( ictxt, nout, sname, infot )
1915 CALL pchkpbe( ictxt, nout, sname, infot )
1925 infot = ( ( argpos + 3 ) * descmult ) + i
1927 CALL pchkpbe( ictxt, nout, sname, infot )
1931 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1932 $ ( i.EQ.lld_ ) )
THEN
1939 $ descb( i ) = nprow
1944 $ descb( i ) = npcol
1948 IF( i.EQ.lld_ )
THEN
1949 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
1956 infot = ( ( argpos + 3 ) * descmult ) + i
1958 CALL pchkpbe( ictxt, nout, sname, infot )
1964 ELSE IF( lsame( argnam,
'C' ) )
THEN
1972 CALL pchkpbe( ictxt, nout, sname, infot )
1980 CALL pchkpbe( ictxt, nout, sname, infot )
1990 infot = ( ( argpos + 3 ) * descmult ) + i
1992 CALL pchkpbe( ictxt, nout, sname, infot )
1996 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1997 $ ( i.EQ.lld_ ) )
THEN
2004 $ descc( i ) = nprow
2009 $ descc( i ) = npcol
2013 IF( i.EQ.lld_ )
THEN
2014 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2021 infot = ( ( argpos + 3 ) * descmult ) + i
2023 CALL pchkpbe( ictxt, nout, sname, infot )
2029 ELSE IF( lsame( argnam,
'X' ) )
THEN
2037 CALL pchkpbe( ictxt, nout, sname, infot )
2045 CALL pchkpbe( ictxt, nout, sname, infot )
2055 infot = ( ( argpos + 3 ) * descmult ) + i
2057 CALL pchkpbe( ictxt, nout, sname, infot )
2061 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2062 $ ( i.EQ.lld_ ) )
THEN
2069 $ descx( i ) = nprow
2078 IF( i.EQ.lld_ )
THEN
2079 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2086 infot = ( ( argpos + 3 ) * descmult ) + i
2088 CALL pchkpbe( ictxt, nout, sname, infot )
2100 CALL pchkpbe( ictxt, nout, sname, infot )
2110 CALL pchkpbe( ictxt, nout, sname, infot )
2118 CALL pchkpbe( ictxt, nout, sname, infot )
2128 infot = ( ( argpos + 3 ) * descmult ) + i
2130 CALL pchkpbe( ictxt, nout, sname, infot )
2134 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2135 $ ( i.EQ.lld_ ) )
THEN
2142 $ descy( i ) = nprow
2147 $ descy( i ) = npcol
2151 IF( i.EQ.lld_ )
THEN
2152 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2159 infot = ( ( argpos + 3 ) * descmult ) + i
2161 CALL pchkpbe( ictxt, nout, sname, infot )
2173 CALL pchkpbe( ictxt, nout, sname, infot )
2311 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2312 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2314 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
2315 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
2316 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
2317 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
2320 CHARACTER*1 DIAG, SIDE, TRANSA, TRANSB, UPLO
2321 INTEGER IA, IB, IC, INCX, INCY, ISCLR, IX, IY, JA, JB,
2322 $ JC, JX, JY, KDIM, MDIM, NDIM
2325 INTEGER DESCA( DLEN_ ), DESCB( DLEN_ ), DESCC( DLEN_ ),
2326 $ descx( dlen_ ), descy( dlen_ )
2327 COMPLEX A( 2, 2 ), B( 2, 2 ), C( 2, 2 ), X( 2 ), Y( 2 )
2328 COMMON /pblasc/diag, side, transa, transb, uplo
2329 COMMON /pblasd/desca, descb, descc, descx, descy
2330 COMMON /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
2331 $ ja, jb, jc, jx, jy
2332 COMMON /pblasm/a, b, c
2333 COMMON /pblasn/kdim, mdim, ndim
2334 COMMON /pblass/sclr, usclr
2341 IF( scode.EQ.11 )
THEN
2343 CALL subptr( ndim, x, ix, jx, descx, incx, y, iy, jy, descy,
2346 ELSE IF( scode.EQ.12 )
THEN
2348 CALL subptr( ndim, sclr, x, ix, jx, descx, incx )
2350 ELSE IF( scode.EQ.13 )
THEN
2352 CALL subptr( ndim, sclr, x, ix, jx, descx, incx, y, iy, jy,
2355 ELSE IF( scode.EQ.14 )
THEN
2357 CALL subptr( ndim, sclr, isclr, x, ix, jx, descx, incx )
2359 ELSE IF( scode.EQ.15 )
THEN
2361 CALL subptr( ndim, usclr,
2365 ELSE IF( scode.EQ.21 )
THEN
2367 CALL subptr( transa, mdim, ndim, sclr, a, ia, ja, desca, x, ix,
2368 $ jx, descx, incx, sclr, y, iy, jy, descy, incy )
2370 ELSE IF( scode.EQ.22 )
THEN
2372 CALL subptr( uplo, ndim, sclr, a, ia, ja, desca, x, ix, jx,
2373 $ descx, incx, sclr, y, iy, jy, descy, incy )
2375 ELSE IF( scode.EQ.23 )
THEN
2377 CALL subptr( uplo, transa, diag, ndim, a, ia, ja, desca, x, ix,
2380 ELSE IF( scode.EQ.24 )
THEN
2382 CALL subptr( mdim, ndim, sclr, x, ix, jx, descx, incx, y, iy,
2383 $ jy, descy, incy, a, ia, ja, desca )
2385 ELSE IF( scode.EQ.25 )
THEN
2387 CALL subptr( uplo, ndim, sclr, x, ix, jx, descx
2390 ELSE IF( scode.EQ.26 )
THEN
2392 CALL subptr( uplo, ndim, usclr, x, ix, jx, descx, incx, a, ia,
2395 ELSE IF( scode.EQ.27 )
THEN
2397 CALL subptr( uplo, ndim, sclr, x, ix, jx, descx, incx, y, iy,
2398 $ jy, descy, incy, a, ia, ja, desca )
2402 ELSE IF( scode.EQ.31 )
THEN
2404 CALL subptr( transa, transb, mdim, ndim, kdim, sclr, a, ia, ja,
2405 $ desca, b, ib, jb, descb, sclr, c, ic, jc, descc )
2407 ELSE IF( scode.EQ.32 )
THEN
2409 CALL subptr( side, uplo, mdim, ndim, sclr, a, ia, ja, desca, b,
2410 $ ib, jb, descb, sclr, c, ic, jc, descc )
2412 ELSE IF( scode.EQ.33 )
THEN
2414 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2415 $ sclr, c, ic, jc, descc )
2417 ELSE IF( scode.EQ.34 )
THEN
2419 CALL subptr( uplo, transa, ndim, kdim, usclr, a, ia, ja, desca,
2420 $ usclr, c, ic, jc, descc )
2422 ELSE IF( scode.EQ.35 )
THEN
2424 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2425 $ b, ib, jb, descb, sclr, c, ic, jc, descc )
2427 ELSE IF( scode.EQ.36 )
THEN
2429 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2430 $ b, ib, jb, descb, usclr, c, ic, jc, descc )
2432 ELSE IF( scode.EQ.37 )
THEN
2434 CALL subptr( mdim, ndim, sclr, a, ia, ja, desca, sclr, c, ic,
2437 ELSE IF( scode.EQ.38 )
THEN
2439 CALL subptr( side, uplo, transa, diag, mdim, ndim, sclr, a, ia,
2440 $ ja, desca, b, ib, jb, descb )
2442 ELSE IF( scode.EQ.39 )
THEN
2444 CALL subptr( transa, mdim, ndim, sclr, a, ia, ja, desca, sclr,
2445 $ c, ic, jc, descc )
2447 ELSE IF( scode.EQ.40 )
THEN
2449 CALL subptr( uplo, transa, mdim, ndim, sclr, a, ia, ja, desca,
2450 $ sclr, c, ic, jc, descc )
2580 SUBROUTINE pcchkvin( ERRMAX, N, X, PX, IX, JX, DESCX, INCX,
2589 INTEGER , INFO, IX, JX, N
2594 COMPLEX PX( * ), X( * )
2718 INTEGER , CSRC_, CTXT_, DLEN_,
2719 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2721 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
2722 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
2723 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
2724 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
2726 PARAMETER ( ZERO = 0.0e+0 )
2729 LOGICAL COLREP, ROWREP
2730 INTEGER , , ICTXT, ICURCOL, ICURROW, IIX, IN, IXCOL,
2731 $ IXROW, J, JB, JJX, JN, KK, LDPX, LDX, LL,
2732 $ MYCOL, MYROW, NPCOL, NPROW
2743 INTRINSIC abs, aimag,
max,
min, mod, real
2755 ictxt = descx( ctxt_ )
2758 eps = pslamch( ictxt,
'eps' )
2760 CALL pb_infog2l( ix, jx, descx, nprow, npcol, myrow, mycol, iix,
2761 $ jjx, ixrow, ixcol )
2764 ldpx = descx( lld_ )
2765 rowrep = ( ixrow.EQ.-1 )
2766 colrep = ( ixcol.EQ.-1 )
2770 IF( ( myrow.EQ.ixrow .OR. rowrep ) .AND.
2771 $ ( mycol.EQ.ixcol .OR. colrep ) )
2772 $
CALL pcerrset( err, errmax, x( ix+(jx-1)*ldx ),
2773 $ px( iix+(jjx-1)*ldpx ) )
2775 ELSE IF( incx.EQ.descx( m_ ) )
THEN
2779 jb = descx( inb_ ) - jx + 1
2781 $ jb = ( ( -jb ) / descx( nb_ ) + 1 ) * descx( nb_ ) + jb
2785 IF( myrow.EQ.ixrow .OR. rowrep )
THEN
2788 IF( mycol.EQ.icurcol .OR. colrep )
THEN
2790 CALL pcerrset( err, errmax, x( ix+(j-1)*ldx ),
2791 $ px( iix+(jjx-1)*ldpx ) )
2795 icurcol = mod( icurcol+1, npcol )
2797 DO 30 j = jn+1, jx+n-1, descx( nb_ )
2798 jb =
min( jx+n-j, descx( nb_ ) )
2800 IF( mycol.EQ.icurcol .OR. colrep )
THEN
2803 CALL pcerrset( err, errmax, x( ix+(j+kk-1)*ldx ),
2804 $ px( iix+(jjx+kk-1)*ldpx ) )
2811 icurcol = mod( icurcol+1, npcol )
2821 ib = descx( imb_ ) - ix + 1
2823 $ ib = ( ( -ib ) / descx( mb_ ) + 1 ) * descx( mb_ ) + ib
2827 IF( mycol.EQ.ixcol .OR. colrep )
THEN
2830 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
2832 CALL pcerrset( err, errmax, x( i+(jx-1)*ldx ),
2833 $ px( iix+(jjx-1)*ldpx ) )
2837 icurrow = mod( icurrow+1, nprow )
2839 DO 60 i = in+1, ix+n-1, descx( mb_ )
2840 ib =
min( ix+n-i, descx( mb_ ) )
2842 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
2845 CALL pcerrset( err, errmax, x( i+kk+(jx-1)*ldx ),
2846 $ px( iix+kk+(jjx-1)*ldpx ) )
2853 icurrow = mod( icurrow+1, nprow )
2861 CALL sgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
2864 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
2866 ELSE IF( errmax.GT.eps )
THEN
2883 INTEGER INCX, INFO, IX, JX, N
2887 COMPLEX PX( * ), X( * )
3007 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_,
3008 $ DTYPE_, IMB_, , LLD_, MB_, M_, NB_, N_,
3010 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
3012 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3013 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3015 PARAMETER ( = 0.0e+0 )
3018 LOGICAL COLREP, ROWREP
3019 INTEGER I, IB, ICTXT, ICURCOL, ICURROW, II, IMBX, INBX,
3020 $ J, JB, JJ, KK, LDPX, LDX, LL, MBX, MPALL,
3021 $ MYCOL, MYCOLDIST, MYROW, MYROWDIST, NBX, NPCOL,
3023 REAL EPS, ERR, ERRMAX
3026 EXTERNAL BLACS_GRIDINFO, PCERRSET, SGAMX2D
3031 EXTERNAL PSLAMCH, PB_NUMROC
3034 INTRINSIC abs, aimag,
max,
min, mod, real
3043 IF( ( descx( m_ ).LE.0 ).OR.( descx( n_ ).LE.0 ) )
3048 ictxt = descx( ctxt_ )
3049 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
3051 eps = pslamch( ictxt,
'eps' )
3053 mpall = pb_numroc( descx( m_ ), 1, descx( imb_ ), descx( mb_ ),
3054 $ myrow, descx( rsrc_ ), nprow )
3055 nqall = pb_numroc( descx( n_ ), 1, descx( inb_ ), descx( nb_ ),
3056 $ mycol, descx( csrc_ ), npcol )
3061 ldpx = descx( lld_ )
3062 icurrow = descx( rsrc_ )
3063 icurcol = descx( csrc_ )
3064 rowrep = ( icurrow.EQ.-1 )
3065 colrep = ( icurcol.EQ.-1 )
3066 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3067 imbx = descx( imb_ )
3071 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3072 inbx = descx( inb_ )
3079 myrowdist = mod( myrow - icurrow + nprow, nprow )
3084 mycoldist = mod( mycol - icurcol + npcol, npcol )
3089 IF( incx.EQ.descx( m_ ) )
THEN
3093 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3096 IF( mycoldist.EQ.0 )
THEN
3099 j = descx( inb_ ) + ( mycoldist - 1 ) * nbx + 1
3101 jb =
min(
max( 0, descx( n_ ) - j + 1 ), inbx )
3102 ib =
min( descx( m_ ), descx( imb_ ) )
3106 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR. j+kk.GT.jx+n-1 )
3107 $
CALL pcerrset( err, errmax,
3108 $ x( i+ll+(j+kk-1)*ldx ),
3109 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3115 j = j + inbx + ( npcol - 1 ) * nbx
3118 DO 50 jj = inbx+1, nqall, nbx
3119 jb =
min( nqall-jj+1, nbx )
3123 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3125 $
CALL pcerrset( err, errmax,
3126 $ x( i+ll+(j+kk-1)*ldx ),
3127 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3143 icurrow = mod( icurrow + 1, nprow )
3145 DO 110 i = descx( imb_ ) + 1, descx( m_ ), mbx
3146 ib =
min( descx( m_ ) - i + 1, mbx )
3148 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3150 IF( mycoldist.EQ.0 )
THEN
3153 j = descx( inb_ ) + ( mycoldist - 1 ) * nbx + 1
3157 jb =
min(
max( 0, descx( n_ ) - j + 1 ), inbx )
3160 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3162 $
CALL pcerrset( err, errmax,
3163 $ x( i+ll+(j+kk-1)*ldx ),
3164 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3170 j = j + inbx + ( npcol - 1 ) * nbx
3173 DO 100 jj = inbx+1, nqall, nbx
3178 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3180 $
CALL pcerrset( err, errmax,
3181 $ x( i+ll+(j+kk-1)*ldx ),
3182 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3198 icurrow = mod( icurrow + 1, nprow )
3206 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3209 IF( myrowdist.EQ.0 )
THEN
3212 i = descx( imb_ ) + ( myrowdist
3214 ib =
min(
max( 0, descx( m_ ) - i + 1 ), imbx )
3215 jb =
min( descx( n_ ), descx( inb_ ) )
3219 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR. i+ll.GT.ix+n-1 )
3220 $
CALL pcerrset( err, errmax,
3221 $ x( i+ll+(j+kk-1)*ldx ),
3222 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3228 i = i + imbx + ( nprow - 1 ) * mbx
3231 DO 160 ii = imbx+1, mpall, mbx
3232 ib =
min( mpall-ii+1, mbx )
3236 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3238 $
CALL pcerrset( err, errmax,
3239 $ x( i+ll+(j+kk-1)*ldx ),
3240 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3256 icurcol = mod( icurcol + 1, npcol )
3258 DO 220 j = descx( inb_ ) + 1, descx( n_ ), nbx
3259 jb =
min( descx( n_ ) - j + 1, nbx )
3261 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3263 IF( myrowdist.EQ.0 )
THEN
3270 ib =
min(
max( 0, descx( m_ ) - i + 1 ), imbx )
3273 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3275 $
CALL pcerrset( err, errmax,
3276 $ x( i+ll+(j+kk-1)*ldx ),
3277 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3283 i = i + imbx + ( nprow - 1 ) * mbx
3286 DO 210 ii = imbx+1, mpall, mbx
3287 ib =
min( mpall-ii+1, mbx )
3291 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3293 $
CALL pcerrset( err, errmax,
3294 $ x( i+ll+(j+kk-1)*ldx ),
3295 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3311 icurcol = mod( icurcol + 1, npcol )
3317 CALL sgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll
3320 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3322 ELSE IF( errmax.GT.eps )
THEN
3331 SUBROUTINE pcchkmin( ERRMAX, M, N, A, PA, IA, JA, DESCA, INFO )
3339 INTEGER IA, INFO, JA, M, N
3344 COMPLEX PA( * ), A( * )
3467 INTEGER BLOCK_CYCLIC_2D_INB, , CTXT_, DLEN_,
3468 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3470 PARAMETER ( = 2, dlen_ = 11,
3471 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3472 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3473 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3475 PARAMETER ( ZERO = 0.0e+0 )
3478 LOGICAL COLREP, ROWREP
3479 INTEGER H, I, IACOL, IAROW, IB, ICTXT, ICURCOL,
3480 $ ICURROW, II, IIA, IN, J, JB, JJ, JJA, JN, K,
3481 $ KK, LDA, LDPA, LL, MYCOL, MYROW, NPCOL, NPROW
3492 INTRINSIC abs, aimag,
max,
min, mod, real
3501 IF( ( m.EQ.0 ).OR.( n.EQ.0 ) )
3506 ictxt = desca( ctxt_ )
3509 eps = pslamch( ictxt,
'eps' )
3511 CALL pb_infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia,
3512 $ jja, iarow, iacol )
3517 ldpa = desca( lld_ )
3520 rowrep = ( iarow.EQ.-1 )
3521 colrep = ( iacol.EQ.-1 )
3525 jb = desca( inb_ ) - ja + 1
3527 $ jb = ( ( -jb ) / desca( nb_ ) + 1 ) * desca( nb_ ) + jb
3531 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3534 ib = desca( imb_ ) - ia + 1
3536 $ ib = ( ( -ib ) / desca( mb_ ) + 1 ) * desca( mb_ ) + ib
3539 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3541 CALL pcerrset( err, errmax, a( ia+k+(ja+h-1)*lda ),
3542 $ pa( ii+k+(jj+h-1)*ldpa ) )
3546 icurrow = mod( icurrow+1, nprow )
3550 DO 30 i = in+1, ia+m-1, desca( mb_ )
3551 ib =
min( desca( mb_ ), ia+m-i )
3552 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3554 CALL pcerrset( err, errmax, a( i+k+(ja+h-1)*lda ),
3555 $ pa( ii+k+(jj+h-1)*ldpa ) )
3559 icurrow = mod( icurrow+1, nprow )
3570 icurcol = mod( icurcol+1, npcol )
3574 DO 90 j = jn+1, ja+n-1, desca( nb_ )
3575 jb =
min( desca( nb_ ), ja+n-j )
3576 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3578 ib = desca( imb_ ) - ia + 1
3580 $ ib = ( ( -ib ) / desca( mb_ ) + 1 )*desca( mb_ ) + ib
3583 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3585 CALL pcerrset( err, errmax, a( ia+k+(j+h-1)*lda ),
3586 $ pa( ii+k+(jj+h-1)*ldpa ) )
3590 icurrow = mod( icurrow+1, nprow )
3594 DO 70 i = in+1, ia+m-1, desca( mb_ )
3595 ib =
min( desca( mb_ ), ia+m-i )
3596 IF( myrow.EQ.icurrow .OR. rowrep
THEN
3604 icurrow = mod( icurrow+1, nprow )
3614 icurcol = mod( icurcol
3618 CALL sgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
3621 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3623 ELSE IF( errmax.GT.eps )
THEN
3640 INTEGER IA, INFO, JA, M, N
3644 COMPLEX A( * ), PA( * )
3763 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3764 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3766 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
3767 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3768 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3771 PARAMETER ( ZERO = 0.0e+0 )
3774 LOGICAL COLREP, ROWREP
3775 INTEGER , IB, ICTXT, ICURCOL, II, IMBA, , JB, JJ, KK,
3776 $ , LDPA, LL, MPALL, MYCOL, MYROW, MYROWDIST,
3778 REAL EPS, ERR, ERRMAX
3798 IF( ( desca( m_ ).LE.0 ).OR.( desca( n_ ).LE.0 ) )
3803 ictxt = desca( ctxt_ )
3806 eps = pslamch( ictxt,
'eps' )
3808 mpall = pb_numroc( desca( m_ ), 1, desca( imb_ ), desca( mb_ ),
3809 $ myrow, desca( rsrc_ ), nprow )
3812 ldpa = desca( lld_ )
3816 rowrep = ( desca( rsrc_ ).EQ.-1 )
3817 colrep = ( desca( csrc_ ).EQ.-1 )
3818 icurcol = desca( csrc_ )
3819 IF( myrow.EQ.desca( rsrc_ ) .OR. rowrep )
THEN
3820 imba = desca( imb_ )
3827 myrowdist = mod( myrow - desca( rsrc_ ) + nprow, nprow )
3830 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3833 IF( myrowdist.EQ.0 )
THEN
3836 i = desca( imb_ ) + ( myrowdist - 1 ) * desca( mb_ ) + 1
3838 ib =
min(
max( 0, desca( m_ ) - i + 1 ), imba )
3839 jb =
min( desca( n_ ), desca( inb_ ) )
3843 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3844 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3845 $
CALL pcerrset( err, errmax, a( i+ll+(j+kk-1)*lda ),
3846 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3852 i = i + imba + ( nprow - 1 ) * desca( mb_
3855 DO 50 ii = imba + 1, mpall, desca( mb_ )
3856 ib =
min( mpall-ii+1, desca( mb_ ) )
3860 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3861 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3863 $ a( i+ll+(j+kk-1)*lda ),
3864 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3869 i = i + desca( mb_ )
3871 i = i + nprow * desca( mb_ )
3880 icurcol = mod( icurcol + 1, npcol )
3882 DO 110 j = desca( inb_ ) + 1, desca( n_ ), desca( nb_ )
3883 jb =
min( desca( n_ ) - j + 1, desca( nb_ ) )
3885 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3887 IF( myrowdist.EQ.0 )
THEN
3890 i = desca( imb_ ) + ( myrowdist - 1 ) * desca( mb_ ) + 1
3894 ib =
min(
max( 0, desca( m_ ) - i + 1 ), imba )
3897 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3898 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3900 $ a( i+ll+(j+kk-1)*lda ),
3911 ib =
min( mpall-ii+1, desca( mb_ ) )
3915 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3916 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3918 $ a( i+ll+(j+kk-1)*lda ),
3924 i = i + desca( mb_ )
3926 i = i + nprow * desca( mb_
3935 icurcol = mod( icurcol + 1, npcol )
3939 CALL sgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
3942 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3944 ELSE IF( errmax.GT.eps )
THEN
4169 SUBROUTINE pcmvch( ICTXT, TRANS, M, N, ALPHA, A, IA, JA, DESCA,
4170 $ X, IX, JX, DESCX, INCX, BETA, Y, PY, IY, JY,
4171 $ DESCY, INCY, G, ERR, INFO )
4180 INTEGER IA, ICTXT, INCX, INCY, INFO, IX, IY, JA, JX,
4186 INTEGER DESCA( * ), DESCX( * ), DESCY( * )
4188 COMPLEX A( * ), PY( * ), X( * ), Y( * )
4369 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
4370 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, , N_,
4372 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
4373 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
4374 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
4375 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
4377 parameter( rzero = 0.0e+0, rone = 1.0e+0 )
4379 PARAMETER ( ZERO = ( 0.0e+0, 0.0e+0 ),
4380 $ one = ( 1.0e+0, 0.0e+0 ) )
4383 LOGICAL COLREP, CTRAN, ROWREP, TRAN
4384 INTEGER I, IB, ICURCOL, ICURROW, IIY, IN, IOFFA, IOFFX,
4386 $ ldpy, ldx, ldy, ml, mycol, myrow,
nl, npcol,
4388 REAL EPS, ERRI, GTMP
4389 COMPLEX C, TBETA, YTMP
4397 EXTERNAL lsame, pslamch
4400 INTRINSIC abs, aimag, conjg,
max,
min, mod, real, sqrt
4404 abs1( c ) = abs( real( c ) ) + abs( aimag( c ) )
4410 eps = pslamch( ictxt,
'eps' )
4412 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
4418 tran = lsame( trans, 't
' )
4419 CTRAN = LSAME( TRANS, 'c
' )
4420.OR.
IF( TRANCTRAN ) THEN
4428 LDA = MAX( 1, DESCA( M_ ) )
4429 LDX = MAX( 1, DESCX( M_ ) )
4430 LDY = MAX( 1, DESCY( M_ ) )
4436 IOFFY = IY + ( JY - 1 ) * LDY
4440 IOFFX = IX + ( JX - 1 ) * LDX
4442 IOFFA = IA + ( JA + I - 2 ) * LDA
4444 YTMP = YTMP + A( IOFFA ) * X( IOFFX )
4445 GTMP = GTMP + ABS1( A( IOFFA ) ) * ABS1( X( IOFFX ) )
4447 IOFFX = IOFFX + INCX
4449 ELSE IF( CTRAN )THEN
4450 IOFFA = IA + ( JA + I - 2 ) * LDA
4452 YTMP = YTMP + CONJG( A( IOFFA ) ) * X( IOFFX )
4453 GTMP = GTMP + ABS1( A( IOFFA ) ) * ABS1( X( IOFFX ) )
4455 IOFFX = IOFFX + INCX
4458 IOFFA = IA + I - 1 + ( JA - 1 ) * LDA
4460 YTMP = YTMP + A( IOFFA ) * X( IOFFX )
4461 GTMP = GTMP + ABS1( A( IOFFA ) ) * ABS1( X( IOFFX ) )
4463 IOFFX = IOFFX + INCX
4466 G( I ) = ABS1( ALPHA )*GTMP + ABS1( TBETA )*ABS1( Y( IOFFY ) )
4467 Y( IOFFY ) = ALPHA * YTMP + TBETA * Y( IOFFY )
4468 IOFFY = IOFFY + INCY
4475 LDPY = DESCY( LLD_ )
4476 IOFFY = IY + ( JY - 1 ) * LDY
4477 CALL PB_INFOG2L( IY, JY, DESCY, NPROW, NPCOL, MYROW, MYCOL, IIY,
4478 $ JJY, IYROW, IYCOL )
4481.EQ.
ROWREP = ( IYROW-1 )
4482.EQ.
COLREP = ( IYCOL-1 )
4484.EQ.
IF( INCYDESCY( M_ ) ) THEN
4488 JB = DESCY( INB_ ) - JY + 1
4490 $ JB = ( ( -JB ) / DESCY( NB_ ) + 1 ) * DESCY( NB_ ) + JB
4496.EQ..OR..AND.
IF( ( MYROWICURROW ROWREP )
4497.EQ..OR.
$ ( MYCOLICURCOL COLREP ) ) THEN
4498 ERRI = ABS( PY( IIY+(JJY-1)*LDPY ) - Y( IOFFY ) ) / EPS
4499.NE.
IF( G( J-JY+1 )RZERO )
4500 $ ERRI = ERRI / G( J-JY+1 )
4501 ERR = MAX( ERR, ERRI )
4502.GE.
IF( ERR*SQRT( EPS )RONE )
4507 IOFFY = IOFFY + INCY
4511 ICURCOL = MOD( ICURCOL+1, NPCOL )
4513 DO 70 J = JN+1, JY+ML-1, DESCY( NB_ )
4514 JB = MIN( JY+ML-J, DESCY( NB_ ) )
4518.EQ..OR..AND.
IF( ( MYROWICURROW ROWREP )
4519.EQ..OR.
$ ( MYCOLICURCOL COLREP ) ) THEN
4520 ERRI = ABS( PY( IIY+(JJY-1)*LDPY ) - Y( IOFFY ) )/EPS
4521.NE.
IF( G( J+KK-JY+1 )RZERO )
4522 $ ERRI = ERRI / G( J+KK-JY+1 )
4523 ERR = MAX( ERR, ERRI )
4524.GE.
IF( ERR*SQRT( EPS )RONE )
4529 IOFFY = IOFFY + INCY
4533 ICURCOL = MOD( ICURCOL+1, NPCOL )
4541 IB = DESCY( IMB_ ) - IY + 1
4543 $ IB = ( ( -IB ) / DESCY( MB_ ) + 1 ) * DESCY( MB_ ) + IB
4549.EQ..OR..AND.
IF( ( MYROWICURROW ROWREP )
4550.EQ..OR.
$ ( MYCOLICURCOL COLREP ) ) THEN
4551 ERRI = ABS( PY( IIY+(JJY-1)*LDPY ) - Y( IOFFY ) ) / EPS
4552.NE.
IF( G( I-IY+1 )RZERO )
4553 $ ERRI = ERRI / G( I-IY+1 )
4554 ERR = MAX( ERR, ERRI )
4555.GE.
IF( ERR*SQRT( EPS )RONE )
4560 IOFFY = IOFFY + INCY
4564 ICURROW = MOD( ICURROW+1, NPROW )
4566 DO 100 I = IN+1, IY+ML-1, DESCY( MB_ )
4567 IB = MIN( IY+ML-I, DESCY( MB_ ) )
4571.EQ..OR..AND.
IF( ( MYROWICURROW ROWREP )
4572.EQ..OR.
$ ( MYCOLICURCOL COLREP ) ) THEN
4573 ERRI = ABS( PY( IIY+(JJY-1)*LDPY ) - Y( IOFFY ) )/EPS
4574.NE.
IF( G( I+KK-IY+1 )RZERO )
4575 $ ERRI = ERRI / G( I+KK-IY+1 )
4576 ERR = MAX( ERR, ERRI )
4577.GE.
IF( ERR*SQRT( EPS )RONE )
4582 IOFFY = IOFFY + INCY
4586 ICURROW = MOD( ICURROW+1, NPROW )
4594 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, INFO, 1, -1, MYCOL )
4595 CALL SGAMX2D( ICTXT, 'all
', ' ', 1, 1, ERR, 1, I, J, -1, -1,