1 SUBROUTINE pcgelq2( M, N, A, IA, JA, DESCA, TAU, WORK, LWORK,
10 INTEGER IA, INFO, JA, LWORK, M, N
14 COMPLEX A( * ), TAU( * ), WORK( * )
164 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
165 $ lld_, mb_, m_, nb_, n_, rsrc_
166 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
167 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
168 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
170 parameter( one = ( 1.0e+0, 0.0e+0 ) )
174 CHARACTER COLBTOP, ROWBTOP
175 INTEGER IACOL, IAROW, I, ICTXT, J, K, LWMIN, MP, MYCOL,
176 $ myrow, npcol, nprow, nq
185 INTEGER INDXG2P, NUMROC
186 EXTERNAL indxg2p, numroc
195 ictxt = desca( ctxt_ )
201 IF( nprow.EQ.-1 )
THEN
204 CALL chk1mat( m, 1, n, 2, ia, ja, desca, 6, info )
206 iarow = indxg2p( ia, desca( mb_ ), myrow, desca( rsrc_ ),
208 iacol = indxg2p( ja, desca( nb_ ), mycol, desca( csrc_ ),
210 mp = numroc( m+mod( ia-1, desca( mb_ ) ), desca( mb_ ),
212 nq = numroc( n+mod( ja-1, desca( nb_ ) ), desca( nb_ ),
213 $ mycol, iacol, npcol )
214 lwmin = nq +
max( 1, mp )
216 work( 1 ) =
cmplx( real( lwmin ) )
217 lquery = ( lwork.EQ.-1 )
218 IF( lwork.LT.lwmin .AND. .NOT.lquery )
225 CALL blacs_abort( ictxt, 1 )
227 ELSE IF( lquery )
THEN
233 IF( m.EQ.0 .OR. n.EQ.0 )
236 CALL pb_topget( ictxt,
'Broadcast',
'Rowwise', rowbtop )
237 CALL pb_topget( ictxt,
'Broadcast',
'Columnwise', colbtop )
238 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise', '
' )
239 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', 'i-ring
' )
248 CALL PCLACGV( N-J+JA, A, I, J, DESCA, DESCA( M_ ) )
249 CALL PCLARFG( N-J+JA, AII, I, J, A, I, MIN( J+1, JA+N-1 ),
250 $ DESCA, DESCA( M_ ), TAU )
252.LT.
IF( IIA+M-1 ) THEN
256 CALL PCELSET( A, I, J, DESCA, ONE )
257 CALL PCLARF( 'right
', M-I+IA-1, N-J+JA, A, I, J, DESCA,
258 $ DESCA( M_ ), TAU, A, I+1, J, DESCA, WORK )
260 CALL PCELSET( A, I, J, DESCA, AII )
261 CALL PCLACGV( N-J+JA, A, I, J, DESCA, DESCA( M_ ) )
265 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
266 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
268 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pcgelq2(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pclarf(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
subroutine pclarfg(n, alpha, iax, jax, x, ix, jx, descx, incx, tau)