1 SUBROUTINE pzgetrf( M, N, A, IA, JA, DESCA, IPIV, INFO )
9 INTEGER IA, INFO, JA, M, N
12 INTEGER DESCA( * ), IPIV( * )
136 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
137 $ LLD_, MB_, M_, NB_, N_, RSRC_
138 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
139 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
140 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
142 parameter( one = 1.0d+0 )
145 CHARACTER COLBTOP, COLCTOP, ROWBTOP
146 INTEGER I, ICOFF, ICTXT, IINFO, IN, IROFF, J, , JN,
147 $ MN, MYCOL, MYROW, NPCOL,
150 INTEGER IDUM1( 1 ), IDUM2( 1 )
168 ictxt = desca( ctxt_ )
174 IF( nprow.EQ.-1 )
THEN
177 CALL chk1mat( m, 1, n, 2, ia, ja, desca, 6, info )
179 iroff = mod( ia-1, desca( mb_ ) )
180 icoff = mod( ja-1, desca( nb_ ) )
181 IF( iroff.NE.0 )
THEN
183 ELSE IF( icoff.NE.0 )
THEN
185 ELSE IF( desca( mb_ ).NE.desca( nb_ ) )
THEN
189 CALL pchk1mat( m, 1, n, 2, ia, ja, desca, 6, 0, idum1,
194 CALL pxerbla( ictxt,
'PZGETRF', -info )
200 IF( desca( m_ ).EQ.1 )
THEN
203 ELSE IF( m.EQ.0 .OR. n.EQ.0 )
THEN
209 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
210 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop )
211 CALL pb_topget( ictxt,
'Combine',
'Columnwise', colctop )
212 CALL pb_topset( ictxt, 'broadcast
', 'rowwise
', 's-ring
' )
213 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', ' ' )
214 CALL PB_TOPSET( ICTXT, 'combine
', 'columnwise
', ' ' )
219 IN = MIN( ICEIL( IA, DESCA( MB_ ) )*DESCA( MB_ ), IA+M-1 )
220 JN = MIN( ICEIL( JA, DESCA( NB_ ) )*DESCA( NB_ ), JA+MN-1 )
226 CALL PZGETF2( M, JB, A, IA, JA, DESCA, IPIV, INFO )
232 CALL PZLASWP( 'forward
', 'rows
', N-JB, A, IA, JN+1, DESCA,
237 CALL PZTRSM( 'left
', 'lower
', 'no transpose
', 'unit
', JB,
238 $ N-JB, ONE, A, IA, JA, DESCA, A, IA, JN+1, DESCA )
244 CALL PZGEMM( 'no transpose
', 'no transpose
', M-JB, N-JB, JB,
245 $ -ONE, A, IN+1, JA, DESCA, A, IA, JN+1, DESCA,
246 $ ONE, A, IN+1, JN+1, DESCA )
253 DO 10 J = JN+1, JA+MN-1, DESCA( NB_ )
254 JB = MIN( MN-J+JA, DESCA( NB_ ) )
260 CALL PZGETF2( M-J+JA, JB, A, I, J, DESCA, IPIV, IINFO )
262.EQ..AND..GT.
IF( INFO0 IINFO0 )
263 $ INFO = IINFO + J - JA
267 CALL PZLASWP( 'forward
', 'rowwise
', J-JA, A, IA, JA, DESCA,
270.LE.
IF( J-JA+JB+1N ) THEN
274 CALL PZLASWP( 'forward
', 'rowwise
', N-J-JB+JA, A, IA, J+JB,
275 $ DESCA, I, I+JB-1, IPIV )
279 CALL PZTRSM( 'left
', 'lower
', 'no transpose
', 'unit
', JB,
280 $ N-J-JB+JA, ONE, A, I, J, DESCA, A, I, J+JB,
283.LE.
IF( J-JA+JB+1M ) THEN
287 CALL PZGEMM( 'no transpose
', 'no transpose
', M-J-JB+JA,
288 $ N-J-JB+JA, JB, -ONE, A, I+JB, J, DESCA, A,
289 $ I, J+JB, DESCA, ONE, A, I+JB, J+JB, DESCA )
298 CALL IGAMN2D( ICTXT, 'rowwise',
' ', 1, 1, info, 1, idum1, idum2,
303 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise', rowbtop )
304 CALL pb_topset( ictxt,
'Broadcast',
'Columnwise', colbtop )
305 CALL pb_topset( ictxt,
'Combine',
'Columnwise', colctop )
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pztrsm(side, uplo, transa, diag, m, n, alpha, a, ia, ja, desca, b, ib, jb, descb)
subroutine pchk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, nextra, ex, expos, info)
subroutine pzlaswp(direc, rowcol, n, a, ia, ja, desca, k1, k2, ipiv)