1 SUBROUTINE psgelqrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 REAL 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.0e+0, zero = 0.0e+0 )
131 CHARACTER COLBTOP, ROWBTOP
132 INTEGER I, IACOL, IAROW, IB, ICOFF, ICTXT, IIA, IL, IN,
133 $ IPT, IPV, IPW, J, JJA, JV, K, MYCOL, MYROW,
144 INTEGER ICEIL, NUMROC
145 EXTERNAL iceil, numroc
154 ictxt = desca( ctxt_ )
158 in =
min( iceil( ia, desca( mb_ ) ) * desca( mb_ ), ia+k-1 )
159 il =
max( ( (ia+k-2) / desca( mb_ ) ) * desca( mb_ ) + 1, ia )
161 icoff = mod( ja-1, desca( nb_ ) )
162 CALL infog2l( il, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
164 nq = numroc( n+icoff, desca( nb_ ), mycol, iacol, npcol )
166 ipt = ipv + nq * desca( mb_ )
167 ipw = ipt + desca( mb_ ) * desca( mb_ )
168 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
169 CALL pb_topget( ictxt,
'Broadcast', 'columnwise
', COLBTOP )
170 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ' ' )
171 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', 'd-ring
' )
173 CALL DESCSET( DESCV, DESCA( MB_ ), N + ICOFF, DESCA( MB_ ),
174 $ DESCA( NB_ ), IAROW, IACOL, ICTXT, DESCA( MB_ ) )
176 DO 10 I = IL, IN+1, -DESCA( MB_ )
177 IB = MIN( IA+K-I, DESCA( MB_ ) )
179 JV = 1 + I - IA + ICOFF
183 CALL PSLARFT( 'forward
', 'rowwise
', N-J+JA, IB, A, I, J, DESCA,
184 $ TAU, WORK( IPT ), WORK( IPW ) )
188 CALL PSLACPY( 'upper
', IB, N-J+JA, A, I, J, DESCA, WORK( IPV ),
190 CALL PSLASET( 'lower
', IB, N-J+JA, ZERO, ONE, WORK( IPV ), 1,
196 CALL PSLASET( 'upper
', IB, N-J+JA-1, ZERO, ZERO, A, I, J+1,
201 CALL PSLARFB( 'right
', 'transpose
', 'forward
', 'rowwise
',
202 $ M-I+IA, N-J+JA, IB, WORK( IPV ), 1, JV, DESCV,
203 $ WORK( IPT ), A, I, J, DESCA, WORK( IPW ) )
205 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + NPROW - 1, NPROW )
215 CALL PSLARFT( 'forward
', 'rowwise
', N, IB, A, IA, JA, DESCA, TAU,
216 $ WORK( IPT ), WORK( IPW ) )
220 CALL PSLACPY( 'upper
', IB, N, A, IA, JA, DESCA, WORK( IPV ), 1,
222 CALL PSLASET( 'lower
', IB, N, ZERO, ONE, WORK, 1, ICOFF+1, DESCV )
227 CALL PSLASET( 'upper
', IB, N-1, ZERO, ZERO, A, IA, JA+1, DESCA )
231 CALL PSLARFB( 'right
', 'transpose
', 'forward
', 'rowwise
', M, N,
232 $ IB, WORK( IPV ), 1, ICOFF+1, DESCV, WORK( IPT ), A,
233 $ IA, JA, DESCA, WORK( IPW ) )
235 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
236 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 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)