1 SUBROUTINE pzgerqrv( 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_, 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( one = ( 1.0d+0, 0.0d+0 ),
129 $ zero = ( 0.0d+0, 0.0d+0 ) )
132 CHARACTER COLBTOP, ROWBTOP
133 INTEGER I, IACOL, IAROW, IB, ICOFF, ICTXT, IIA, IN,
134 $ IPT, IPV, IPW, JJA, JV, K, MYCOL, MYROW, NPCOL,
138 INTEGER DESCV( DLEN_ )
146 INTEGER ICEIL, NUMROC
147 EXTERNAL iceil, numroc
156 ictxt = desca( ctxt_ )
160 in =
min( iceil( ia+m-k, desca( mb_ ) ) * desca( mb_ ), ia+m-1 )
162 icoff = mod( ja-1, desca( nb_ ) )
163 CALL infog2l( ia+m-k, ja, desca, nprow, npcol, myrow, mycol,
164 $ iia, jja, iarow, iacol )
165 nq = numroc( n+icoff, desca( nb_ ), mycol, iacol, npcol )
167 ipt = ipv + nq * desca( mb_ )
168 ipw = ipt + desca( mb_ ) * desca( mb_ )
169 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
170 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop )
171 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise',
' ' )
172 CALL pb_topset( ictxt,
'Broadcast',
'Columnwise',
'I-ring' )
174 CALL descset( descv, desca( mb_), n + icoff, desca( mb_ ),
175 $ desca( nb_ ), iarow, iacol, ictxt, desca( mb_ ) )
179 ib = in - ia - m + k + 1
180 jv = 1 + n - k + icoff
184 CALL pzlarft(
'Backward',
'Rowwise', n-m+in-ia+1, ib, a, ia+m-k,
185 $ ja, desca, tau, work( ipt ), work( ipw ) )
189 CALL pzlacpy(
'All', ib, n-m+in-ia+1, a, ia+m-k, ja, desca,
190 $ work( ipv ), 1, icoff+1, descv )
191 CALL pzlaset(
'Upper', ib, ib, zero, one, work( ipv ), 1, jv,
197 CALL pzlaset(
'All', ib, n-k, zero, zero, a, ia+m-k, ja,
199 CALL pzlaset(
'Lower', ib-1, ib, zero, zero, a, ia+m-k+1,
204 CALL pzlarfb( 'right
', 'conjugate transpose
', 'backward
',
205 $ 'rowwise
', IN-IA+1, N-M+IN-IA+1, IB, WORK( IPV ), 1,
206 $ ICOFF+1, DESCV, WORK( IPT ), A, IA, JA, DESCA,
209 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + 1, NPROW )
213 DO 10 I = IN+1, IA+M-1, DESCA( MB_ )
214 IB = MIN( IA+M-I, DESCA( MB_ ) )
215 JV = 1 + N - M + I - IA + ICOFF
219 CALL PZLARFT( 'backward
', 'rowwise
', N-M+I+IB-IA, IB, A, I, JA,
220 $ DESCA, TAU, WORK( IPT ), WORK( IPW ) )
224 CALL PZLACPY( 'all
', IB, N-M+I+IB-IA, A, I, JA, DESCA,
225 $ WORK( IPV ), 1, ICOFF+1, DESCV )
226 CALL PZLASET( 'upper
', IB, IB, ZERO, ONE, WORK( IPV ), 1, JV,
232 CALL PZLASET( 'all
', IB, N-M+I-IA, ZERO, ZERO, A, I, JA,
234 CALL PZLASET( 'lower
', IB-1, IB, ZERO, ZERO, A, I+1,
235 $ JA+N-M+I-IA, DESCA )
239 CALL PZLARFB( 'right
', 'conjugate transpose
', 'backward
',
240 $ 'rowwise
', I+IB-IA, N-M+I+IB-IA, IB, WORK( IPV ),
241 $ 1, ICOFF+1, DESCV, WORK( IPT ), A, IA, JA, DESCA,
244 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + 1, NPROW )
248 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
249 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
subroutine pzlarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)