170 SUBROUTINE cgelq( M, N, A, LDA, T, TSIZE, WORK, LWORK,
179 INTEGER INFO, LDA, M, N, TSIZE, LWORK
182 COMPLEX A( LDA, * ), T( * ), WORK( * )
189 LOGICAL LQUERY, LMINWS, MINT, MINW
190 INTEGER MB, NB, MINTSZ, NBLCKS
200 INTRINSIC max, min, mod
212 lquery = ( tsize.EQ.-1 .OR. tsize.EQ.-2 .OR.
213 $ lwork.EQ.-1 .OR. lwork.EQ.-2 )
217 IF( tsize.EQ.-2 .OR. lwork.EQ.-2 )
THEN
218 IF( tsize.NE.-1 ) mint = .true.
219 IF( lwork.NE.-1 ) minw = .true.
224 IF( min( m, n ).GT.0 )
THEN
225 mb = ilaenv( 1,
'CGELQ ',
' ', m, n, 1, -1 )
226 nb = ilaenv( 1,
'CGELQ ',
' ', m, n, 2, -1 )
231 IF( mb.GT.min( m, n ) .OR. mb.LT.1 ) mb = 1
232 IF( nb.GT.n .OR. nb.LE.m ) nb = n
234 IF( nb.GT.m .AND. n.GT.m )
THEN
235 IF( mod( n - m, nb - m ).EQ.0 )
THEN
236 nblcks = ( n - m ) / ( nb - m )
238 nblcks = ( n - m ) / ( nb - m ) + 1
247 IF( ( tsize.LT.max( 1, mb*m*nblcks + 5 ) .OR. lwork.LT.mb*m )
248 $ .AND. ( lwork.GE.m ) .AND. ( tsize.GE.mintsz )
249 $ .AND. ( .NOT.lquery ) )
THEN
250 IF( tsize.LT.max( 1, mb*m*nblcks + 5 ) )
THEN
255 IF( lwork.LT.mb*m )
THEN
263 ELSE IF( n.LT.0 )
THEN
265 ELSE IF( lda.LT.max( 1, m ) )
THEN
267 ELSE IF( tsize.LT.max( 1, mb*m*nblcks + 5 )
268 $ .AND. ( .NOT.lquery ) .AND. ( .NOT.lminws ) )
THEN
270 ELSE IF( ( lwork.LT.max( 1, m*mb ) ) .and .( .NOT.lquery )
271 $ .AND. ( .NOT.lminws ) )
THEN
279 t( 1 ) = mb*m*nblcks + 5
284 work( 1 ) = max( 1, n )
286 work( 1 ) = max( 1, mb*m )
290 CALL xerbla(
'CGELQ', -info )
292 ELSE IF( lquery )
THEN
298 IF( min( m, n ).EQ.0 )
THEN
304 IF( ( n.LE.m ) .OR. ( nb.LE.m ) .OR. ( nb.GE.n ) )
THEN
305 CALL cgelqt( m, n, mb, a, lda, t( 6 ), mb, work, info )
307 CALL claswlq( m, n, mb, nb, a, lda, t( 6 ), mb, work,
311 work( 1 ) = max( 1, mb*m )