1      SUBROUTINE pdlapiv( DIREC, ROWCOL, PIVROC, M, N, A, IA, JA,
 
    2     $                    DESCA, IPIV, IP, JP, DESCIP, IWORK )
 
   10      CHARACTER*1        DIREC, PIVROC, ROWCOL
 
   11      INTEGER            IA, IP, JA, JP, M, N
 
   14      INTEGER            DESCA( * ), DESCIP( * ), IPIV( * ), IWORK( * )
 
   15      DOUBLE PRECISION   A( * )
 
  199      INTEGER            BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
 
  200     $                   lld_, mb_, m_, nb_, n_, rsrc_
 
  201      parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
 
  202     $                     ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
 
  203     $                     rsrc_ = 7, csrc_ = 8, lld_ = 9 )
 
  207      INTEGER            I, ICTXT, ICURCOL, ICURROW, IIP, ITMP, IPT,
 
  208     $                   jjp, jpt, mycol, myrow, npcol, nprow
 
  211      INTEGER            DESCPT( DLEN_ )
 
  214      EXTERNAL           blacs_gridinfo, igebr2d, igebs2d,
 
  219      INTEGER            NUMROC, INDXG2P
 
  220      EXTERNAL           lsame, numroc, indxg2p
 
  229      ictxt = desca( ctxt_ )
 
  230      CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
 
  231      rowpvt = lsame( rowcol, 
'R' )
 
  236         IF( m.LE.1 .OR. n.LT.1 )
 
  241         IF( lsame( pivroc, 
'C' ) ) 
THEN 
  242            CALL pdlapv2( direc, rowcol, m, n, a, ia, ja, desca, ipiv,
 
  252            ipt = mod( jp-1, desca(mb_) )
 
  253            descpt(m_) = m + ipt + nprow*desca(mb_)
 
  255            descpt(mb_) = desca(mb_)
 
  257            descpt(rsrc_) = indxg2p( ia, desca(mb_), ia, desca(rsrc_),
 
  259            descpt(csrc_) = mycol
 
  260            descpt(ctxt_) = ictxt
 
  261            descpt(lld_) = numroc( descpt(m_), descpt(mb_), myrow,
 
  262     $                             descpt(rsrc_), nprow )
 
  263            itmp = numroc( descip(n_), descip(nb_), mycol,
 
  264     $                     descip(csrc_), npcol )
 
  265            CALL infog2l( ip, jp-ipt, descip, nprow, npcol, myrow,
 
  266     $                    mycol, iip, jjp, icurrow, icurcol )
 
  267            CALL pirow2col( ictxt, m+ipt, 1, descip(nb_), ipiv(jjp),
 
  268     $                      itmp, iwork, descpt(lld_), 0, icurcol,
 
  270     $                      mycol, iwork(descpt(lld_)-descpt(mb_)+1) )
 
  274            itmp = descpt(lld_) - descpt(mb_)
 
  275            IF( mycol.EQ.0 ) 
THEN 
  276               CALL igebs2d( ictxt, 
'Row', 
' ', itmp, 1, iwork, itmp )
 
  278               CALL igebr2d( ictxt, 
'Row', 
' ', itmp, 1, iwork, itmp,
 
  287               iwork(i) = iwork(i) - jp + ipt
 
  289            CALL pdlapv2( direc, rowcol, m, n, a, ia, ja, desca, iwork,
 
  296         IF( m.LT.1 .OR. n.LE.1 )
 
  301         IF( lsame( pivroc, 
'R' ) ) 
THEN 
  302            CALL pdlapv2( direc, rowcol, m, n, a, ia, ja, desca, ipiv,
 
  312            jpt = mod( ip-1, desca(nb_) )
 
  314            descpt(n_) = n + jpt + npcol*desca(nb_)
 
  316            descpt(nb_) = desca(nb_)
 
  317            descpt(rsrc_) = myrow
 
  318            descpt(csrc_) = indxg2p( ja, desca(nb_), ja, desca(csrc_),
 
  320            descpt(ctxt_) = ictxt
 
  322            CALL infog2l( ip-jpt, jp, descip, nprow, npcol, myrow,
 
  323     $                    mycol, iip, jjp, icurrow, icurcol )
 
  324            itmp = numroc( n+jpt, descpt(nb_), mycol, descpt(csrc_),
 
  326            CALL picol2row( ictxt, n+jpt, 1, descip(mb_), ipiv(iip),
 
  327     $                      descip(lld_), iwork, 
max(1, itmp), icurrow,
 
  328     $                      0, 0, descpt(csrc_), iwork(itmp+1) )
 
  332            IF( myrow.EQ.0 ) 
THEN 
  333               CALL igebs2d( ictxt, 
'Column', 
' ', itmp, 1, iwork,
 
  336               CALL igebr2d( ictxt, 
'Column', 
' ', itmp, 1, iwork,
 
  345               iwork(i) = iwork(i) - ip + jpt
 
  347            CALL pdlapv2( direc, rowcol, m, n, a, ia, ja, desca, iwork,