172 SUBROUTINE cgeqr( M, N, A, LDA, T, TSIZE, WORK, LWORK,
181 INTEGER INFO, LDA, M, N, TSIZE, LWORK
184 COMPLEX A( LDA, * ), T( * ), WORK( * )
191 LOGICAL LQUERY, LMINWS, MINT, MINW
192 INTEGER MB, NB, MINTSZ, NBLCKS
202 INTRINSIC max, min, mod
214 lquery = ( tsize.EQ.-1 .OR. tsize.EQ.-2 .OR.
215 $ lwork.EQ.-1 .OR. lwork.EQ.-2 )
219 IF( tsize.EQ.-2 .OR. lwork.EQ.-2 )
THEN
220 IF( tsize.NE.-1 ) mint = .true.
221 IF( lwork.NE.-1 ) minw = .true.
226 IF( min( m, n ).GT.0 )
THEN
227 mb = ilaenv( 1,
'CGEQR ',
' ', m, n, 1, -1 )
228 nb = ilaenv( 1,
'CGEQR ',
' ', m, n, 2, -1 )
233 IF( mb.GT.m .OR. mb.LE.n ) mb = m
234 IF( nb.GT.min( m, n ) .OR. nb.LT.1 ) nb = 1
236 IF( mb.GT.n .AND. m.GT.n )
THEN
237 IF( mod( m - n, mb - n ).EQ.0 )
THEN
238 nblcks = ( m - n ) / ( mb - n )
240 nblcks = ( m - n ) / ( mb - n ) + 1
249 IF( ( tsize.LT.max( 1, nb*n*nblcks + 5 ) .OR. lwork.LT.nb*n )
250 $ .AND. ( lwork.GE.n ) .AND. ( tsize.GE.mintsz )
251 $ .AND. ( .NOT.lquery ) )
THEN
252 IF( tsize.LT.max( 1, nb*n*nblcks + 5 ) )
THEN
257 IF( lwork.LT.nb*n )
THEN
265 ELSE IF( n.LT.0 )
THEN
267 ELSE IF( lda.LT.max( 1, m ) )
THEN
269 ELSE IF( tsize.LT.max( 1, nb*n*nblcks + 5 )
270 $ .AND. ( .NOT.lquery ) .AND. ( .NOT.lminws ) )
THEN
272 ELSE IF( ( lwork.LT.max( 1, n*nb ) ) .AND. ( .NOT.lquery )
273 $ .AND. ( .NOT.lminws ) )
THEN
281 t( 1 ) = nb*n*nblcks + 5
286 work( 1 ) = max( 1, n )
288 work( 1 ) = max( 1, nb*n )
292 CALL xerbla(
'CGEQR', -info )
294 ELSE IF( lquery )
THEN
300 IF( min( m, n ).EQ.0 )
THEN
306 IF( ( m.LE.n ) .OR. ( mb.LE.n ) .OR. ( mb.GE.m ) )
THEN
307 CALL cgeqrt( m, n, nb, a, lda, t( 6 ), nb, work, info )
309 CALL clatsqr( m, n, mb, nb, a, lda, t( 6 ), nb, work,
313 work( 1 ) = max( 1, nb*n )