1 SUBROUTINE pdoptee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
9 INTEGER ICTXT, NOUT, SCODE
156 IF( scode.EQ.21 )
THEN
161 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
163 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
169 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
171 ELSE IF( scode.EQ.23 )
THEN
176 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
181 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
186 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
190 ELSE IF( scode.EQ.31 )
THEN
195 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
200 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'B', apos )
202 ELSE IF( scode.EQ.32 )
THEN
207 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
212 CALL pdchkopt( 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 pdchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
225 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
227 ELSE IF( scode.EQ.38 )
THEN
232 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
237 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
242 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
247 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
250 ELSE IF( scode.EQ.39 )
THEN
255 CALL pdchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
454 SUBROUTINE pddimee( 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 pdchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
619 ELSE IF( scode.EQ.21 )
THEN
624 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
631 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
637 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
639 ELSE IF( scode.EQ.23 )
THEN
644 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
646 ELSE IF( scode.EQ.24 )
THEN
651 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
656 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
660 ELSE IF( scode.EQ.31 )
THEN
665 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
670 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
675 CALL pdchkdim( ictxt, nout, subptr, scode, sname,
'K', apos )
677 ELSE IF( scode.EQ.32 )
THEN
682 CALL pdchkdim( ictxt, nout, subptr, scode, sname, 'm
', APOS )
687 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
689.EQ..OR..EQ..OR..EQ..OR.
ELSE IF( SCODE33 SCODE34 SCODE35
695 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
700 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'k
', APOS )
702.EQ.
ELSE IF( SCODE37 ) THEN
707 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'm
', APOS )
712 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
714.EQ.
ELSE IF( SCODE38 ) THEN
719 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'm
', APOS )
724 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
726.EQ.
ELSE IF( SCODE39 ) THEN
731 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'm
', APOS )
736 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
738.EQ.
ELSE IF( SCODE40 ) THEN
743 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'm
', APOS )
748 CALL PDCHKDIM( ICTXT, NOUT, SUBPTR, SCODE, SNAME, 'n
', APOS )
1672 SUBROUTINE pdchkmat( ICTXT, NOUT, SUBPTR, SCODE, SNAME, ARGNAM,
1682 INTEGER ARGPOS, SCODE
1798 INTEGER , CSRC_, CTXT_, DLEN_,
1799 $ DTYPE_, IMB_, , LLD_, MB_, M_, NB_, N_,
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 )
1806 PARAMETER ( DESCMULT = 100 )
1809 INTEGER I, INFOT, NPROW, NPCOL, MYROW, MYCOL
1819 INTEGER IA, IB, IC, , INCY, , IX, IY, JA, JB,
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
1831 IF( lsame( argnam,
'A' ) )
THEN
1839 CALL pchkpbe( ictxt, nout, sname, infot )
1847 CALL pchkpbe( ictxt, nout, sname, infot )
1857 infot = ( ( argpos + 3 ) * descmult ) + i
1859 CALL pchkpbe( ictxt, nout, sname, infot
1863 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1864 $ ( i.EQ.lld_ ) )
THEN
1871 $ desca( i ) = nprow
1876 $ desca( i ) = npcol
1880 IF( i.EQ.lld_ )
THEN
1881 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
1888 infot = ( ( argpos + 3 ) * descmult ) + i
1890 CALL pchkpbe( ictxt, nout, sname, infot )
1896 ELSE IF( lsame( argnam,
'B' ) )
THEN
1904 CALL pchkpbe( ictxt, nout, sname, infot )
1912 CALL pchkpbe( ictxt, nout, sname, infot )
1922 infot = ( ( argpos + 3 ) * descmult ) + i
1924 CALL pchkpbe( ictxt, nout, sname, infot )
1928 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1929 $ ( i.EQ.lld_ ) )
THEN
1936 $ descb( i ) = nprow
1941 $ descb( i ) = npcol
1945 IF( i.EQ.lld_ )
THEN
1946 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
1953 infot = ( ( argpos + 3 ) * descmult ) + i
1955 CALL pchkpbe( ictxt, nout, sname, infot )
1961 ELSE IF( lsame( argnam,
'C' ) )
THEN
1969 CALL pchkpbe( ictxt, nout, sname, infot )
1977 CALL pchkpbe( ictxt, nout, sname, infot )
1987 infot = ( ( argpos + 3 ) * descmult ) + i
1989 CALL pchkpbe( ictxt, nout, sname, infot )
1993 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
1994 $ ( i.EQ.lld_ ) )
THEN
2001 $ descc( i ) = nprow
2006 $ descc( i ) = npcol
2011 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2034 CALL pchkpbe( ictxt, nout, sname, infot )
2042 CALL pchkpbe( ictxt, nout, sname, infot )
2052 infot = ( ( argpos + 3 ) * descmult ) + i
2054 CALL pchkpbe( ictxt, nout, sname, infot )
2058 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2059 $ ( i.EQ.lld_ ) )
THEN
2066 $ descx( i ) = nprow
2071 $ descx( i ) = npcol
2075 IF( i.EQ.lld_ )
THEN
2076 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2083 infot = ( ( argpos + 3 ) * descmult ) + i
2085 CALL pchkpbe( ictxt, nout, sname, infot )
2097 CALL pchkpbe( ictxt, nout, sname, infot )
2107 CALL pchkpbe( ictxt, nout, sname, infot )
2115 CALL pchkpbe( ictxt, nout, sname, infot )
2125 infot = ( ( argpos + 3 ) * descmult ) + i
2127 CALL pchkpbe( ictxt, nout, sname, infot )
2131 IF( ( i.EQ.rsrc_ ) .OR. ( i.EQ.csrc_ ) .OR.
2132 $ ( i.EQ.lld_ ) )
THEN
2139 $ descy( i ) = nprow
2144 $ descy( i ) = npcol
2148 IF( i.EQ.lld_ )
THEN
2149 IF( myrow.EQ.0 .AND.mycol.EQ.0 )
THEN
2156 infot = ( ( argpos + 3 ) * descmult ) + i
2158 CALL pchkpbe( ictxt, nout, sname, infot )
2170 CALL pchkpbe( ictxt, nout, sname, infot )
2308 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2309 $ , INB_, LLD_, MB_, M_, NB_, N_,
2311 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
2314 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
2317 CHARACTER*1 DIAG, SIDE, TRANSA, , UPLO
2318 INTEGER IA, IB, IC, INCX, INCY, ISCLR, IX, IY, JA
2320 DOUBLE PRECISION USCLR, SCLR
2321 INTEGER DESCA( DLEN_ ), DESCB( DLEN_ ), DESCC( DLEN_ ),
2322 $ descx( dlen_ ), descy( dlen_ )
2323 DOUBLE PRECISION A( 2, 2 ), B( 2, 2 ), C( 2, 2 ), X( 2 ), Y( 2 )
2324 COMMON /PBLASC/DIAG, SIDE, TRANSA, , UPLO
2325 COMMON /pblasd/desca, descb, descc, descx, descy
2326 COMMON /pblasi/ia, ib, ic, incx, incy, isclr, ix, iy,
2327 $ ja, jb,
jc, jx, jy
2328 COMMON /pblasm/a, b, c
2329 COMMON /pblasn/kdim, mdim, ndim
2330 COMMON /pblass/sclr, usclr
2337 IF( scode.EQ.11 )
THEN
2339 CALL subptr( ndim, x, ix, jx, descx, incx, y, iy, jy, descy,
2342 ELSE IF( scode.EQ.12 )
THEN
2344 CALL subptr( ndim, sclr, x, ix, jx, descx, incx )
2346 ELSE IF( scode.EQ.13 )
THEN
2348 CALL subptr( ndim, sclr, x, ix, jx, descx, incx, y, iy, jy,
2351 ELSE IF( scode.EQ.14 )
THEN
2353 CALL subptr( ndim, sclr, isclr, x, ix, jx, descx, incx )
2355 ELSE IF( scode.EQ.15 )
THEN
2357 CALL subptr( ndim, usclr, x, ix, jx, descx, incx )
2361 ELSE IF( scode.EQ.21 )
THEN
2363 CALL subptr( transa, mdim, ndim, sclr, a, ia, ja, desca, x, ix,
2364 $ jx, descx, incx, sclr, y, iy, jy, descy, incy )
2366 ELSE IF( scode.EQ.22 )
THEN
2368 CALL subptr( uplo, ndim, sclr, a, ia, ja, desca, x, ix, jx,
2369 $ descx, incx, sclr, y, iy, jy, descy, incy )
2371 ELSE IF( scode.EQ.23 )
THEN
2373 CALL subptr( uplo, transa, diag, ndim, a, ia, ja, desca, x, ix,
2376 ELSE IF( scode.EQ.24 )
THEN
2378 CALL subptr( mdim, ndim, sclr, x, ix, jx, descx, incx, y, iy,
2379 $ jy, descy, incy, a, ia, ja, desca )
2381 ELSE IF( scode.EQ.25 )
THEN
2383 CALL subptr( uplo, ndim, sclr, x, ix, jx, descx, incx, a, ia,
2386 ELSE IF( scode.EQ.26 )
THEN
2388 CALL subptr( uplo, ndim, usclr, x, ix, jx, descx, incx, a, ia,
2391 ELSE IF( scode.EQ.27 )
THEN
2393 CALL subptr( uplo, ndim, sclr, x, ix, jx, descx, incx, y, iy,
2394 $ jy, descy, incy, a, ia, ja, desca )
2398 ELSE IF( scode.EQ.31 )
THEN
2400 CALL subptr( transa, transb, mdim, ndim, kdim, sclr, a, ia, ja,
2401 $ desca, b, ib, jb, descb, sclr, c, ic,
jc, descc )
2403 ELSE IF( scode.EQ.32 )
THEN
2405 CALL subptr( side, uplo, mdim, ndim, sclr, a, ia, ja, desca, b,
2406 $ ib, jb, descb, sclr, c, ic,
jc, descc )
2408 ELSE IF( scode.EQ.33 )
THEN
2410 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2411 $ sclr, c, ic,
jc, descc )
2413 ELSE IF( scode.EQ.34 )
THEN
2415 CALL subptr( uplo, transa, ndim, kdim, usclr, a, ia, ja, desca,
2416 $ usclr, c, ic,
jc, descc )
2418 ELSE IF( scode.EQ.35 )
THEN
2420 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2421 $ b, ib, jb, descb, sclr, c, ic,
jc, descc )
2423 ELSE IF( scode.EQ.36 )
THEN
2425 CALL subptr( uplo, transa, ndim, kdim, sclr, a, ia, ja, desca,
2426 $ b, ib, jb, descb, usclr, c, ic,
jc, descc )
2428 ELSE IF( scode.EQ.37 )
THEN
2430 CALL subptr( mdim, ndim, sclr, a, ia, ja, desca, sclr, c, ic,
2433 ELSE IF( scode.EQ.38 )
THEN
2435 CALL subptr( side, uplo, transa, diag, mdim, ndim, sclr, a, ia,
2436 $ ja, desca, b, ib, jb, descb )
2438 ELSE IF( scode.EQ.39 )
THEN
2440 CALL subptr( transa, mdim, ndim, sclr, a, ia, ja, desca, sclr,
2441 $ c, ic,
jc, descc )
2443 ELSE IF( scode.EQ.40 )
THEN
2445 CALL subptr( uplo, transa, mdim, ndim, sclr, a, ia, ja, desca,
2446 $ sclr, c, ic,
jc, descc )
2574 SUBROUTINE pdchkvin( ERRMAX, N, X, PX, IX, JX, DESCX, INCX,
2583 INTEGER INCX, INFO, IX, JX, N
2584 DOUBLE PRECISION ERRMAX
2588 DOUBLE PRECISION PX( * ), X( * )
2712 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2713 $ , IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2715 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
2716 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
2717 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
2719 DOUBLE PRECISION ZERO
2723 LOGICAL COLREP, ROWREP
2724 INTEGER I, IB, ICTXT, ICURCOL, ICURROW, IIX, IN
2727 DOUBLE PRECISION ERR, EPS
2733 DOUBLE PRECISION PDLAMCH
2737 INTRINSIC abs,
max,
min, mod
2749 ictxt = descx( ctxt_ )
2752 eps = pdlamch
'eps' )
2754 CALL pb_infog2l( ix, jx, descx, nprow, npcol, myrow, mycol, iix,
2755 $ jjx, ixrow, ixcol )
2758 ldpx = descx( lld_ )
2759 rowrep = ( ixrow.EQ.-1 )
2760 colrep = ( ixcol.EQ.-1 )
2764 IF( ( myrow.EQ.ixrow .OR. rowrep ) .AND.
2765 $ ( mycol.EQ.ixcol .OR. colrep ) )
2766 $
CALL pderrset( err, errmax, x( ix+(jx-1)*ldx ),
2767 $ px( iix+(jjx-1)*ldpx ) )
2769 ELSE IF( incx.EQ.descx( m_ ) )
THEN
2773 jb = descx( inb_ ) - jx + 1
2775 $ jb = ( ( -jb ) / descx( nb_ ) + 1 ) * descx( nb_ ) + jb
2779 IF( myrow.EQ.ixrow .OR. rowrep )
THEN
2782 IF( mycol.EQ.icurcol .OR. colrep )
THEN
2784 CALL pderrset( err, errmax, x( ix+(j-1)*ldx ),
2785 $ px( iix+(jjx-1)*ldpx ) )
2789 icurcol = mod( icurcol+1, npcol )
2791 DO 30 j = jn+1, jx+n-1, descx( nb_ )
2792 jb =
min( jx+n-j, descx( nb_ ) )
2794 IF( mycol.EQ.icurcol .OR. colrep )
THEN
2797 CALL pderrset( err, errmax, x( ix+(j+kk-1)*ldx ),
2805 icurcol = mod( icurcol+1, npcol )
2815 ib = descx( imb_ ) - ix + 1
2817 $ ib = ( ( -ib ) / descx( mb_ ) + 1 ) * descx( mb_ ) + ib
2821 IF( mycol.EQ.ixcol .OR. colrep )
THEN
2824 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
2826 CALL pderrset( err, errmax, x( i+(jx-1)*ldx ),
2827 $ px( iix+(jjx-1)*ldpx ) )
2831 icurrow = mod( icurrow+1, nprow )
2833 DO 60 i = in+1, ix+n-1, descx( mb_ )
2834 ib =
min( ix+n-i, descx( mb_ ) )
2836 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
2839 CALL pderrset( err, errmax, x( i+kk+(jx-1)*ldx ),
2840 $ px( iix+kk+(jjx-1)*ldpx ) )
2847 icurrow = mod( icurrow+1, nprow )
2855 CALL dgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
2858 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
2860 ELSE IF( errmax.GT.eps )
THEN
2877 INTEGER INCX, INFO, , JX, N
2881 DOUBLE PRECISION PX( * ), X( * )
3001 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3002 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3004 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
3005 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3006 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3007 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3008 DOUBLE PRECISION ZERO
3009 PARAMETER ( ZERO = 0.0d+0 )
3012 LOGICAL COLREP, ROWREP
3013 INTEGER I, IB, ICTXT, ICURCOL, ICURROW, II, IMBX, INBX,
3014 $ J, , JJ, KK, LDPX, LDX, , MBX, MPALL,
3015 $ mycol, mycoldist, myrow, myrowdist, nbx, npcol,
3017 DOUBLE PRECISION , ERR, ERRMAX
3025 EXTERNAL PDLAMCH, PB_NUMROC
3028 INTRINSIC abs,
max,
min, mod
3037 IF( ( descx( m_ ).LE.0 ).OR.( descx( n_ ).LE.0 ) )
3042 ictxt = descx( ctxt_ )
3045 eps = pdlamch( ictxt,
'eps' )
3047 mpall = pb_numroc( descx( m_ ), 1, descx( imb_ ), descx( mb_ ),
3048 $ myrow, descx( rsrc_ ), nprow )
3049 nqall = pb_numroc( descx( n_ ), 1, descx( inb_ ), descx( nb_ ),
3050 $ mycol, descx( csrc_ ), npcol )
3055 ldpx = descx( lld_ )
3056 icurrow = descx( rsrc_ )
3057 icurcol = descx( csrc_ )
3058 rowrep = ( icurrow.EQ.-1 )
3059 colrep = ( icurcol.EQ.-1 )
3060 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3061 imbx = descx( imb_ )
3065 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3066 inbx = descx( inb_ )
3073 myrowdist = mod( myrow - icurrow + nprow, nprow )
3078 mycoldist = mod( mycol - icurcol + npcol, npcol )
3083 IF( incx.EQ.descx( m_ ) )
THEN
3087 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3090 IF( mycoldist.EQ.0 )
THEN
3093 j = descx( inb_ ) + ( mycoldist - 1 ) * nbx + 1
3095 jb =
min(
max( 0, descx( n_ ) -
3096 ib =
min( descx( m_ ), descx( imb_ ) )
3100 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR. j+kk.GT.jx+n-1 )
3102 $ x( i+ll+(j+kk-1)*ldx ),
3103 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3109 j = j + inbx + ( npcol - 1 ) * nbx
3112 DO 50 jj = inbx+1, nqall, nbx
3113 jb =
min( nqall-jj+1, nbx )
3117 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3120 $ x( i+ll+(j+kk-1)*ldx ),
3121 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3137 icurrow = mod( icurrow + 1, nprow )
3139 DO 110 i = descx( imb_ ) + 1, descx( m_ ), mbx
3140 ib =
min( descx( m_ ) - i + 1, mbx )
3142 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3144 IF( mycoldist.EQ.0 )
THEN
3147 j = descx( inb_ ) + ( mycoldist - 1 ) * nbx + 1
3151 jb =
min(
max( 0, descx( n_ ) - j + 1 ), inbx )
3154 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3157 $ x( i+ll+(j+kk-1)*ldx ),
3158 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3164 j = j + inbx + ( npcol - 1 ) * nbx
3167 DO 100 jj = inbx+1, nqall, nbx
3168 jb =
min( nqall-jj+1, nbx )
3172 IF( i+ll.NE.ix .OR. j+kk.LT.jx .OR.
3175 $ x( i+ll+(j+kk-1)*ldx ),
3192 icurrow = mod( icurrow + 1, nprow )
3200 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3203 IF( myrowdist.EQ.0 )
THEN
3206 i = descx( imb_ ) + ( myrowdist - 1 ) * mbx + 1
3209 jb =
min( descx( n_ ), descx( inb_ ) )
3213 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR. i+ll.GT.ix+n-1 )
3215 $ x( i+ll+(j+kk-1)*ldx ),
3216 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3222 i = i + imbx + ( nprow - 1 ) * mbx
3225 DO 160 ii = imbx+1, mpall, mbx
3226 ib =
min( mpall-ii+1, mbx )
3230 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3233 $ x( i+ll+(j+kk-1)*ldx ),
3234 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3250 icurcol = mod( icurcol + 1, npcol )
3253 jb =
min( descx( n_ ) - j + 1, nbx )
3255 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3257 IF( myrowdist.EQ.0 )
THEN
3260 i = descx( imb_ ) + ( myrowdist - 1 ) * mbx + 1
3264 ib =
min(
max( 0, descx( m_ ) - i + 1 ), imbx )
3267 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3270 $ x( i+ll+(j+kk-1)*ldx
3271 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3277 i = i + imbx + ( nprow - 1 ) * mbx
3280 DO 210 ii = imbx+1, mpall, mbx
3281 ib =
min( mpall-ii+1, mbx )
3285 IF( j+kk.NE.jx .OR. i+ll.LT.ix .OR.
3288 $ x( i+ll+(j+kk-1)*ldx ),
3289 $ px( ii+ll+(jj+kk-1)*ldpx ) )
3305 icurcol = mod( icurcol + 1, npcol )
3311 CALL dgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
3314 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3316 ELSE IF( errmax.GT.eps )
THEN
3325 SUBROUTINE pdchkmin( ERRMAX, M, N, A, PA, IA, JA, DESCA, INFO )
3333 INTEGER IA, INFO, JA, M, N
3334 DOUBLE PRECISION ERRMAX
3338 DOUBLE PRECISION PA( * ), A( * )
3461 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3462 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3464 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
3465 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3466 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3467 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3468 DOUBLE PRECISION ZERO
3469 PARAMETER ( ZERO = 0.0d+0 )
3473 INTEGER H, I, IACOL, IAROW, IB, ICTXT, ICURCOL,
3474 $ ICURROW, II, IIA, IN, J, JB, JJ, JJA, JN, K,
3475 $ kk, lda, ldpa, ll, mycol, myrow, npcol, nprow
3476 DOUBLE PRECISION ERR, EPS
3486 INTRINSIC abs,
max,
min, mod
3495 IF( ( m.EQ.0 ).OR.( n.EQ.0 ) )
3500 ictxt = desca( ctxt_ )
3503 eps = pdlamch( ictxt,
'eps' )
3505 CALL pb_infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia,
3506 $ jja, iarow, iacol )
3511 ldpa = desca( lld_ )
3514 rowrep = ( iarow.EQ.-1 )
3515 colrep = ( iacol.EQ.-1 )
3519 jb = desca( inb_ ) - ja + 1
3521 $ jb = ( ( -jb ) / desca( nb_ ) + 1 ) * desca( nb_ ) + jb
3525 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3528 ib = desca( imb_ ) - ia + 1
3530 $ ib = ( ( -ib ) / desca( mb_ ) + 1 ) * desca( mb_ ) + ib
3533 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3535 CALL pderrset( err, errmax, a( ia+k+(ja+h-1)*lda ),
3536 $ pa( ii+k+(jj+h-1)*ldpa ) )
3540 icurrow = mod( icurrow+1, nprow )
3544 DO 30 i = in+1, ia+m-1, desca( mb_ )
3545 ib =
min( desca( mb_ ), ia+m-i )
3546 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3548 CALL pderrset( err, errmax, a( i+k+(ja+h-1)*lda ),
3549 $ pa( ii+k+(jj+h-1)*ldpa ) )
3553 icurrow = mod( icurrow+1, nprow )
3564 icurcol = mod( icurcol+1, npcol )
3568 DO 90 j = jn+1, ja+n-1, desca( nb_ )
3569 jb =
min( desca( nb_ ), ja+n-j )
3570 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3572 ib = desca( imb_ ) - ia + 1
3574 $ ib = ( ( -ib ) / desca( mb_ ) + 1 )*desca( mb_ ) + ib
3577 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3579 CALL pderrset( err, errmax, a( ia+k+(j+h-1)*lda ),
3580 $ pa( ii+k+(jj+h-1)*ldpa ) )
3584 icurrow = mod( icurrow+1, nprow )
3588 DO 70 i = in+1, ia+m-1, desca( mb_ )
3589 ib =
min( desca( mb_ ), ia+m-i )
3590 IF( myrow.EQ.icurrow .OR. rowrep )
THEN
3593 $ a( i+k+(j+h-1)*lda ),
3594 $ pa( ii+k+(jj+h-1)*ldpa ) )
3598 icurrow = mod( icurrow+1, nprow )
3608 icurcol = mod( icurcol+1, npcol )
3612 CALL dgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
3615 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3617 ELSE IF( errmax.GT.eps )
THEN
3634 INTEGER IA, INFO, JA, M, N
3638 DOUBLE PRECISION A( * ), PA( * )
3757 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3758 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3760 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
3761 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3762 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3763 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3764 DOUBLE PRECISION ZERO
3765 PARAMETER ( ZERO = 0.0d+0 )
3768 LOGICAL COLREP, ROWREP
3769 INTEGER I, IB, ICTXT, ICURCOL, II, IMBA, J, JB, JJ, KK,
3770 $ LDA, LDPA, LL, MPALL, MYCOL, MYROW, MYROWDIST,
3772 DOUBLE PRECISION EPS, ERR,
3779 DOUBLE PRECISION PDLAMCH
3780 EXTERNAL PDLAMCH, PB_NUMROC
3792 IF( ( desca( m_ ).LE.0 ).OR.( desca( n_ ).LE.0 ) )
3797 ictxt = desca( ctxt_ )
3800 eps = pdlamch( ictxt,
'eps' )
3802 mpall = pb_numroc( desca( m_ ), 1, desca( imb_ ), desca( mb_ ),
3803 $ myrow, desca( rsrc_ ), nprow )
3806 ldpa = desca( lld_ )
3810 rowrep = ( desca( rsrc_ ).EQ.-1 )
3811 colrep = ( desca( csrc_ ).EQ.-1 )
3812 icurcol = desca( csrc_ )
3813 IF( myrow.EQ.desca( rsrc_ ) .OR. rowrep )
THEN
3814 imba = desca( imb_ )
3821 myrowdist = mod( myrow - desca( rsrc_ ) + nprow, nprow )
3824 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3827 IF( myrowdist.EQ.0 )
THEN
3830 i = desca( imb_ ) + ( myrowdist - 1 ) * desca( mb_ ) + 1
3832 ib =
min(
max( 0, desca( m_ ) - i + 1 ), imba )
3833 jb =
min( desca( n_ ), desca( inb_ ) )
3837 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3838 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3839 $
CALL pderrset( err, errmax, a( i+ll+(j+kk-1)*lda ),
3840 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3846 i = i + imba + ( nprow - 1 ) * desca( mb_ )
3849 DO 50 ii = imba + 1, mpall, desca( mb_ )
3850 ib =
min( mpall-ii+1, desca( mb_ ) )
3854 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3855 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3857 $ a( i+ll+(j+kk-1)*lda ),
3858 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3863 i = i + desca( mb_ )
3865 i = i + nprow * desca( mb_ )
3874 icurcol = mod( icurcol + 1, npcol )
3876 DO 110 j = desca( inb_ ) + 1, desca( n_ ), desca( nb_ )
3877 jb =
min( desca( n_ ) - j + 1, desca( nb_ ) )
3879 IF( mycol.EQ.icurcol .OR. colrep )
THEN
3881 IF( myrowdist.EQ.0 )
THEN
3884 i = desca( imb_ ) + ( myrowdist - 1 ) * desca( mb_ ) + 1
3888 ib =
min(
max( 0, desca( m_ ) - i + 1 ), imba )
3891 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3892 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3894 $ a( i+ll+(j+kk-1)*lda ),
3895 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3901 i = i + imba + ( nprow - 1 ) * desca( mb_ )
3904 DO 100 ii = imba+1, mpall, desca( mb_ )
3905 ib =
min( mpall-ii+1, desca( mb_ ) )
3909 IF( i+ll.LT.ia .OR. i+ll.GT.ia+m-1 .OR.
3910 $ j+kk.LT.ja .OR. j+kk.GT.ja+n-1 )
3912 $ a( i+ll+(j+kk-1)*lda ),
3913 $ pa( ii+ll+(jj+kk-1)*ldpa ) )
3918 i = i + desca( mb_ )
3920 i = i + nprow * desca( mb_ )
3933 CALL dgamx2d( ictxt,
'All',
' ', 1, 1, errmax, 1, kk, ll, -1,
3936 IF( errmax.GT.zero .AND. errmax.LE.eps )
THEN
3938 ELSE IF( errmax.GT.eps )
THEN
4154 SUBROUTINE pdmvch( ICTXT, TRANS, M, N, ALPHA, A, IA, JA, DESCA,
4155 $ X, IX, JX, DESCX, INCX, BETA, Y, PY, IY, JY,
4156 $ DESCY, INCY, G, ERR, INFO )
4165 INTEGER IA, ICTXT, INCX, INCY, INFO, IX, IY, JA, ,
4167 DOUBLE PRECISION ALPHA, BETA, ERR
4170 INTEGER DESCA( * ), DESCX( * ), DESCY( * )
4171 DOUBLE PRECISION A( * ), G( * ), PY( * ), X( * ), Y( * )
4350 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
4351 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
4353 PARAMETER ( BLOCK_CYCLIC_2D_INB =
4354 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
4355 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
4356 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
4357 DOUBLE PRECISION ZERO,
4358 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
4361 LOGICAL COLREP, ROWREP, TRAN
4362 INTEGER I, IB, ICURCOL, ICURROW, , IN, IOFFA, IOFFX,
4363 $ IOFFY, IYCOL, IYROW, J, JB, JJY, JN, KK, LDA,
4364 $ ldpy, ldx, ldy, ml, mycol, myrow,
nl, npcol,
4366 DOUBLE PRECISION EPS, ERRI, GTMP, , YTMP
4373 DOUBLE PRECISION PDLAMCH
4374 EXTERNAL LSAME, PDLAMCH
4383 eps = pdlamch( ictxt,
'eps' )
4385 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
4391 tran = lsame( trans,
'T' ).OR.lsame( trans,
'C' )
4400 lda =
max( 1, desca( m_ ) )
4401 ldx =
max( 1, descx( m_ ) )
4402 ldy =
max( 1, descy( m_ ) )
4408 ioffy = iy + ( jy - 1 ) * ldy
4412 ioffx = ix + ( jx - 1 ) * ldx
4414 ioffa = ia + ( ja + i - 2 ) * lda
4416 ytmp = ytmp + a( ioffa ) * x( ioffx )
4417 gtmp = gtmp + abs( a( ioffa ) * x( ioffx ) )
4419 ioffx = ioffx + incx
4422 ioffa = ia + i - 1 + ( ja - 1 ) * lda
4424 ytmp = ytmp + a( ioffa ) * x( ioffx )
4425 gtmp = gtmp + abs( a( ioffa ) * x( ioffx ) )
4427 ioffx = ioffx + incx
4430 g( i ) = abs( alpha ) * gtmp + abs( tbeta * y( ioffy ) )
4431 y( ioffy ) = alpha * ytmp + tbeta * y( ioffy )
4432 ioffy = ioffy + incy
4439 ldpy = descy( lld_ )
4440 ioffy = iy + ( jy - 1 ) * ldy
4441 CALL pb_infog2l( iy, jy, descy, nprow, npcol, myrow, mycol, iiy,
4442 $ jjy, iyrow, iycol )
4445 rowrep = ( iyrow.EQ.-1 )
4446 colrep = ( iycol.EQ.-1 )
4448 IF( incy.EQ.descy( m_ ) )
THEN
4452 jb = descy( inb_ ) - jy + 1
4454 $ jb = ( ( -jb ) / descy( nb_ ) + 1 ) * descy( nb_ ) + jb
4460 IF( ( myrow.EQ.icurrow .OR. rowrep ) .AND.
4461 $ ( mycol.EQ.icurcol .OR. colrep ) )
THEN
4462 erri = abs( py( iiy+(jjy-1)*ldpy ) - y( ioffy ) ) / eps
4463 IF( g( j-jy+1 ).NE.zero )
4464 $ erri = erri / g( j-jy+1 )
4465 err =
max( err, erri )
4466 IF( err*sqrt( eps ).GE.one )
4471 ioffy = ioffy + incy
4475 icurcol = mod( icurcol+1, npcol )
4477 DO 70 j = jn+1, jy+ml-1, descy( nb_ )
4478 jb =
min( jy+ml-j, descy( nb_ ) )
4482 IF( ( myrow.EQ.icurrow .OR. rowrep ) .AND.
4483 $ ( mycol.EQ.icurcol .OR. colrep ) )
THEN
4484 erri = abs( py( iiy+(jjy-1)*ldpy ) - y( ioffy ) )/eps
4485 IF( g( j+kk-jy+1 ).NE.zero )
4486 $ erri = erri / g( j+kk-jy+1 )
4487 err =
max( err, erri )
4488 IF( err*sqrt( eps ).GE.one )
4493 ioffy = ioffy + incy
4497 icurcol = mod( icurcol+1, npcol )
4505 ib = descy( imb_ ) - iy + 1
4507 $ ib = ( ( -ib ) / descy( mb_ ) + 1 ) * descy( mb_ ) + ib
4513 IF( ( myrow.EQ.icurrow .OR. rowrep ) .AND.
4514 $ ( mycol.EQ.icurcol .OR. colrep ) )
THEN
4515 erri = abs( py( iiy+(jjy-1)*ldpy ) - y( ioffy ) ) / eps
4516 IF( g( i-iy+1 ).NE.zero )
4517 $ erri = erri / g( i-iy+1 )
4518 err =
max( err, erri )
4519 IF( err*sqrt( eps ).GE.one )
4524 ioffy = ioffy + incy
4528 icurrow = mod( icurrow+1, nprow )
4530 DO 100 i = in+1, iy+ml-1, descy( mb_ )
4535 IF( ( myrow.EQ.icurrow .OR. rowrep ) .AND.
4536 $ ( mycol.EQ.icurcol .OR. colrep ) )
THEN
4537 erri = abs( py( iiy+(jjy-1)*ldpy ) - y( ioffy ) )/eps
4538 IF( g( i+kk-iy+1 ).NE.zero )
4539 $ erri = erri / g( i+kk-iy+1 )
4540 err =
max( err, erri )
4541 IF( err*sqrt( eps ).GE.one )
4546 ioffy = ioffy + incy
4550 icurrow = mod( icurrow+1, nprow )
4558 CALL igsum2d( ictxt, 'all
', ' ', 1, 1, INFO, 1, -1, MYCOL )
4559 CALL DGAMX2D( ICTXT, 'all
', ' ', 1, 1, ERR, 1, I, J, -1, -1,
6861 SUBROUTINE PDLASET( UPLO, M, N, ALPHA, BETA, A, IA, JA, DESCA )
6870 INTEGER IA, JA, M, N
6871 DOUBLE PRECISION ALPHA, BETA
6875 DOUBLE PRECISION A( * )
7006 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
7007 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
7009 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
7010 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
7011 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
7012 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
7015 LOGICAL GODOWN, GOLEFT, ISCOLREP, ISROWREP, LOWER,
7017 INTEGER IACOL, IAROW, ICTXT, IIA, IIMAX, ILOW, IMB1,
7018 $ IMBLOC, INB1, INBLOC, IOFFA, IOFFD, IUPP, JJA,
7019 $ JJMAX, JOFFA, JOFFD, LCMT, LCMT00, LDA, LMBLOC,
7020 $ LNBLOC, LOW, M1, MB, MBLKD, MBLKS, MBLOC, MP,
7021 $ MRCOL, MRROW, MYCOL, MYROW, N1, NB, NBLKD,
7022 $ NBLKS, NBLOC, NPCOL, NPROW, NQ, PMB, QNB, TMP1,
7026 INTEGER DESCA2( DLEN_ )
7029 EXTERNAL BLACS_GRIDINFO, PB_AINFOG2L, PB_BINFO,
7030 $ PB_DESCTRANS, PB_DLASET
7041.EQ..OR..EQ.
IF( M0 N0 )
7046 CALL PB_DESCTRANS( DESCA, DESCA2 )
7050 ICTXT = DESCA2( CTXT_ )
7051 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
7053 CALL PB_AINFOG2L( M, N, IA, JA, DESCA2, NPROW, NPCOL, MYROW,
7054 $ MYCOL, IMB1, INB1, MP, NQ, IIA, JJA, IAROW,
7055 $ IACOL, MRROW, MRCOL )
7057.LE..OR..LE.
IF( MP0 NQ0 )
7060.LT.
ISROWREP = ( DESCA2( RSRC_ )0 )
7061.LT.
ISCOLREP = ( DESCA2( CSRC_ )0 )
7062 LDA = DESCA2( LLD_ )
7064.NOT.
UPPER = ( LSAME( UPLO, 'l
' ) )
7065.NOT.
LOWER = ( LSAME( UPLO, 'u
' ) )
7067.AND..AND..EQ..OR.
IF( ( ( LOWERUPPER )( ALPHABETA ) )
7068.AND.
$ ( ISROWREP ISCOLREP ) ) THEN
7069.GT..AND..GT.
IF( ( MP0 )( NQ0 ) )
7070 $ CALL PB_DLASET( UPLO, MP, NQ, 0, ALPHA, BETA,
7071 $ A( IIA + ( JJA - 1 ) * LDA ), LDA )
7080 CALL PB_BINFO( 0, MP, NQ, IMB1, INB1, MB, NB, MRROW, MRCOL,
7081 $ LCMT00, MBLKS, NBLKS, IMBLOC, INBLOC, LMBLOC,
7082 $ LNBLOC, ILOW, LOW, IUPP, UPP )
7106.GT.
GODOWN = ( LCMT00IUPP )
7107.LT.
GOLEFT = ( LCMT00ILOW )
7109.NOT..AND..NOT.
IF( GODOWN GOLEFT ) THEN
7113.LT.
GOLEFT = ( ( LCMT00 - ( IUPP - UPP + PMB ) )ILOW )
7114.NOT.
GODOWN = GOLEFT
7116 CALL PB_DLASET( UPLO, IMBLOC, INBLOC, LCMT00, ALPHA, BETA,
7117 $ A( IIA+JOFFA*LDA ), LDA )
7119.AND..GT.
IF( UPPER NQINBLOC )
7120 $ CALL PB_DLASET( 'all
', IMBLOC, NQ-INBLOC, 0, ALPHA,
7121 $ ALPHA, A( IIA+(JOFFA+INBLOC)*LDA ), LDA )
7125.AND..GT.
IF( LOWER MPIMBLOC )
7126 $ CALL PB_DLASET( 'all
', MP-IMBLOC, INBLOC, 0, ALPHA,
7127 $ ALPHA, A( IIA+IMBLOC+JOFFA*LDA ), LDA )
7136 LCMT00 = LCMT00 - ( IUPP - UPP + PMB )
7138 IOFFA = IOFFA + IMBLOC
7141.GT..AND..GT.
IF( MBLKS0 LCMT00UPP ) THEN
7142 LCMT00 = LCMT00 - PMB
7148 TMP1 = MIN( IOFFA, IIMAX ) - IIA + 1
7149.AND..GT.
IF( UPPER TMP10 ) THEN
7150 CALL PB_DLASET( 'all', tmp1, n1, 0, alpha, alpha,
7151 $ a( iia+joffa*lda ), lda )
7165 IF( mblkd.GT.0 .AND. lcmt.GE.ilow )
THEN
7168 CALL pb_dlaset( uplo, mbloc, inbloc, lcmt, alpha, beta,
7169 $ a( ioffd+1+joffa*lda ), lda )
7175 ioffd = ioffd + mbloc
7179 tmp1 = m1 - ioffd + iia - 1
7180 IF( lower .AND. tmp1.GT.0 )
7181 $
CALL pb_dlaset(
'ALL', tmp1, inbloc, 0, alpha, alpha,
7182 $ a( ioffd+1+joffa*lda ), lda )
7184 tmp1 = ioffa - iia + 1
7187 lcmt00 = lcmt00 + low - ilow + qnb
7189 joffa = joffa + inbloc
7191 IF( upper .AND. tmp1.GT.0 .AND. n1.GT.0 )
7192 $
CALL pb_dlaset(
'ALL', tmp1, n1, 0, alpha, alpha,
7198 ELSE IF( goleft )
THEN
7200 lcmt00 = lcmt00 + low - ilow + qnb
7202 joffa = joffa + inbloc
7205 IF( nblks.GT.0 .AND. lcmt00.LT.low )
THEN
7206 lcmt00 = lcmt00 + qnb
7212 tmp1 =
min( joffa, jjmax ) - jja + 1
7213 IF( lower .AND. tmp1.GT.0 )
THEN
7214 CALL pb_dlaset(
'All', m1, tmp1, 0, alpha, alpha,
7215 $ a( iia+(jja-1)*lda ), lda )
7229 IF( nblkd.GT.0 .AND. lcmt.LE.iupp )
THEN
7232 CALL pb_dlaset( uplo, imbloc, nbloc, lcmt, alpha, beta,
7233 $ a( iia+joffd*lda ), lda )
7239 joffd = joffd + nbloc
7243 tmp1 = n1 - joffd + jja - 1
7244 IF( upper .AND. tmp1.GT.0 )
7245 $
CALL pb_dlaset(
'All', imbloc, tmp1, 0, alpha, alpha,
7246 $ a( iia+joffd*lda ), lda )
7248 tmp1 = joffa - jja + 1
7251 lcmt00 = lcmt00 - ( iupp - upp + pmb )
7253 ioffa = ioffa + imbloc
7255 IF( lower .AND. m1.GT.0 .AND. tmp1.GT.0 )
7256 $
CALL pb_dlaset(
'All', m1, tmp1, 0, alpha, alpha,
7257 $ a( ioffa+1+(jja-1)*lda ), lda )
7266 IF( nblks.GT.0 )
THEN
7270 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
7271 lcmt00 = lcmt00 - pmb
7277 tmp1 =
min( ioffa, iimax ) - iia + 1
7278 IF( upper .AND. tmp1.GT.0 )
THEN
7279 CALL pb_dlaset(
'All', tmp1, n1, 0, alpha, alpha,
7280 $ a( iia+joffa*lda ), lda )
7294 IF( mblkd.GT.0 .AND. lcmt.GE.low )
THEN
7297 CALL pb_dlaset( uplo, mbloc, nbloc, lcmt, alpha, beta,
7298 $ a( ioffd+1+joffa*lda ), lda )
7304 ioffd = ioffd + mbloc
7308 tmp1 = m1 - ioffd + iia - 1
7309 IF( lower .AND. tmp1.GT.0 )
7310 $
CALL pb_dlaset(
'All', tmp1, nbloc, 0, alpha, alpha,
7311 $ a( ioffd+1+joffa*lda ), lda )
7313 tmp1 =
min( ioffa, iimax ) - iia + 1
7316 lcmt00 = lcmt00 + qnb
7318 joffa = joffa + nbloc
7320 IF( upper .AND. tmp1.GT.0 .AND. n1.GT.0 )
7321 $
CALL pb_dlaset(
'All', tmp1, n1, 0, alpha, alpha,
7322 $ a( iia+joffa*lda ), lda )
7336 SUBROUTINE pdlascal( TYPE, M, N, ALPHA, A, IA, JA, DESCA )
7345 INTEGER IA, JA, M, N
7346 DOUBLE PRECISION ALPHA
7350 DOUBLE PRECISION A( * )
7471 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
7472 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
7474 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
7475 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
7476 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
7477 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
7481 LOGICAL GODOWN, GOLEFT, LOWER, UPPER
7482 INTEGER IACOL, IAROW, ICTXT, IIA, IIMAX, ILOW, IMB1,
7483 $ IMBLOC, INB1, INBLOC, IOFFA, IOFFD, ,
7484 $ IUPP, JJA, JJMAX, JOFFA, JOFFD, LCMT, LCMT00,
7485 $ LDA, LMBLOC, LNBLOC, LOW, M1, MB, MBLKD, MBLKS,
7486 $ MBLOC, MP, MRCOL, MRROW, MYCOL, MYROW, N1, NB,
7491 INTEGER DESCA2( DLEN_ )
7494 EXTERNAL BLACS_GRIDINFO, PB_AINFOG2L, PB_BINFO,
7495 $ PB_DESCTRANS, PB_DLASCAL, PB_INFOG2L
7500 EXTERNAL LSAME, PB_NUMROC
7509 CALL pb_desctrans( desca, desca2 )
7513 ictxt = desca2( ctxt_ )
7514 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
7518 IF( m.EQ.0 .OR. n.EQ.0 )
7521 IF( lsame(
TYPE,
'L' ) ) then
7527 ELSE IF( lsame(
TYPE,
'U' ) ) then
7533 ELSE IF( lsame(
TYPE,
'H' ) ) then
7549 IF( itype.EQ.0 )
THEN
7553 CALL pb_infog2l( ia, ja, desca2, nprow, npcol, myrow, mycol,
7554 $ iia, jja, iarow, iacol )
7555 mp = pb_numroc( m, ia, desca2( imb_ ), desca2( mb_ ), myrow,
7556 $ desca2( rsrc_ ), nprow )
7557 nq = pb_numroc( n, ja, desca2( inb_ ), desca2( nb_ ), mycol,
7558 $ desca2( csrc_ ), npcol )
7560 IF( mp.LE.0 .OR. nq.LE.0 )
7563 lda = desca2( lld_ )
7564 ioffa = iia + ( jja - 1 ) * lda
7566 CALL pb_dlascal(
'All', mp, nq, 0, alpha, a( ioffa ), lda )
7572 CALL pb_ainfog2l( m, n, ia, ja, desca2, nprow, npcol, myrow,
7573 $ mycol, imb1, inb1, mp, nq, iia, jja, iarow,
7576 IF( mp.LE.0 .OR. nq.LE.
7584 lda = desca2( lld_ )
7586 CALL pb_binfo( ioffd, mp, nq, imb1, inb1, mb, nb, mrrow,
7587 $ mrcol, lcmt00, mblks, nblks, imbloc, inbloc,
7588 $ lmbloc, lnbloc, ilow, low, iupp, upp )
7597 IF( desca2( rsrc_ ).LT.0 )
THEN
7602 IF( desca2( csrc_ ).LT.0 )
THEN
7611 godown = ( lcmt00.GT.iupp )
7612 goleft = ( lcmt00.LT.ilow )
7614 IF( .NOT.godown .AND. .NOT.goleft )
THEN
7618 goleft = ( ( lcmt00 - ( iupp - upp + pmb ) ).LT.ilow )
7619 godown = .NOT.goleft
7621 CALL pb_dlascal( uplo, imbloc, inbloc, lcmt00, alpha,
7622 $ a( iia+joffa*lda ), lda )
7624 IF( upper .AND. nq.GT.inbloc )
7625 $
CALL pb_dlascal(
'All', imbloc, nq-inbloc, 0, alpha,
7626 $ a( iia+(joffa+inbloc)*lda ), lda )
7630 IF( lower .AND. mp.GT.imbloc )
7631 $
CALL pb_dlascal(
'All', mp-imbloc, inbloc, 0, alpha,
7632 $ a( iia+imbloc+joffa*lda ), lda )
7641 lcmt00 = lcmt00 - ( iupp - upp + pmb )
7643 ioffa = ioffa + imbloc
7646 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
7647 lcmt00 = lcmt00 - pmb
7653 tmp1 =
min( ioffa, iimax ) - iia + 1
7654 IF( upper .AND. tmp1.GT.0 )
THEN
7655 CALL pb_dlascal(
'All', tmp1, n1, 0, alpha,
7656 $ a( iia+joffa*lda ), lda )
7670 IF( mblkd.GT.0 .AND. lcmt.GE.ilow )
THEN
7673 CALL pb_dlascal( uplo, mbloc, inbloc, lcmt, alpha,
7674 $ a( ioffd+1+joffa*lda ), lda )
7680 ioffd = ioffd + mbloc
7684 tmp1 = m1 - ioffd + iia - 1
7685 IF( lower .AND. tmp1.GT.0 )
7686 $
CALL pb_dlascal(
'All', tmp1, inbloc, 0, alpha,
7687 $ a( ioffd+1+joffa*lda ), lda )
7689 tmp1 = ioffa - iia + 1
7692 lcmt00 = lcmt00 + low - ilow + qnb
7694 joffa = joffa + inbloc
7696 IF( upper .AND. tmp1.GT.0 .AND. n1.GT.0 )
7697 $
CALL pb_dlascal(
'All', tmp1, n1, 0, alpha,
7698 $ a( iia+joffa*lda ), lda )
7703 ELSE IF( goleft )
THEN
7705 lcmt00 = lcmt00 + low - ilow + qnb
7707 joffa = joffa + inbloc
7710 IF( nblks.GT.0 .AND. lcmt00.LT.low )
THEN
7711 lcmt00 = lcmt00 + qnb
7717 tmp1 =
min( joffa, jjmax ) - jja + 1
7718 IF( lower .AND. tmp1.GT.0 )
THEN
7719 CALL pb_dlascal(
'All', m1, tmp1, 0, alpha,
7720 $ a( iia+(jja-1)*lda ), lda )
7734 IF( nblkd.GT.0 .AND. lcmt.LE.iupp )
THEN
7737 CALL pb_dlascal( uplo, imbloc, nbloc, lcmt, alpha,
7738 $ a( iia+joffd*lda ), lda )
7744 joffd = joffd + nbloc
7748 tmp1 = n1 - joffd + jja - 1
7749 IF( upper .AND. tmp1.GT.0 )
7750 $
CALL pb_dlascal(
'All', imbloc, tmp1, 0, alpha,
7751 $ a( iia+joffd*lda ), lda )
7753 tmp1 = joffa - jja + 1
7756 lcmt00 = lcmt00 - ( iupp - upp + pmb )
7758 ioffa = ioffa + imbloc
7760 IF( lower .AND. m1.GT.0 .AND. tmp1.GT.0 )
7761 $
CALL pb_dlascal(
'All', m1, tmp1, 0, alpha,
7762 $ a( ioffa+1+(jja-1)*lda ), lda )
7771 IF( nblks.GT.0 )
THEN
7775 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
7776 lcmt00 = lcmt00 - pmb
7782 tmp1 =
min( ioffa, iimax ) - iia + 1
7783 IF( upper .AND. tmp1.GT.0 )
THEN
7784 CALL pb_dlascal(
'All', tmp1, n1, 0, alpha,
7785 $ a( iia+joffa*lda ), lda )
7799 IF( mblkd.GT.0 .AND. lcmt.GE.low )
THEN
7802 CALL pb_dlascal( uplo, mbloc, nbloc, lcmt, alpha,
7803 $ a( ioffd+1+joffa*lda ), lda )
7809 ioffd = ioffd + mbloc
7813 tmp1 = m1 - ioffd + iia - 1
7814 IF( lower .AND. tmp1.GT.0 )
7815 $
CALL pb_dlascal(
'All', tmp1, nbloc, 0, alpha,
7816 $ a( ioffd+1+joffa*lda ), lda )
7818 tmp1 =
min( ioffa, iimax ) - iia + 1
7821 lcmt00 = lcmt00 + qnb
7823 joffa = joffa + nbloc
7825 IF( upper .AND. tmp1.GT.0 .AND. n1.GT.0 )
7826 $
CALL pb_dlascal(
'All', tmp1, n1, 0, alpha,
7827 $ a( iia+joffa*lda ), lda )
7843 SUBROUTINE pdlagen( INPLACE, AFORM, DIAG, OFFA, M, N, IA, JA,
7844 $ DESCA, IASEED, A, LDA )
7853CHARACTER*1 aform, diag
7854 INTEGER ia, iaseed, ja, lda, m, n, offa
7858 DOUBLE PRECISION A( LDA, * )
8036 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
8037 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
8039 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
8040 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
8041 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
8042 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
8043 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
8044 $ jmp_mb, jmp_nb, jmp_npimbloc, jmp_npmb,
8045 $ jmp_nqinbloc, jmp_nqnb, jmp_row
8046 parameter( jmp_1 = 1, jmp_row = 2, jmp_col = 3,
8047 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
8048 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
8049 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
8053 LOGICAL DIAGDO, SYMM, HERM, NOTRAN
8054 INTEGER CSRC, I, IACOL, IAROW, ICTXT, IIA, ILOCBLK,
8055 $ ILOCOFF, ILOW, IMB, IMB1, IMBLOC, IMBVIR, INB,
8056 $ INB1, INBLOC, INBVIR, INFO, IOFFDA, , IUPP,
8057 $ IVIR, JJA, JLOCBLK, JLOCOFF, JVIR, LCMT00,
8058 $ LMBLOC, LNBLOC, LOW, MAXMN, , MBLKS, MP,
8059 $ MRCOL, MRROW, MYCDIST, MYCOL, MYRDIST, MYROW,
8060 $ NB, NBLKS, NPCOL, NPROW, NQ, NVIR, RSRC, UPP
8061 DOUBLE PRECISION ALPHA
8064 INTEGER DESCA2( DLEN_ ), IMULADD( 4, JMP_LEN ),
8065 $ IRAN( 2 ), ( JMP_LEN ), MULADD0( 4 )
8068 EXTERNAL BLACS_GRIDINFO, PB_AINFOG2L, PB_BINFO,
8081 DATA ( muladd0( i ), i = 1, 4 ) / 20077, 16838,
8088 CALL pb_desctrans( desca, desca2 )
8092 ictxt = desca2( ctxt_ )
8093 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
8098 IF( nprow.EQ.-1 )
THEN
8099 info = -( 1000 + ctxt_ )
8101 symm = lsame( aform,
'S' )
8103 notran = lsame( aform,
'N' )
8104 diagdo = lsame( diag
'D'
8105 IF( .NOT.( symm.OR.herm.OR.notran ) .AND.
8106 $ .NOT.( lsame( aform,
'T' ) ) .AND.
8107 $ .NOT.( lsame( aform,
'C' ) ) )
THEN
8109 ELSE IF( ( .NOT.diagdo ) .AND.
8113 CALL pb_chkmat( ictxt, m, 5, n, 6, ia, ja, desca2, 10, info )
8116 IF( info.NE.0 )
THEN
8117 CALL pxerbla( ictxt,
'PDLAGEN', -info )
8123 IF( ( m.LE.0 ).OR.( n.LE.0 ) )
8130 imb = desca2( imb_ )
8132 rsrc = desca2( rsrc_ )
8133 csrc = desca2( csrc_ )
8137 CALL pb_ainfog2l( m, n, ia, ja, desca2, nprow, npcol, myrow,
8138 $ mycol, imb1, inb1, mp, nq, iia, jja, iarow,
8139 $ iacol, mrrow, mrcol )
8151 ioffda = ja + offa - ia
8152 CALL pb_binfo( ioffda, mp, nq, imb1, inb1, mb, nb, mrrow,
8153 $ mrcol, lcmt00, mblks, nblks, imbloc, inbloc,
8162 itmp =
max( 0, -offa )
8165 nvir = desca2( m_ ) + itmp
8167 CALL pb_locinfo( ivir, imbvir, mb, myrow, rsrc, nprow, ilocblk,
8168 $ ilocoff, myrdist )
8170 itmp =
max( 0, offa )
8173 nvir =
max(
max( nvir, desca2( n_ ) + itmp ),
8174 $ desca2( m_ ) + desca2( n_ ) - 1 )
8176 CALL pb_locinfo( jvir, inbvir, nb, mycol, csrc, npcol, jlocblk,
8177 $ jlocoff, mycdist )
8179 IF( symm .OR. herm .OR. notran )
THEN
8181 CALL pb_initjmp( .true., nvir, imbvir, inbvir, imbloc, inbloc,
8182 $ mb, nb, rsrc, csrc, nprow, npcol, 1, jmp )
8191 $ myrdist, mycdist, nprow, npcol, jmp,
8194 CALL pb_dlagen(
'Lower', aform, a( iia, jja ), lda, lcmt00,
8195 $ iran, mblks, imbloc, mb, lmbloc, nblks, inbloc,
8196 $ nb, lnbloc, jmp, imuladd )
8200 IF( symm .OR. herm .OR. ( .NOT. notran ) )
THEN
8202 CALL pb_initjmp( .false., nvir, imbvir, inbvir, imbloc, inbloc,
8203 $ mb, nb, rsrc, csrc, nprow, npcol, 1, jmp )
8211 CALL pb_setlocran( iaseed, ilocblk, jlocblk, ilocoff, jlocoff,
8212 $ myrdist, mycdist, nprow, npcol, jmp,
8215 CALL pb_dlagen(
'Upper', aform, a( iia, jja ), lda, lcmt00,
8216 $ iran, mblks, imbloc, mb, lmbloc, nblks, inbloc,
8217 $ nb, lnbloc, jmp, imuladd )
8223 maxmn =
max( desca2( m_ ), desca2( n_ ) )
8224 alpha = dble( maxmn )
8226 IF( ioffda.GE.0 )
THEN
8231 $ a, ia,
min( ja-ioffda, ja+n-1 ), desca )
8241 SUBROUTINE pdladom( INPLACE, N, ALPHA, A, IA, JA, DESCA )
8251 DOUBLE PRECISION ALPHA
8255 DOUBLE PRECISION A( * )
8369 INTEGER , CSRC_, CTXT_, DLEN_
8372PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
8373 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
8374 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
8375 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
8378 LOGICAL GODOWN, GOLEFT
8379 INTEGER I, IACOL, IAROW, ICTXT, IIA, IJOFFA, ILOW,
8380 $ imb1, imbloc, inb1, inbloc, ioffa, ioffd, iupp,
8381 $ jja, joffa, joffd, lcmt, lcmt00, lda, ldap1,
8382 $ lmbloc, lnbloc, low, mb, mblkd, mblks, mbloc,
8383 $ mrcol, mrrow, mycol, myrow, nb, nblkd, nblks,
8384 $ nbloc, np, npcol, nprow, nq, pmb, qnb, upp
8385 DOUBLE PRECISION ATMP
8388 INTEGER DESCA2( DLEN_ )
8391 EXTERNAL BLACS_GRIDINFO, PB_AINFOG2L, PB_BINFO,
8401 CALL pb_desctrans( desca, desca2 )
8405 ictxt = desca2( ctxt_ )
8406 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
8411 CALL pb_ainfog2l( n, n, ia, ja, desca2, nprow, npcol
8412 $ mycol, imb1, inb1, np, nq, iia, jja, iarow,
8413 $ iacol, mrrow, mrcol )
8428 CALL pb_binfo( 0, np, nq, imb1, inb1, mb, nb, mrrow, mrcol,
8429 $ lcmt00, mblks, nblks, imbloc, inbloc, lmbloc,
8430 $ lnbloc, ilow, low, iupp, upp )
8434 lda = desca2( lld_ )
8437 IF( desca2( rsrc_ ).LT.0 )
THEN
8442 IF( desca2( csrc_ ).LT.0 )
THEN
8451 godown = ( lcmt00.GT.iupp )
8452 goleft = ( lcmt00.LT.ilow )
8454 IF( .NOT.godown .AND. .NOT.goleft )
THEN
8458 IF( lcmt00.GE.0 )
THEN
8459 ijoffa = ioffa+lcmt00 + ( joffa - 1 ) * lda
8460 DO 10 i = 1,
min( inbloc,
max( 0, imbloc - lcmt00 ) )
8461 atmp = a( ijoffa + i*ldap1 )
8462 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8465 ijoffa = ioffa + ( joffa - lcmt00 - 1 ) * lda
8466 DO 20 i = 1,
min( imbloc,
max( 0, inbloc + lcmt00 ) )
8467 atmp = a( ijoffa + i*ldap1 )
8468 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8471 goleft = ( ( lcmt00 - ( iupp - upp + pmb ) ).LT.ilow )
8472 godown = .NOT.goleft
8478 lcmt00 = lcmt00 - ( iupp - upp + pmb )
8480 ioffa = ioffa + imbloc
8483 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
8484 lcmt00 = lcmt00 - pmb
8496 IF( mblkd.GT.0 .AND. lcmt.GE.ilow )
THEN
8499 IF( lcmt.GE.0 )
THEN
8500 ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
8501 DO 50 i = 1,
min( inbloc,
max( 0, mbloc - lcmt ) )
8502 atmp = a( ijoffa + i*ldap1 )
8503 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8506 ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
8507 DO 60 i = 1,
min( mbloc,
max( 0, inbloc + lcmt ) )
8508 atmp = a( ijoffa + i*ldap1 )
8509 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8517 ioffd = ioffd + mbloc
8521 lcmt00 = lcmt00 + low - ilow + qnb
8523 joffa = joffa + inbloc
8525 ELSE IF( goleft )
THEN
8527 lcmt00 = lcmt00 + low - ilow + qnb
8529 joffa = joffa + inbloc
8532 IF( nblks.GT.0 .AND. lcmt00.LT.low )
THEN
8533 lcmt00 = lcmt00 + qnb
8545 IF( nblkd.GT.0 .AND. lcmt.LE.iupp )
THEN
8548 IF( lcmt.GE.0 )
THEN
8549 ijoffa = ioffa + lcmt + ( joffd - 1 ) * lda
8550 DO 90 i = 1,
min( nbloc,
max( 0, imbloc - lcmt ) )
8551 atmp = a( ijoffa + i*ldap1 )
8552 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8555 ijoffa = ioffa + ( joffd - lcmt - 1 ) * lda
8556 DO 100 i = 1,
min( imbloc,
max( 0, nbloc + lcmt ) )
8557 atmp = a( ijoffa + i*ldap1 )
8558 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8566 joffd = joffd + nbloc
8570 lcmt00 = lcmt00 - ( iupp - upp + pmb )
8572 ioffa = ioffa + imbloc
8578 IF( nblks.GT.0 )
THEN
8582 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
8583 lcmt00 = lcmt00 - pmb
8595 IF( mblkd.GT.0 .AND. lcmt.GE.low )
THEN
8598 IF( lcmt.GE.0 )
THEN
8599 ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
8600 DO 140 i = 1,
min( nbloc,
max( 0, mbloc - lcmt ) )
8601 atmp = a( ijoffa + i*ldap1 )
8602 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8605 ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
8606 DO 150 i = 1,
min( mbloc,
max( 0, nbloc + lcmt ) )
8607 atmp = a( ijoffa + i*ldap1 )
8608 a( ijoffa + i*ldap1 ) = abs( atmp ) + alpha
8616 ioffd = ioffd + mbloc
8620 lcmt00 = lcmt00 + qnb
8622 joffa = joffa + nbloc
8633 $ CMATNM, NOUT, WORK )
8641 INTEGER IA, ICPRNT, IRPRNT, JA, M, N, NOUT
8644 CHARACTER*(*) CMATNM
8646 DOUBLE PRECISION A( * ), WORK( * )
8772 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
8773 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
8775 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
8776 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
8777 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
8778 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
8784 INTEGER DESCA2( DLEN_ )
8787 EXTERNAL BLACS_GRIDINFO, PB_DESCTRANS, PB_PDLAPRN2
8793 IF( ( m.LE.0 ).OR.( n.LE.0 ) )
8798 CALL pb_desctrans( desca, desca2 )
8800 CALL blacs_gridinfo( desca2( ctxt_ ), nprow, npcol, myrow, mycol )
8802 IF( desca2( rsrc_ ).GE.0 )
THEN
8803 IF( desca2( csrc_ ).GE.0 )
THEN
8804 CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt, icprnt,
8805 $ cmatnm, nout, desca2( rsrc_ ),
8806 $ desca2( csrc_ ), work )
8808 DO 10 pcol = 0, npcol - 1
8809 IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
8810 $
WRITE( nout, * )
'Colum-replicated array -- ' ,
8811 $
'copy in process column: ', pcol
8812 CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt,
8813 $ icprnt, cmatnm, nout, desca2( rsrc_ ),
8818 IF( desca2( csrc_ ).GE.0 )
THEN
8819 DO 20 prow = 0, nprow - 1
8820 IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
8821 $
WRITE( nout, * ) 'row-replicated array --
' ,
8822 $ 'copy in process row:
', PROW
8823 CALL PB_PDLAPRN2( M, N, A, IA, JA, DESCA2, IRPRNT,
8824 $ ICPRNT, CMATNM, NOUT, PROW,
8825 $ DESCA2( CSRC_ ), WORK )
8828 DO 40 PROW = 0, NPROW - 1
8829 DO 30 PCOL = 0, NPCOL - 1
8830.EQ..AND..EQ.
IF( ( MYROWIRPRNT )( MYCOLICPRNT ) )
8831 $ WRITE( NOUT, * ) 'replicated array --
' ,
8832 $ 'copy in process(
', PROW, ',
', PCOL, ')
'
8833 CALL PB_PDLAPRN2( M, N, A, IA, JA, DESCA2, IRPRNT,
8834 $ ICPRNT, CMATNM, NOUT, PROW, PCOL,