1 SUBROUTINE psgelq2( M, N, A, IA, JA, DESCA, TAU, WORK, LWORK,
10 INTEGER IA, INFO, JA, LWORK, M, N
14 REAL A( * ), TAU( * ), WORK( * )
164 INTEGER , CSRC_, CTXT_, DLEN_, ,
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 )
174 CHARACTER COLBTOP, ROWBTOP
175 INTEGER IACOL, IAROW, I, ICTXT, J, K, LWMIN, MP, MYCOL,
176 $ myrow, npcol, nprow, nq
188 INTRINSIC max,
min, mod, real
194 ictxt = desca( ctxt_ )
200 IF( nprow.EQ.-1 )
THEN
203 CALL chk1mat( m, 1, n, 2, ia, ja, desca, 6, info )
205 iarow = indxg2p( ia, desca( mb_ ), myrow, desca( rsrc_ ),
207 iacol = indxg2p( ja, desca( nb_ ), mycol, desca( csrc_ ),
210 $ myrow, iarow, nprow )
211 nq =
numroc( n+mod( ja-1, desca( nb_ ) ), desca( nb_ ),
213 lwmin = nq +
max( 1, mp )
215 work( 1 ) = real( lwmin )
216 lquery = ( lwork.EQ.-1 )
217 IF( lwork.LT.lwmin .AND. .NOT.lquery )
223 CALL pxerbla( ictxt,
'PSGELQ2', -info )
224 CALL blacs_abort( ictxt, 1 )
226 ELSE IF( lquery )
THEN
232 IF( m.EQ.0 .OR. n.EQ.0 )
235 CALL pb_topget( ictxt,
'Broadcast', 'rowwise
', ROWBTOP )
236 CALL PB_TOPGET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
237 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ' ' )
238 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', 'i-ring
' )
247 CALL PSLARFG( N-J+JA, AII, I, J, A, I, MIN( J+1, JA+N-1 ),
248 $ DESCA, DESCA( M_ ), TAU )
250.LT.
IF( IIA+M-1 ) THEN
254 CALL PSELSET( A, I, J, DESCA, ONE )
255 CALL PSLARF( 'right
', M-I+IA-1, N-J+JA, A, I, J, DESCA,
256 $ DESCA( M_ ), TAU, A, I+1, J, DESCA, WORK )
258 CALL PSELSET( A, I, J, DESCA, AII )
262 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ROWBTOP )
263 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
265 WORK( 1 ) = REAL( LWMIN )
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine psgelq2(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pslarf(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
subroutine pslarfg(n, alpha, iax, jax, x, ix, jx, descx, incx, tau)