172 SUBROUTINE cgeqr( M, N, A, LDA, T, TSIZE, WORK, LWORK,
180 INTEGER INFO, LDA, M, N, TSIZE, LWORK
183 COMPLEX 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,
'CGEQR ',
' ', m, n, 1, -1 )
227 nb = ilaenv( 1,
'CGEQR ',
' ', 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(
'CGEQR', -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 cgeqrt( m, n, nb, a, lda, t( 6 ), nb, work, info )
308 CALL clatsqr( m, n, mb, nb, a, lda, t( 6 ), nb, work,
312 work( 1 ) = max( 1, nb*n )
subroutine cgeqr(M, N, A, LDA, T, TSIZE, WORK, LWORK, INFO)
CGEQR
subroutine clatsqr(M, N, MB, NB, A, LDA, T, LDT, WORK, LWORK, INFO)
CLATSQR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgeqrt(M, N, NB, A, LDA, T, LDT, WORK, INFO)
CGEQRT