1 SUBROUTINE pctzrzrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 COMPLEX ( * ), 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, 0.0e+0 ) )
131 CHARACTER COLBTOP, ROWBTOP
132 INTEGER I, IACOL, IAROW, IB
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
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
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 pclarzt(
'Backward',
'Rowwise', l, ib, a, ia, jm1, desca,
189 $ tau, work( ipt ), work( ipw ) )
193 CALL pclacpy( 'all
', IB, L, A, IA, JM1, DESCA, WORK( IPV ), 1,
198 CALL PCLACPY( 'lower
', IB-1, IB-1, A, IA+1, JA, DESCA,
199 $ WORK( IPV ), 1, ICOFF+1, DESCV )
203 CALL PCLASET( 'all
', IB, L, ZERO, ZERO, A, IA, JM1, DESCA )
204 CALL PCLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, IA+1, JA,
209 CALL PCLARZB( 'right
', 'conjugate transpose
', 'backward
',
210 $ 'rowwise
', IN-IA+1, N, IB, L, WORK( IPV ), 1, JV,
211 $ DESCV, WORK( IPT ), A, IA, JA, DESCA, WORK( IPW ) )
215 CALL PCLACPY( '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 PCLARZT( 'backward
', 'rowwise
', L, IB, A, I, JM1, DESCA,
228 $ TAU, WORK( IPT ), WORK( IPW ) )
232 CALL PCLACPY( 'all
', IB, L, A, I, JM1, DESCA, WORK( IPV ), 1,
237 CALL PCLACPY( 'lower
', IB-1, IB-1, A, I+1, JA+I-IA, DESCA,
238 $ WORK( IPV ), 1, ICOFF+1+I-IA, DESCV )
242 CALL PCLASET( 'all
', IB, L, ZERO, ZERO, A, I, JM1, DESCA )
243 CALL PCLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, I+1, JA+I-IA,
248 CALL PCLARZB( 'right
', 'conjugate transpose
', 'backward
',
249 $ 'rowwise
', I+IB-IA, N-I+IA, IB, L, WORK( IPV ),
250 $ 1, JV, DESCV, WORK( IPT ), A, IA, JA+I-IA, DESCA,
253 CALL PCLACPY( '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 descset(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld)
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine pclacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pclarzb(side, trans, direct, storev, m, n, k, l, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pclarzt(direct, storev, n, k, v, iv, jv, descv, tau, t, work)