1 SUBROUTINE pcgeqrrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 COMPLEX 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.0e+0, 0.0e+0 ),
131 $ zero = ( 0.0e+0, 0.0e+0 ) )
134 CHARACTER COLBTOP, ROWBTOP
135 INTEGER , IAROW, I, ICTXT, , IPT, IPV, IPW,
136 $ , IV, J, JB, JJA, JL, JN, K, MP, MYCOL,
137 $ MYROW, NPCOL, NPROW
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 PCLARFT( 'forward
', 'columnwise
', M-I+IA, JB, A, I, J,
190 $ DESCA, TAU, WORK( IPT ), WORK( IPW ) )
194 CALL PCLACPY( 'lower
', M-I+IA, JB, A, I, J, DESCA, WORK( IPV ),
196 CALL PCLASET( 'upper
', M-I+IA, JB, ZERO, ONE, WORK( IPV ), IV,
202 CALL PCLASET( 'lower
', M-I+IA-1, JB, ZERO, ZERO, A, I+1, J,
207 CALL PCLARFB( '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 PCLARFT( 'forward
', 'columnwise
', M, JB, A, IA, JA, DESCA,
222 $ TAU, WORK( IPT ), WORK( IPW ) )
226 CALL PCLACPY( 'lower
', M, JB, A, IA, JA, DESCA, WORK( IPV ),
227 $ IROFF+1, 1, DESCV )
228 CALL PCLASET( 'upper', m, jb, zero, one, work, iroff+1, 1, descv )
233 CALL pclaset(
'Lower', m-1, jb, zero, zero, a, ia+1, ja, desca )
237 CALL pclarfb(
'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 infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine pclarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)