213 SUBROUTINE cggqrf( N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK,
221 INTEGER INFO, LDA, LDB, LWORK, M, N, P
224 COMPLEX A( lda, * ), B( ldb, * ), TAUA( * ), TAUB( * ),
232 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
242 INTRINSIC int, max, min
249 nb1 = ilaenv( 1,
'CGEQRF',
' ', n, m, -1, -1 )
250 nb2 = ilaenv( 1,
'CGERQF',
' ', n, p, -1, -1 )
251 nb3 = ilaenv( 1,
'CUNMQR',
' ', n, m, p, -1 )
252 nb = max( nb1, nb2, nb3 )
253 lwkopt = max( n, m, p)*nb
255 lquery = ( lwork.EQ.-1 )
258 ELSE IF( m.LT.0 )
THEN 260 ELSE IF( p.LT.0 )
THEN 262 ELSE IF( lda.LT.max( 1, n ) )
THEN 264 ELSE IF( ldb.LT.max( 1, n ) )
THEN 266 ELSE IF( lwork.LT.max( 1, n, m, p ) .AND. .NOT.lquery )
THEN 270 CALL xerbla(
'CGGQRF', -info )
272 ELSE IF( lquery )
THEN 278 CALL cgeqrf( n, m, a, lda, taua, work, lwork, info )
279 lopt = int( work( 1 ) )
283 CALL cunmqr(
'Left',
'Conjugate Transpose', n, p, min( n, m ), a,
284 $ lda, taua, b, ldb, work, lwork, info )
285 lopt = max( lopt, int( work( 1 ) ) )
289 CALL cgerqf( n, p, b, ldb, taub, work, lwork, info )
290 work( 1 ) = max( lopt, int( work( 1 ) ) )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgerqf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
CGERQF
subroutine cggqrf(N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK, LWORK, INFO)
CGGQRF
subroutine cunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMQR
subroutine cgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
CGEQRF