1 SUBROUTINE pstzrzrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 REAL A( * ), TAU( * ), WORK( * )
122 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
123 $ LLD_, MB_, M_, NB_, N_, RSRC_
124 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
125 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
126 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
128 parameter( zero = 0.0e+0 )
132INTEGER I, IACOL, IAROW, IB, ICOFF, ICTXT, IIA, IN,
133 $ IPT, IPV, IPW, JJA, JM1, JV, L, MYCOL, MYROW,
137 INTEGER DESCV( DLEN_ )
145 INTEGER ICEIL, NUMROC
146 EXTERNAL iceil, numroc
155 ictxt = desca( ctxt_ )
164 jm1 = ja +
min( m+1, n ) - 1
165 in =
min( iceil( ia, desca( mb_ ) ) * desca( mb_ ), ia+m-1 )
166 icoff = mod( ja-1, desca( nb_ ) )
167 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
169 nq = numroc( n+icoff, desca( nb_ ), mycol, iacol, npcol )
171 ipt = ipv + nq * desca( mb_ )
172 ipw = ipt + desca( mb_ ) * desca( mb_ )
173 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop
174 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop
175 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise',
' ' )
176 CALL pb_topset( ictxt,
'Broadcast',
'Columnwise',
'I-ring' )
178 CALL descset( descv, desca( mb_ ), n + icoff, desca( mb_ ),
179 $ desca( nb_ ), iarow, iacol, ictxt, desca( mb_ ) )
184 jv = icoff + jm1 - ja + 1
188 CALL pslarzt( 'backward
', 'rowwise
', L, IB, A, IA, JM1, DESCA,
189 $ TAU, WORK( IPT ), WORK( IPW ) )
193 CALL PSLACPY( 'all
', IB, L, A, IA, JM1, DESCA, WORK( IPV ), 1,
198 CALL PSLACPY( 'lower
', IB-1, IB-1, A, IA+1, JA, DESCA,
199 $ WORK( IPV ), 1, ICOFF+1, DESCV )
203 CALL PSLASET( 'all
', IB, L, ZERO, ZERO, A, IA, JM1, DESCA )
204 CALL PSLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, IA+1, JA,
209 CALL PSLARZB( 'right
', 'transpose
', 'backward
', 'rowwise
',
210 $ IN-IA+1, N, IB, L, WORK( IPV ), 1, JV, DESCV,
211 $ WORK( IPT ), A, IA, JA, DESCA, WORK( IPW ) )
215 CALL PSLACPY( 'lower
', IB-1, IB-1, WORK( IPV ), 1, ICOFF+1, DESCV,
216 $ A, IA+1, JA, DESCA )
218 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + 1, NPROW )
222 DO 10 I = IN+1, IA+M-1, DESCA( MB_ )
223 IB = MIN( IA+M-I, DESCA( MB_ ) )
227 CALL PSLARZT( 'backward
', 'rowwise
', L, IB, A, I, JM1, DESCA,
228 $ TAU, WORK( IPT ), WORK( IPW ) )
232 CALL PSLACPY( 'all
', IB, L, A, I, JM1, DESCA, WORK( IPV ), 1,
237 CALL PSLACPY( 'lower
', IB-1, IB-1, A, I+1, JA+I-IA, DESCA,
238 $ WORK( IPV ), 1, ICOFF+1+I-IA, DESCV )
242 CALL PSLASET( 'all
', IB, L, ZERO, ZERO, A, I, JM1, DESCA )
243 CALL PSLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, I+1, JA+I-IA,
248 CALL PSLARZB( 'right
', 'transpose
', 'backward
', 'rowwise
',
249 $ I+IB-IA, N-I+IA, IB, L, WORK( IPV ), 1, JV,
250 $ DESCV, WORK( IPT ), A, IA, JA+I-IA, DESCA,
253 CALL PSLACPY( 'lower
', IB-1, IB-1, WORK( IPV ), 1,
254 $ ICOFF+1+I-IA, DESCV, A, I+1, JA+I-IA, DESCA )
256 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + 1, NPROW )
260 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
261 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine pslacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pslarzb(side, trans, direct, storev, m, n, k, l, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pslarzt(direct, storev, n, k, v, iv, jv, descv, tau, t, work)