1 SUBROUTINE pdgelqrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 DOUBLE PRECISION A( * ), TAU( * ), WORK( * )
122 INTEGER BLOCK_CYCLIC_2D, , 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 )
127 DOUBLE PRECISION ONE, ZERO
128 parameter( one = 1.0d+0, zero = 0.0d+0 )
131 CHARACTER COLBTOP, ROWBTOP
132 INTEGER I, , IAROW, IB, ICOFF, ICTXT, IIA, IL, IN,
133 $ IPT, IPV, IPW, J, JJA, JV, K, MYCOL, MYROW,
137 INTEGER DESCV( DLEN_ )
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 PDLARFT( 'forward
', 'rowwise
', N-J+JA, IB, A, I, J, DESCA,
184 $ TAU, WORK( IPT ), WORK( IPW ) )
188 CALL PDLACPY( 'upper
', IB, N-J+JA, A, I, J, DESCA, WORK( IPV ),
190 CALL PDLASET( 'lower
', IB, N-J+JA, ZERO, ONE, WORK( IPV ), 1,
196 CALL PDLASET( 'upper
', IB, N-J+JA-1, ZERO, ZERO, A, I, J+1,
201 CALL PDLARFB( '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 PDLARFT( 'forward
', 'rowwise
', N, IB, A, IA, JA, DESCA, TAU,
216 $ WORK( IPT ), WORK( IPW ) )
220 CALL PDLACPY( 'upper
', IB, N, A, IA, JA, DESCA, WORK( IPV ), 1,
222 CALL PDLASET( 'lower
', IB, N, ZERO, ONE, WORK, 1, ICOFF+1, DESCV )
227 CALL PDLASET( 'upper
', IB, N-1, ZERO, ZERO, A, IA, JA+1, DESCA )
231 CALL PDLARFB( '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 pdlacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pdlarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)
subroutine pdlarft(direct, storev, n, k, v, iv, jv, descv, tau, t, work)