1 SUBROUTINE pcung2l( M, N, K, A, IA, JA, DESCA, TAU, WORK, LWORK,
10 INTEGER , INFO, JA, K, LWORK, M, N
14 COMPLEX A( * ), TAU( * ), WORK( * )
157 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_
159 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
160 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
161 $ rsrc_ = 7, csrc_ = 8, lld_
164 $ zero = ( 0.0e+0, 0.0e+0 ) )
168 CHARACTER COLBTOP, ROWBTOP
179 INTEGER INDXG2L, INDXG2P, NUMROC
180 EXTERNAL indxg2l, indxg2p, numroc
189 ictxt = desca( ctxt_ )
195 IF( nprow.EQ.-1 )
THEN
198 CALL chk1mat( m, 1, n, 2, ia, ja, desca, 7, info )
200 iarow = indxg2p( ia, desca( mb_ ), myrow, desca( rsrc_ ),
202 iacol = indxg2p( ja, desca( nb_ ), mycol, desca( csrc_ ),
204 mpa0 = numroc( m+mod( ia-1, desca( mb_ ) ), desca( mb_ ),
205 $ myrow, iarow, nprow )
206 nqa0 = numroc( n+mod( ja-1, desca( nb_ ) ), desca( nb_ ),
207 $ mycol, iacol, npcol )
208 lwmin = mpa0 +
max( 1, nqa0 )
210 work( 1 ) =
cmplx( real( lwmin ) )
211 lquery = ( lwork.EQ.-1 )
214 ELSE IF( k.LT.0 .OR. k.GT.n )
THEN
216 ELSE IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
222 CALL pxerbla( ictxt,
'PCUNG2L', -info )
223 CALL blacs_abort( ictxt, 1 )
225 ELSE IF( lquery )
THEN
234 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
235 CALL pb_topget( ictxt,
'Broadcast', 'columnwise
', COLBTOP )
236 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', 'i-ring
' )
237 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', ' ' )
241 CALL PCLASET( 'all
', M-N, N-K, ZERO, ZERO, A, IA, JA, DESCA )
242 CALL PCLASET( 'all
', N, N-K, ZERO, ONE, A, IA+M-N, JA, DESCA )
245 NQA0 = MAX( 1, NUMROC( JA+N-1, DESCA( NB_ ), MYCOL,
246 $ DESCA( CSRC_ ), NPCOL ) )
247 DO 10 J = JA+N-K, JA+N-1
251 CALL PCELSET( A, IA+M-N+J-JA, J, DESCA, ONE )
252 CALL PCLARF( 'left
', M-N+J-JA+1, J-JA, A, IA, J, DESCA, 1, TAU,
253 $ A, IA, JA, DESCA, WORK )
255 JJ = INDXG2L( J, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ), NPCOL )
256 IACOL = INDXG2P( J, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),
259 $ TAUJ = TAU( MIN( JJ, NQA0 ) )
260 CALL PCSCAL( M-N+J-JA, -TAUJ, A, IA, J, DESCA, 1 )
261 CALL PCELSET( A, IA+M-N+J-JA, J, DESCA, ONE-TAUJ )
265 CALL PCLASET( 'all
', JA+N-1-J, 1, ZERO, ZERO, A, IA+M-N+J-JA+1,
270 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
271 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
273 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
subroutine pcscal(n, alpha, x, ix, jx, descx, incx)
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pclaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
subroutine pclarf(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
subroutine pcung2l(m, n, k, a, ia, ja, desca, tau, work, lwork, info)