1 SUBROUTINE pzlacp2( UPLO, M, N, A, IA, JA, DESCA, B, IB, JB,
10 INTEGER IA, IB, JA, JB, M, N
13 INTEGER DESCA( * ), DESCB( * )
14 COMPLEX*16 A( * ), B( * )
143 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
145 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
146 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
147 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
150 INTEGER HEIGHT, IACOL, IAROW, IBASE, IBCOL, ,
151 $ icoffa, iia, iiaa, iib, iibb, iibega, iibegb,
152 $ iienda, iinxta, iinxtb, ileft, iright, iroffa,
153 $ itop, jja, jjaa, jjb, jjbb, jjbega, jjbegb,
154 $ jjenda, jjnxta, jjnxtb, lda, ldb, mba, mp,
155 $ mpaa, mycol, mydist, myrow, nba, npcol, nprow,
163 INTEGER ICEIL, NUMROC
164 EXTERNAL iceil, lsame, numroc
171 IF( m.EQ.0 .OR. n.EQ.0 )
178 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
180 CALL infog2l( ib, jb, descb, nprow, npcol, myrow, mycol, iib, jjb,
186 iroffa = mod( ia-1, mba )
187 icoffa = mod( ja-1, nba )
190 IF( n.LE.( nba-icoffa ) )
THEN
228 IF( mycol.EQ.iacol )
THEN
230 mp = numroc( m+iroffa, mba, myrow, iarow, nprow )
235 mydist = mod( myrow-iarow+nprow, nprow )
236 itop = mydist * mba - iroffa
238 IF( lsame( uplo,
'U' ) )
THEN
240 itop =
max( 0, itop )
242 iienda = iia + mp - 1
243 iinxta =
min( iceil( iibega, mba ) * mba, iienda )
245 iinxtb = iibegb + iinxta - iibega
248 IF( ( n-itop ).GT.0 )
THEN
249 CALL zlamov( uplo, iinxta-iibega+1, n-itop,
250 $ a( iibega+(jja+itop-1)*lda ), lda,
251 $ b( iibegb+(jjb+itop-1)*ldb ), ldb )
252 mydist = mydist + nprow
253 itop = mydist * mba - iroffa
255 iinxta =
min( iinxta+mba, iienda )
257 iinxtb = iibegb + iinxta - iibega
261 ELSE IF( lsame( uplo,
'L' ) )
THEN
268 ibase =
min( itop + mba, n )
269 itop =
min(
max( 0, itop ), n )
272 IF( jjaa.LE.( jja+n-1 ) )
THEN
273 height = ibase - itop
274 CALL zlamov( 'all
', MPAA, ITOP-JJAA+JJA,
275 $ A( IIAA+(JJAA-1)*LDA ), LDA,
276 $ B( IIBB+(JJBB-1)*LDB ), LDB )
277 CALL ZLAMOV( UPLO, MPAA, HEIGHT,
278 $ A( IIAA+(JJA+ITOP-1)*LDA ), LDA,
279 $ B( IIBB+(JJB+ITOP-1)*LDB ), LDB )
280 MPAA = MAX( 0, MPAA - HEIGHT )
285 MYDIST = MYDIST + NPROW
286 ITOP = MYDIST * MBA - IROFFA
287 IBASE = MIN( ITOP + MBA, N )
288 ITOP = MIN( ITOP, N )
294 CALL ZLAMOV( 'all
', MP, N, A( IIA+(JJA-1)*LDA ),
295 $ LDA, B( IIB+(JJB-1)*LDB ), LDB )
301.LE.
ELSE IF( M( MBA-IROFFA ) ) THEN
326.EQ.
IF( MYROWIAROW ) THEN
328 NQ = NUMROC( N+ICOFFA, NBA, MYCOL, IACOL, NPCOL )
333 MYDIST = MOD( MYCOL-IACOL+NPCOL, NPCOL )
334 ILEFT = MYDIST * NBA - ICOFFA
336 IF( LSAME( UPLO, 'l
' ) ) THEN
338 ILEFT = MAX( 0, ILEFT )
340 JJENDA = JJA + NQ - 1
341 JJNXTA = MIN( ICEIL( JJBEGA, NBA ) * NBA, JJENDA )
343 JJNXTB = JJBEGB + JJNXTA - JJBEGA
346.GT.
IF( ( M-ILEFT )0 ) THEN
347 CALL ZLAMOV( UPLO, M-ILEFT, JJNXTA-JJBEGA+1,
348 $ A( IIA+ILEFT+(JJBEGA-1)*LDA ), LDA,
349 $ B( IIB+ILEFT+(JJBEGB-1)*LDB ), LDB )
350 MYDIST = MYDIST + NPCOL
351 ILEFT = MYDIST * NBA - ICOFFA
353 JJNXTA = MIN( JJNXTA+NBA, JJENDA )
355 JJNXTB = JJBEGB + JJNXTA - JJBEGA
359 ELSE IF( LSAME( UPLO, 'u
' ) ) THEN
366 IRIGHT = MIN( ILEFT + NBA, M )
367 ILEFT = MIN( MAX( 0, ILEFT ), M )
370.LE.
IF( IIAA( IIA+M-1 ) ) THEN
371 WIDE = IRIGHT - ILEFT
372 CALL ZLAMOV( 'all
', ILEFT-IIAA+IIA, NQAA,
373 $ A( IIAA+(JJAA-1)*LDA ), LDA,
374 $ B( IIBB+(JJBB-1)*LDB ), LDB )
375 CALL ZLAMOV( UPLO, WIDE, NQAA,
376 $ A( IIA+ILEFT+(JJAA-1)*LDA ), LDA,
377 $ B( IIB+ILEFT+(JJBB-1)*LDB ), LDB )
378 NQAA = MAX( 0, NQAA - WIDE )
383 MYDIST = MYDIST + NPCOL
384 ILEFT = MYDIST * NBA - ICOFFA
385 IRIGHT = MIN( ILEFT + NBA, M )
386 ILEFT = MIN( ILEFT, M )
392 CALL ZLAMOV( 'all
', M, NQ, A( IIA+(JJA-1)*LDA ),
393 $ LDA, B( IIB+(JJB-1)*LDB ), LDB )