214 SUBROUTINE sggrqf( M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK,
223 INTEGER INFO, LDA, LDB, LWORK, M, N, P
226 REAL A( lda, * ), B( ldb, * ), TAUA( * ), TAUB( * ),
234 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
244 INTRINSIC int, max, min
251 nb1 = ilaenv( 1,
'SGERQF',
' ', m, n, -1, -1 )
252 nb2 = ilaenv( 1,
'SGEQRF',
' ', p, n, -1, -1 )
253 nb3 = ilaenv( 1,
'SORMRQ',
' ', m, n, p, -1 )
254 nb = max( nb1, nb2, nb3 )
255 lwkopt = max( n, m, p)*nb
257 lquery = ( lwork.EQ.-1 )
260 ELSE IF( p.LT.0 )
THEN 262 ELSE IF( n.LT.0 )
THEN 264 ELSE IF( lda.LT.max( 1, m ) )
THEN 266 ELSE IF( ldb.LT.max( 1, p ) )
THEN 268 ELSE IF( lwork.LT.max( 1, m, p, n ) .AND. .NOT.lquery )
THEN 272 CALL xerbla(
'SGGRQF', -info )
274 ELSE IF( lquery )
THEN 280 CALL sgerqf( m, n, a, lda, taua, work, lwork, info )
285 CALL sormrq(
'Right',
'Transpose', p, n, min( m, n ),
286 $ a( max( 1, m-n+1 ), 1 ), lda, taua, b, ldb, work,
288 lopt = max( lopt, int( work( 1 ) ) )
292 CALL sgeqrf( p, n, b, ldb, taub, work, lwork, info )
293 work( 1 ) = max( lopt, int( work( 1 ) ) )
subroutine sormrq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMRQ
subroutine sgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
SGEQRF
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sggrqf(M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK, LWORK, INFO)
SGGRQF
subroutine sgerqf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
SGERQF