1 SUBROUTINE pzgeqrrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 COMPLEX*16 A( * ), TAU( * ), 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 )
130 parameter( one = ( 1.0d+0, 0.0d+0 ),
131 $ zero = ( 0.0d+0, 0.0d+0 ) )
134 CHARACTER COLBTOP, ROWBTOP
135 INTEGER IACOL, IAROW, I, ICTXT, IIA, IPT, IPV, IPW,
136 $ IROFF, IV, J, JB, JJA, JL, JN, K, MP, MYCOL,
140 INTEGER DESCV( DLEN_ )
148 INTEGER ICEIL, INDXG2P, NUMROC
149 EXTERNAL iceil, indxg2p, numroc
158 ictxt = desca( ctxt_ )
161 iroff = mod( ia-1, desca( mb_ ) )
162 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
164 mp = numroc( m+iroff, desca( mb_ ), myrow, iarow, nprow )
166 ipt = ipv + mp * desca( nb_ )
167 ipw = ipt + desca( nb_ ) * desca( nb_ )
168 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
169 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop )
170 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise',
'D-ring' )
171 CALL pb_topset( ictxt, 'broadcast
', 'columnwise
', ' ' )
174 JN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+K-1 )
175 JL = MAX( ( (JA+K-2) / DESCA( NB_ ) ) * DESCA( NB_ ) + 1, JA )
177 CALL DESCSET( DESCV, M+IROFF, DESCA( NB_ ), DESCA( MB_ ),
178 $ DESCA( NB_ ), IAROW, INDXG2P( JL, DESCA( NB_ ),
179 $ MYCOL, DESCA( CSRC_ ), NPCOL ), ICTXT,
182 DO 10 J = JL, JN+1, -DESCA( NB_ )
183 JB = MIN( JA+K-J, DESCA( NB_ ) )
185 IV = 1 + J - JA + IROFF
189 CALL PZLARFT( 'forward
', 'columnwise
', M-I+IA, JB, A, I, J,
190 $ DESCA, TAU, WORK( IPT ), WORK( IPW ) )
194 CALL PZLACPY( 'lower
', M-I+IA, JB, A, I, J, DESCA, WORK( IPV ),
196 CALL PZLASET( 'upper
', M-I+IA, JB, ZERO, ONE, WORK( IPV ), IV,
202 CALL PZLASET( 'lower
', M-I+IA-1, JB, ZERO, ZERO, A, I+1, J,
207 CALL PZLARFB( 'left
', 'no transpose
', 'forward
', 'columnwise
',
208 $ M-I+IA, N-J+JA, JB, WORK( IPV ), IV, 1, DESCV,
209 $ WORK( IPT ), A, I, J, DESCA, WORK( IPW ) )
211 DESCV( CSRC_ ) = MOD( DESCV( CSRC_ ) + NPCOL - 1, NPCOL )
221 CALL PZLARFT( 'forward
', 'columnwise
', M, JB, A, IA, JA, DESCA,
222 $ TAU, WORK( IPT ), WORK( IPW ) )
226 CALL PZLACPY( 'lower
', M, JB, A, IA, JA, DESCA, WORK( IPV ),
227 $ IROFF+1, 1, DESCV )
228 CALL PZLASET( 'upper
', M, JB, ZERO, ONE, WORK, IROFF+1, 1, DESCV )
233 CALL PZLASET( 'lower
', M-1, JB, ZERO, ZERO, A, IA+1, JA, DESCA )
237 CALL PZLARFB( 'left
', 'no transpose
', 'forward
', 'columnwise
', M,
238 $ N, JB, WORK( IPV ), IROFF+1, 1, DESCV, WORK( IPT ),
239 $ A, IA, JA, DESCA, WORK( IPW ) )
241 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
242 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 pzlacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pzlarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pzlarft(direct, storev, n, k, v, iv, jv, descv, tau, t, work)