119      SUBROUTINE zgelqs( M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK,
 
  127      INTEGER            INFO, LDA, LDB, LWORK, M, N, NRHS
 
  130      COMPLEX*16         A( LDA, * ), B( LDB, * ), TAU( * ),
 
  137      COMPLEX*16         CZERO, CONE
 
  138      parameter( czero = ( 0.0d+0, 0.0d+0 ),
 
  139     $                   cone = ( 1.0d+0, 0.0d+0 ) )
 
  154      ELSE IF( n.LT.0 .OR. m.GT.n ) 
THEN 
  156      ELSE IF( nrhs.LT.0 ) 
THEN 
  158      ELSE IF( lda.LT.max( 1, m ) ) 
THEN 
  160      ELSE IF( ldb.LT.max( 1, n ) ) 
THEN 
  162      ELSE IF( lwork.LT.1 .OR. lwork.LT.nrhs .AND. m.GT.0 .AND. n.GT.0 )
 
  167         CALL xerbla( 
'ZGELQS', -info )
 
  173      IF( n.EQ.0 .OR. nrhs.EQ.0 .OR. m.EQ.0 )
 
  178      CALL ztrsm( 
'Left', 
'Lower', 
'No transpose', 
'Non-unit', m, nrhs,
 
  179     $            cone, a, lda, b, ldb )
 
  184     $   
CALL zlaset( 
'Full', n-m, nrhs, czero, czero, b( m+1, 1 ),
 
  189      CALL zunmlq( 
'Left', 
'Conjugate transpose', n, nrhs, m, a, lda,
 
  190     $             tau, b, ldb, work, lwork, info )
 
 
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM
subroutine zunmlq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
ZUNMLQ
subroutine zgelqs(m, n, nrhs, a, lda, tau, b, ldb, work, lwork, info)
ZGELQS