1 SUBROUTINE pzgeqlrv( 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, , IIA, IPT, IPV, IPW, IROFF,
136 $ IV, J, JB, JJA, JN, K, MP, MYCOL, MYROW, NPCOL,
140 INTEGER DESCV( DLEN_ )
148 INTEGER ICEIL, NUMROC
149 EXTERNAL iceil, numroc
158 ictxt = desca( ctxt_ )
162 jn =
min( iceil( ja+n-k, desca( nb_ ) ) * desca( nb_ ), ja+n-1 )
164 iroff = mod( ia-1, desca( mb_
165 CALL infog2l( ia, ja+n-k, desca, nprow, npcol, myrow, mycol,
166 $ iia, jja, iarow, iacol )
167 mp = numroc( m+iroff, desca( mb_ ), myrow, iarow, nprow )
169 ipt = ipv + mp * desca( nb_ )
170 ipw = ipt + desca( nb_ ) * desca( nb_ )
171 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
172 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop )
173 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise''I-ring'
174 CALL pb_topset( ictxt, 'broadcast
', 'columnwise
', ' ' )
176 CALL DESCSET( DESCV, M+IROFF, DESCA( NB_ ), DESCA( MB_ ),
177 $ DESCA( NB_ ), IAROW, IACOL, ICTXT, MAX( 1, MP ) )
181 IV = 1 + M - K + IROFF
182 JB = JN - JA - N + K + 1
186 CALL PZLARFT( 'backward
', 'columnwise
', M-N+JN-JA+1, JB, A, IA,
187 $ JA+N-K, DESCA, TAU, WORK( IPT ), WORK( IPW ) )
191 CALL PZLACPY( 'all
', M-N+JN-JA+1, JB, A, IA, JA+N-K, DESCA,
192 $ WORK( IPV ), IROFF+1, 1, DESCV )
193 CALL PZLASET( 'lower
', JB, JB, ZERO, ONE, WORK( IPV ), IV,
199 CALL PZLASET( 'all
', M-K, JB, ZERO, ZERO, A, IA, JA+N-K,
201 CALL PZLASET( 'upper
', JB, JB-1, ZERO, ZERO, A, IA+M-K,
206 CALL PZLARFB( 'left
', 'no transpose
', 'backward
', 'columnwise
',
207 $ M-N+JN-JA+1, JN-JA+1, JB, WORK( IPV ), IROFF+1, 1,
208 $ DESCV, WORK( IPT ), A, IA, JA, DESCA, WORK( IPW ) )
210 DESCV( CSRC_ ) = MOD( DESCV( CSRC_ ) + 1, NPCOL )
214 DO 10 J = JN+1, JA+N-1, DESCA( NB_ )
215 JB = MIN( JA+N-J, DESCA( NB_ ) )
216 IV = 1 + M - N + J - JA + IROFF
220 CALL PZLARFT( 'backward
', 'columnwise
', M-N+J+JB-JA, JB, A, IA,
221 $ J, DESCA, TAU, WORK( IPT ), WORK( IPW ) )
225 CALL PZLACPY( 'all
', M-N+J+JB-JA, JB, A, IA, J, DESCA,
226 $ WORK( IPV ), IROFF+1, 1, DESCV )
227 CALL PZLASET( 'lower
', JB, JB, ZERO, ONE, WORK( IPV ), IV,
233 CALL PZLASET( 'all
', M-N+J-JA, JB, ZERO, ZERO, A, IA, J,
235 CALL PZLASET( 'upper
', JB, JB-1, ZERO, ZERO, A, IA+M-N+J-JA,
240 CALL PZLARFB( 'left
', 'no transpose
', 'backward
', 'columnwise
',
241 $ M-N+J+JB-JA, J+JB-JA, JB, WORK( IPV ), IROFF+1,
242 $ 1, DESCV, WORK( IPT ), A, IA, JA, DESCA,
245 DESCV( CSRC_ ) = MOD( DESCV( CSRC_ ) + 1, NPCOL )
249 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
250 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)