172 SUBROUTINE zgeqr( M, N, A, LDA, T, TSIZE, WORK, LWORK,
180 INTEGER INFO, LDA, M, N, TSIZE, LWORK
183 COMPLEX*16 A( LDA, * ), T( * ), WORK( * )
190 LOGICAL LQUERY, LMINWS, MINT, MINW
191 INTEGER MB, NB, MINTSZ, NBLCKS
201 INTRINSIC max, min, mod
213 lquery = ( tsize.EQ.-1 .OR. tsize.EQ.-2 .OR.
214 $ lwork.EQ.-1 .OR. lwork.EQ.-2 )
218 IF( tsize.EQ.-2 .OR. lwork.EQ.-2 )
THEN
219 IF( tsize.NE.-1 ) mint = .true.
220 IF( lwork.NE.-1 ) minw = .true.
225 IF( min( m, n ).GT.0 )
THEN
226 mb = ilaenv( 1,
'ZGEQR ',
' ', m, n, 1, -1 )
227 nb = ilaenv( 1,
'ZGEQR ',
' ', m, n, 2, -1 )
232 IF( mb.GT.m .OR. mb.LE.n ) mb = m
233 IF( nb.GT.min( m, n ) .OR. nb.LT.1 ) nb = 1
235 IF( mb.GT.n .AND. m.GT.n )
THEN
236 IF( mod( m - n, mb - n ).EQ.0 )
THEN
237 nblcks = ( m - n ) / ( mb - n )
239 nblcks = ( m - n ) / ( mb - n ) + 1
248 IF( ( tsize.LT.max( 1, nb*n*nblcks + 5 ) .OR. lwork.LT.nb*n )
249 $ .AND. ( lwork.GE.n ) .AND. ( tsize.GE.mintsz )
250 $ .AND. ( .NOT.lquery ) )
THEN
251 IF( tsize.LT.max( 1, nb*n*nblcks + 5 ) )
THEN
256 IF( lwork.LT.nb*n )
THEN
264 ELSE IF( n.LT.0 )
THEN
266 ELSE IF( lda.LT.max( 1, m ) )
THEN
268 ELSE IF( tsize.LT.max( 1, nb*n*nblcks + 5 )
269 $ .AND. ( .NOT.lquery ) .AND. ( .NOT.lminws ) )
THEN
271 ELSE IF( ( lwork.LT.max( 1, n*nb ) ) .AND. ( .NOT.lquery )
272 $ .AND. ( .NOT.lminws ) )
THEN
280 t( 1 ) = nb*n*nblcks + 5
285 work( 1 ) = max( 1, n )
287 work( 1 ) = max( 1, nb*n )
291 CALL xerbla(
'ZGEQR', -info )
293 ELSE IF( lquery )
THEN
299 IF( min( m, n ).EQ.0 )
THEN
305 IF( ( m.LE.n ) .OR. ( mb.LE.n ) .OR. ( mb.GE.m ) )
THEN
306 CALL zgeqrt( m, n, nb, a, lda, t( 6 ), nb, work, info )
308 CALL zlatsqr( m, n, mb, nb, a, lda, t( 6 ), nb, work,
312 work( 1 ) = max( 1, nb*n )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zgeqrt(M, N, NB, A, LDA, T, LDT, WORK, INFO)
ZGEQRT
subroutine zgeqr(M, N, A, LDA, T, TSIZE, WORK, LWORK, INFO)
ZGEQR
subroutine zlatsqr(M, N, MB, NB, A, LDA, T, LDT, WORK, LWORK, INFO)
ZLATSQR