1 SUBROUTINE pcgetrf( 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_,
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.0e+0 )
145 CHARACTER COLBTOP, COLCTOP, ROWBTOP
146 INTEGER I, ICOFF, ICTXT, IINFO, IN, IROFF, J, JB, JN,
147 $ MN, MYCOL, MYROW, NPCOL, NPROW
150 INTEGER IDUM1( 1 ), IDUM2( 1 )
154 $ pb_topget, pb_topset, pcgemm,
pcgetf2,
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,
'PCGETRF', -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 pcgetf2( m, jb, a, ia, ja, desca, ipiv
232 CALL pclaswp(
'Forward',
'Rows', n-jb, a, ia, jn+1, desca,
237 CALL pctrsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
238 $ n-jb, one, a, ia, ja, desca, a, ia, jn+1, desca )
244 CALL pcgemm( '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 PCGETF2( M-J+JA, JB, A, I, J, DESCA, IPIV, IINFO )
262.EQ..AND..GT.
IF( INFO0 IINFO0 )
263 $ INFO = IINFO + J - JA
267 CALL PCLASWP( 'forward
', 'rowwise
', J-JA, A, IA, JA, DESCA,
270.LE.
IF( J-JA+JB+1N ) THEN
274 CALL PCLASWP( 'forward
', 'rowwise
', N-J-JB+JA, A, IA, J+JB,
275 $ DESCA, I, I+JB-1, IPIV )
279 CALL PCTRSM( '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 PCGEMM( '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 pctrsm(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)