212 SUBROUTINE sggrqf( M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK,
220 INTEGER , LDA, LDB, LWORK, M, N, P
223 REAL A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( * ),
231 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
248 nb1 = ilaenv( 1,
'SGERQF',
' ', m, n, -1, -1 )
249 nb2 = ilaenv( 1,
'SGEQRF',
' ', p, n, -1, -1 )
250 nb3 = ilaenv( 1, '
sormrq', ' ', M, N, P, -1 )
251 NB = MAX( NB1, NB2, NB3 )
252 LWKOPT = MAX( N, M, P)*NB
254.EQ.
LQUERY = ( LWORK-1 )
257.LT.
ELSE IF( P0 ) THEN
259.LT.
ELSE IF( N0 ) THEN
261.LT.
ELSE IF( LDAMAX( 1, M ) ) THEN
263.LT.
ELSE IF( LDBMAX( 1, P ) ) THEN
265.LT..AND..NOT.
ELSE IF( LWORKMAX( 1, M, P, N ) LQUERY ) THEN
269 CALL XERBLA( 'sggrqf', -INFO )
271 ELSE IF( LQUERY ) THEN
277 CALL SGERQF( M, N, A, LDA, TAUA, WORK, LWORK, INFO )
282 CALL SORMRQ( 'right
', 'transpose
', P, N, MIN( M, N ),
283 $ A( MAX( 1, M-N+1 ), 1 ), LDA, TAUA, B, LDB, WORK,
285 LOPT = MAX( LOPT, INT( WORK( 1 ) ) )
289 CALL SGEQRF( P, N, B, LDB, TAUB, WORK, LWORK, INFO )
290 WORK( 1 ) = MAX( LOPT, INT( WORK( 1 ) ) )
subroutine xerbla(srname, info)
XERBLA
subroutine sgeqrf(m, n, a, lda, tau, work, lwork, info)
SGEQRF
subroutine sgerqf(m, n, a, lda, tau, work, lwork, info)
SGERQF
subroutine sormrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMRQ
subroutine sggrqf(m, p, n, a, lda, taua, b, ldb, taub, work, lwork, info)
SGGRQF