1 SUBROUTINE psgeqrrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 REAL 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_
130 parameter( one = 1.0e+0, zero = 0.0e+0 )
133 CHARACTER COLBTOP, ROWBTOP
134 INTEGER IACOL, IAROW, I, ICTXT, IIA, IPT, IPV, IPW,
135 $ IROFF, IV, J, JB, JJA, JL, JN, K, MP, MYCOL,
136 $ MYROW, NPCOL, NPROW
139 INTEGER DESCV( DLEN_ )
147 INTEGER ICEIL, INDXG2P, NUMROC
148 EXTERNAL iceil, indxg2p, numroc
157 ictxt = desca( ctxt_ )
160 iroff = mod( ia-1, desca( mb_ ) )
161 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
163 mp = numroc( m+iroff, desca( mb_ ), myrow, iarow, nprow )
165 ipt = ipv + mp * desca( nb_ )
166 ipw = ipt + desca( nb_ ) * desca( nb_ )
167 CALL pb_topget( ictxt,
'Broadcast''Rowwise'
168 CALL pb_topget( ictxt, 'broadcast
', 'columnwise
', COLBTOP )
169 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', 'd-ring
' )
170 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', ' ' )
173 JN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+K-1 )
174 JL = MAX( ( (JA+K-2) / DESCA( NB_ ) ) * DESCA( NB_ ) + 1, JA )
176 CALL DESCSET( DESCV, M+IROFF, DESCA( NB_ ), DESCA( MB_ ),
177 $ DESCA( NB_ ), IAROW, INDXG2P( JL, DESCA( NB_ ),
178 $ MYCOL, DESCA( CSRC_ ), NPCOL ), ICTXT,
181 DO 10 J = JL, JN+1, -DESCA( NB_ )
182 JB = MIN( JA+K-J, DESCA( NB_ ) )
184 IV = 1 + J - JA + IROFF
188 CALL PSLARFT( 'forward
', 'columnwise
', M-I+IA, JB, A, I, J,
189 $ DESCA, TAU, WORK( IPT ), WORK( IPW ) )
193 CALL PSLACPY( 'lower
', M-I+IA, JB, A, I, J, DESCA, WORK( IPV ),
195 CALL PSLASET( 'upper
', M-I+IA, JB, ZERO, ONE, WORK( IPV ), IV,
201 CALL PSLASET( 'lower
', M-I+IA-1, JB, ZERO, ZERO, A, I+1, J,
206 CALL PSLARFB( 'left
', 'no transpose
', 'forward
', 'columnwise
',
207 $ M-I+IA, N-J+JA, JB, WORK( IPV ), IV, 1, DESCV,
208 $ WORK( IPT ), A, I, J, DESCA, WORK( IPW ) )
210 DESCV( CSRC_ ) = MOD( DESCV( CSRC_ ) + NPCOL - 1, NPCOL )
220 CALL PSLARFT( 'forward
', 'columnwise
', M, JB, A, IA, JA, DESCA,
221 $ TAU, WORK( IPT ), WORK( IPW ) )
225 CALL PSLACPY( 'lower
', M, JB, A, IA, JA, DESCA, WORK( IPV ),
226 $ IROFF+1, 1, DESCV )
227 CALL PSLASET( 'upper
', M, JB, ZERO, ONE, WORK, IROFF+1, 1, DESCV )
232 CALL PSLASET( 'lower
', M-1, JB, ZERO, ZERO, A, IA+1, JA, DESCA )
236 CALL PSLARFB( 'left
', 'no transpose
', 'forward
', 'columnwise
', M,
237 $ N, JB, WORK( IPV ), IROFF+1, 1, DESCV, WORK( IPT ),
238 $ A, IA, JA, DESCA, WORK( IPW ) )
240 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
241 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 pslaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
subroutine pslacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pslarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pslarft(direct, storev, n, k, v, iv, jv, descv, tau, t, work)