136      SUBROUTINE zgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 
  143      INTEGER            INFO, LDA, LWORK, M, N
 
  146      COMPLEX*16         A( LDA, * ), TAU( * ), WORK( * )
 
  153      INTEGER            I, IB, IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
 
  154     $                   MU, NB, NBMIN, NU, NX
 
  171      lquery = ( lwork.EQ.-1 )
 
  174      ELSE IF( n.LT.0 ) 
THEN 
  176      ELSE IF( lda.LT.max( 1, m ) ) 
THEN 
  185            nb = ilaenv( 1, 
'ZGERQF', 
' ', m, n, -1, -1 )
 
  190         IF ( .NOT.lquery ) 
THEN 
  191            IF( lwork.LE.0 .OR. ( n.GT.0 .AND. lwork.LT.max( 1, m ) ) )
 
  197         CALL xerbla( 
'ZGERQF', -info )
 
  199      ELSE IF( lquery ) 
THEN 
  212      IF( nb.GT.1 .AND. nb.LT.k ) 
THEN 
  216         nx = max( 0, ilaenv( 3, 
'ZGERQF', 
' ', m, n, -1, -1 ) )
 
  223            IF( lwork.LT.iws ) 
THEN 
  229               nbmin = max( 2, ilaenv( 2, 
'ZGERQF', 
' ', m, n, -1,
 
  235      IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k ) 
THEN 
  240         ki = ( ( k-nx-1 ) / nb )*nb
 
  243         DO 10 i = k - kk + ki + 1, k - kk + 1, -nb
 
  244            ib = min( k-i+1, nb )
 
  249            CALL zgerq2( ib, n-k+i+ib-1, a( m-k+i, 1 ), lda,
 
  252            IF( m-k+i.GT.1 ) 
THEN 
  257               CALL zlarft( 
'Backward', 
'Rowwise', n-k+i+ib-1, ib,
 
  258     $                      a( m-k+i, 1 ), lda, tau( i ), work, ldwork )
 
  262               CALL zlarfb( 
'Right', 
'No transpose', 
'Backward',
 
  263     $                      
'Rowwise', m-k+i-1, n-k+i+ib-1, ib,
 
  264     $                      a( m-k+i, 1 ), lda, work, ldwork, a, lda,
 
  265     $                      work( ib+1 ), ldwork )
 
  268         mu = m - k + i + nb - 1
 
  269         nu = n - k + i + nb - 1
 
  277      IF( mu.GT.0 .AND. nu.GT.0 )
 
  278     $   
CALL zgerq2( mu, nu, a, lda, tau, work, iinfo )
 
 
subroutine zgerq2(m, n, a, lda, tau, work, info)
ZGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
 
subroutine zgerqf(m, n, a, lda, tau, work, lwork, info)
ZGERQF
 
subroutine zlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
ZLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.
 
recursive subroutine zlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH