183 SUBROUTINE sggglm( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK,
191 INTEGER INFO, LDA, LDB, LWORK, , N, P
206 INTEGER I, LOPT, LWKMIN, LWKOPT, NB, NB1, NB2, NB3,
226 lquery = ( lwork.EQ.-1 )
229 ELSE IF( m.LT.0 .OR. m.GT.n )
THEN
231 ELSE IF( p.LT.0 .OR. p.LT.n-m )
THEN
233 ELSE IF( lda.LT.
max( 1, n ) )
THEN
235 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
246 nb1 = ilaenv( 1,
'SGEQRF',
' ', n, m, -1, -1 )
247 nb2 = ilaenv( 1,
'SGERQF',
' ', n, m, -1, -1 )
248 nb3 = ilaenv( 1,
'SORMQR',
' ', n, m, p, -1 )
249 nb4 = ilaenv( 1,
'SORMRQ',
' ', n, m, p, -1 )
250 nb =
max( nb1, nb2, nb3, nb4 )
252 lwkopt = m + np +
max( n, p )*nb
256 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
262 CALL xerbla(
'SGGGLM', -info )
264 ELSE IF( lquery )
THEN
289 CALL sggqrf( n, m, p, a, lda, work, b, ldb
290 $ work( m+np+1 ), lwork-m-np, info )
291 lopt = work( m+np+1 )
296 CALL sormqr(
'Left',
'Transpose', n, 1, m, a, lda, work, d,
297 $
max( 1, n ), work( m+np+1 ), lwork-m-np, info )
298 lopt =
max( lopt, int( work( m+np+1 ) ) )
303 CALL strtrs(
'Upper',
'No transpose',
'Non unit', n-m, 1,
304 $ b( m+1, m+p-n+1 ), ldb, d( m+1 ), n-m, info )
311 CALL scopy( n-m, d( m+1 ), 1, y( m+p-n+1 ), 1 )
316 DO 10 i = 1, m + p - n
322 CALL sgemv(
'No transpose', m, n-m, -one, b( 1, m+p-n+1 ), ldb,
323 $ y( m+p-n+1 ), 1, one, d, 1 )
328 CALL strtrs(
'Upper',
'No Transpose',
'Non unit', m, 1, a, lda,
338 CALL scopy( m, d, 1, x, 1 )
343 CALL sormrq(
'Left', 'transpose
', P, 1, NP,
344 $ B( MAX( 1, N-P+1 ), 1 ), LDB, WORK( M+1 ), Y,
345 $ MAX( 1, P ), WORK( M+NP+1 ), LWORK-M-NP, INFO )
346 WORK( 1 ) = M + NP + MAX( LOPT, INT( WORK( M+NP+1 ) ) )
subroutine strtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
STRTRS
subroutine sggqrf(n, m, p, a, lda, taua, b, ldb, taub, work, lwork, info)
SGGQRF
subroutine sormrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMRQ
subroutine sormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMQR
subroutine sggglm(n, m, p, a, lda, b, ldb, d, x, y, work, lwork, info)
SGGGLM
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV