1 SUBROUTINE pztzrzrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 COMPLEX*16 A( * ), TAU( * ), WORK( * )
122 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
123 $ LLD_, , 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.0d+0, 0.0d+0 ) )
131 CHARACTER COLBTOP, ROWBTOP
132 INTEGER 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 PZLARZT( 'backward
', 'rowwise
', L, IB, A, IA, JM1, DESCA,
189 $ TAU, WORK( IPT ), WORK( IPW ) )
193 CALL PZLACPY( 'all
', IB, L, A, IA, JM1, DESCA, WORK( IPV ), 1,
198 CALL PZLACPY( 'lower
', IB-1, IB-1, A, IA+1, JA, DESCA,
199 $ WORK( IPV ), 1, ICOFF+1, DESCV )
203 CALL PZLASET( 'all
', IB, L, ZERO, ZERO, A, IA, JM1, DESCA )
204 CALL PZLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, IA+1, JA,
209 CALL PZLARZB( '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 PZLACPY( '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 PZLARZT( 'backward
', 'rowwise
', L, IB, A, I, JM1, DESCA,
228 $ TAU, WORK( IPT ), WORK( IPW ) )
232 CALL PZLACPY( 'all
', IB, L, A, I, JM1, DESCA, WORK( IPV ), 1,
237 CALL PZLACPY( 'lower
', IB-1, IB-1, A, I+1, JA+I-IA, DESCA,
238 $ WORK( IPV ), 1, ICOFF+1+I-IA, DESCV )
242 CALL PZLASET( 'all
', IB, L, ZERO, ZERO, A, I, JM1, DESCA )
243 CALL PZLASET( 'lower
', IB-1, IB-1, ZERO, ZERO, A, I+1, JA+I-IA,
248 CALL PZLARZB( '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 PZLACPY( '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 pzlaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
subroutine pzlacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pzlarzb(side, trans, direct, storev, m, n, k, l, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pzlarzt(direct, storev, n, k, v, iv, jv, descv, tau, t, work)