136      SUBROUTINE sgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 
  143      INTEGER            INFO, LDA, LWORK, M, N
 
  146      REAL               A( LDA, * ), TAU( * ), WORK( * )
 
  153      INTEGER            I, IB, IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
 
  154     $                   MU, NB, NBMIN, NU, NX
 
  165      EXTERNAL           ilaenv, sroundup_lwork
 
  172      lquery = ( lwork.EQ.-1 )
 
  175      ELSE IF( n.LT.0 ) 
THEN 
  177      ELSE IF( lda.LT.max( 1, m ) ) 
THEN 
  186            nb = ilaenv( 1, 
'SGERQF', 
' ', m, n, -1, -1 )
 
  189         work( 1 ) = sroundup_lwork(lwkopt)
 
  191         IF ( .NOT.lquery ) 
THEN 
  192            IF( lwork.LE.0 .OR. ( n.GT.0 .AND. lwork.LT.max( 1, m ) ) )
 
  198         CALL xerbla( 
'SGERQF', -info )
 
  200      ELSE IF( lquery ) 
THEN 
  213      IF( nb.GT.1 .AND. nb.LT.k ) 
THEN 
  217         nx = max( 0, ilaenv( 3, 
'SGERQF', 
' ', m, n, -1, -1 ) )
 
  224            IF( lwork.LT.iws ) 
THEN 
  230               nbmin = max( 2, ilaenv( 2, 
'SGERQF', 
' ', m, n, -1,
 
  236      IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k ) 
THEN 
  241         ki = ( ( k-nx-1 ) / nb )*nb
 
  244         DO 10 i = k - kk + ki + 1, k - kk + 1, -nb
 
  245            ib = min( k-i+1, nb )
 
  250            CALL sgerq2( ib, n-k+i+ib-1, a( m-k+i, 1 ), lda,
 
  253            IF( m-k+i.GT.1 ) 
THEN 
  258               CALL slarft( 
'Backward', 
'Rowwise', n-k+i+ib-1, ib,
 
  259     $                      a( m-k+i, 1 ), lda, tau( i ), work, ldwork )
 
  263               CALL slarfb( 
'Right', 
'No transpose', 
'Backward',
 
  264     $                      
'Rowwise', m-k+i-1, n-k+i+ib-1, ib,
 
  265     $                      a( m-k+i, 1 ), lda, work, ldwork, a, lda,
 
  266     $                      work( ib+1 ), ldwork )
 
  269         mu = m - k + i + nb - 1
 
  270         nu = n - k + i + nb - 1
 
  278      IF( mu.GT.0 .AND. nu.GT.0 )
 
  279     $   
CALL sgerq2( mu, nu, a, lda, tau, work, iinfo )
 
  281      work( 1 ) = sroundup_lwork(iws)
 
 
subroutine sgerq2(m, n, a, lda, tau, work, info)
SGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
subroutine sgerqf(m, n, a, lda, tau, work, lwork, info)
SGERQF
subroutine slarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
SLARFB applies a block reflector or its transpose to a general rectangular matrix.
recursive subroutine slarft(direct, storev, n, k, v, ldv, tau, t, ldt)
SLARFT forms the triangular factor T of a block reflector H = I - vtvH