186      SUBROUTINE sgglse( M, N, P, A, LDA, B, LDB, C, D, X, WORK,
 
  195      INTEGER            INFO, LDA, LDB, LWORK, M, N, P
 
  198      REAL               A( LDA, * ), B( LDB, * ), C( * ), D( * ),
 
  206      PARAMETER          ( ONE = 1.0e+0 )
 
  210      INTEGER            LOPT, LWKMIN, LWKOPT, MN, NB, NB1, NB2, NB3,
 
  221      EXTERNAL           ilaenv, sroundup_lwork
 
  224      INTRINSIC          int, max, min
 
  232      lquery = ( lwork.EQ.-1 )
 
  235      ELSE IF( n.LT.0 ) 
THEN 
  237      ELSE IF( p.LT.0 .OR. p.GT.n .OR. p.LT.n-m ) 
THEN 
  239      ELSE IF( lda.LT.max( 1, m ) ) 
THEN 
  241      ELSE IF( ldb.LT.max( 1, p ) ) 
THEN 
  252            nb1 = ilaenv( 1, 
'SGEQRF', 
' ', m, n, -1, -1 )
 
  253            nb2 = ilaenv( 1, 
'SGERQF', 
' ', m, n, -1, -1 )
 
  254            nb3 = ilaenv( 1, 
'SORMQR', 
' ', m, n, p, -1 )
 
  255            nb4 = ilaenv( 1, 
'SORMRQ', 
' ', m, n, p, -1 )
 
  256            nb = max( nb1, nb2, nb3, nb4 )
 
  258            lwkopt = p + mn + max( m, n )*nb
 
  260         work( 1 ) = sroundup_lwork(lwkopt)
 
  262         IF( lwork.LT.lwkmin .AND. .NOT.lquery ) 
THEN 
  268         CALL xerbla( 
'SGGLSE', -info )
 
  270      ELSE IF( lquery ) 
THEN 
  288      CALL sggrqf( p, m, n, b, ldb, work, a, lda, work( p+1 ),
 
  289     $             work( p+mn+1 ), lwork-p-mn, info )
 
  290      lopt = int( work( p+mn+1 ) )
 
  295      CALL sormqr( 
'Left', 
'Transpose', m, 1, mn, a, lda,
 
  297     $             c, max( 1, m ), work( p+mn+1 ), lwork-p-mn, info )
 
  298      lopt = max( lopt, int( work( p+mn+1 ) ) )
 
  303         CALL strtrs( 
'Upper', 
'No transpose', 
'Non-unit', p, 1,
 
  304     $                b( 1, n-p+1 ), ldb, d, p, info )
 
  313         CALL scopy( p, d, 1, x( n-p+1 ), 1 )
 
  317         CALL sgemv( 
'No transpose', n-p, p, -one, a( 1, n-p+1 ),
 
  325         CALL strtrs( 
'Upper', 
'No transpose', 
'Non-unit', n-p, 1,
 
  326     $                a, lda, c, n-p, info )
 
  335         CALL scopy( n-p, c, 1, x, 1 )
 
  343     $      
CALL sgemv( 
'No transpose', nr, n-m, -one, a( n-p+1,
 
  345     $                  lda, d( nr+1 ), 1, one, c( n-p+1 ), 1 )
 
  350         CALL strmv( 
'Upper', 
'No transpose', 
'Non unit', nr,
 
  351     $               a( n-p+1, n-p+1 ), lda, d, 1 )
 
  352         CALL saxpy( nr, -one, d, 1, c( n-p+1 ), 1 )
 
  357      CALL sormrq( 
'Left', 
'Transpose', n, 1, p, b, ldb, work( 1 ),
 
  359     $             n, work( p+mn+1 ), lwork-p-mn, info )
 
  360      work( 1 ) = real( p + mn + max( lopt, int( work( p+mn+1 ) ) ) )
 
 
subroutine sgglse(m, n, p, a, lda, b, ldb, c, d, x, work, lwork, info)
SGGLSE solves overdetermined or underdetermined systems for OTHER matrices
subroutine sormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMQR
subroutine sormrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMRQ