1 SUBROUTINE pdlaprnt( M, N, A, IA, JA, DESCA, IRPRNT, ICPRNT,
10 INTEGER IA, ICPRNT, IRPRNT, JA, M, N, NOUT
15 DOUBLE PRECISION A( * ), WORK( * )
124 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
125 $ lld_, mb_, m_, nb_, n_, rsrc_
126 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
127 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
128 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
131 INTEGER H, I, IACOL, IAROW, IB, ICTXT, ICURCOL,
132 $ icurrow, ii, iia, in, j, jb, jj, jja, jn, k,
133 $ lda, mycol, myrow, npcol, nprow
136 EXTERNAL blacs_barrier, blacs_gridinfo,
infog2l,
150 ictxt = desca( ctxt_ )
151 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
153 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol,
154 $ iia, jja, iarow, iacol )
163 jn =
min( iceil( ja, desca( nb_ ) ) * desca( nb_ ), ja+n-1 )
166 in =
min( iceil( ia, desca( mb_ ) ) * desca( mb_ ), ia+m-1 )
168 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
169 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
171 WRITE( nout, fmt = 9999 )
172 $ cmatnm, ia+k, ja+h, a( ii+k+(jj+h-1)*lda )
176 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
177 CALL dgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ), lda,
179 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
180 CALL dgerv2d( ictxt, ib, 1, work, desca( mb_ ),
183 WRITE( nout, fmt = 9999 )
184 $ cmatnm, ia+k-1, ja+h, work( k )
188 IF( myrow.EQ.icurrow )
190 icurrow = mod( icurrow+1, nprow )
191 CALL blacs_barrier( ictxt,
'All' )
195 DO 50 i = in+1, ia+m-1, desca( mb_ )
196 ib =
min( desca( mb_ ), ia+m-i )
197 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
198 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
200 WRITE( nout, fmt = 9999 )
201 $ cmatnm, i+k, ja+h, a( ii+k+(jj+h-1)*lda )
205 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
206 CALL dgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
207 $ lda, irprnt, icprnt )
208 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
209 CALL dgerv2d( ictxt, ib, 1, work, desca( mb_ ),
212 WRITE( nout, fmt = 9999 )
213 $ cmatnm, i+k-1, ja+h, work( k )
217 IF( myrow.EQ.icurrow )
219 icurrow = mod( icurrow+1, nprow )
220 CALL blacs_barrier( ictxt,
'All' )
227 IF( mycol.EQ.icurcol )
229 icurcol = mod( icurcol+1, npcol )
230 CALL blacs_barrier( ictxt,
'All' )
234 DO 130 j = jn+1, ja+n-1, desca( nb_ )
235 jb =
min( desca( nb_ ), ja+n-j )
237 in =
min( iceil( ia, desca( mb_ ) ) * desca( mb_ ), ia+m-1 )
239 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
240 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
242 WRITE( nout, fmt = 9999 )
243 $ cmatnm, ia+k, j+h, a( ii+k+(jj+h-1)*lda )
247 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
248 CALL dgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
249 $ lda, irprnt, icprnt )
250 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
251 CALL dgerv2d( ictxt, ib, 1, work, desca( mb_ ),
254 WRITE( nout, fmt = 9999 )
255 $ cmatnm, ia+k-1, j+h, work( k )
259 IF( myrow.EQ.icurrow )
261 icurrow = mod( icurrow+1, nprow )
262 CALL blacs_barrier( ictxt,
'All' )
266 DO 110 i = in+1, ia+m-1, desca( mb_ )
267 ib =
min( desca( mb_ ), ia+m-i )
268 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
269 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
271 WRITE( nout, fmt = 9999 )
272 $ cmatnm, i+k, j+h, a( ii+k+(jj+h-1)*lda )
276 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
277 CALL dgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
278 $ lda, irprnt, icprnt )
279 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
280 CALL dgerv2d( ictxt, ib, 1, work, desca( mb_ ),
283 WRITE( nout, fmt = 9999 )
284 $ cmatnm, i+k-1, j+h, work( k )
288 IF( myrow.EQ.icurrow )
290 icurrow = mod( icurrow+1, nprow )
291 CALL blacs_barrier( ictxt,
'All' )
298 IF( mycol.EQ.icurcol )
300 icurcol = mod( icurcol+1, npcol )
301 CALL blacs_barrier( ictxt,
'All' )
305 9999
FORMAT(a,
'(',i6,
',',i6,
')=',d30.18)