1 SUBROUTINE pzung2l( M, N, K, A, IA, JA, DESCA, TAU, WORK, LWORK,
10 INTEGER IA, INFO, JA, K, LWORK, M, N
14 COMPLEX*16 A( * ), TAU( * ), WORK( * )
157 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
158 $ lld_, mb_, m_, nb_, n_, rsrc_
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_ = 9 )
163 parameter( one = ( 1.0d+0, 0.0d+0 ),
168 CHARACTER COLBTOP, ROWBTOP
169 INTEGER IACOL, IAROW, ICTXT, J, JJ, LWMIN, MPA0, MYCOL,
170 $ myrow, npcol, nprow, nqa0
179 INTEGER INDXG2L, INDXG2P, NUMROC
180 EXTERNAL indxg2l, indxg2p, numroc
183 INTRINSIC dble, dcmplx,
max,
min, mod
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_
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 ) = dcmplx( dble( lwmin ) )
211 lquery = ( lwork.EQ.-1 )
214 ELSE IF( k.LT.0 .OR. k.GT.n
THEN
216 ELSE IF( lwork.LT.lwmin .AND.
THEN
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 PZLASET( 'all
', M-N, N-K, ZERO, ZERO, A, IA, JA, DESCA )
242 CALL PZLASET( '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 PZELSET( A, IA+M-N+J-JA, J, DESCA, ONE )
252 CALL PZLARF( '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 PZSCAL( M-N+J-JA, -TAUJ, A, IA, J, DESCA, 1 )
261 CALL PZELSET( A, IA+M-N+J-JA, J, DESCA, ONE-TAUJ )
265 CALL PZLASET( '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 ) = DCMPLX( DBLE( LWMIN ) )
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pzlarf(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
subroutine pzung2l(m, n, k, a, ia, ja, desca, tau, work, lwork, info)