128 SUBROUTINE cunglq( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
136 INTEGER INFO, K, LDA, LWORK, M, N
139 COMPLEX A( lda, * ), TAU( * ), WORK( * )
146 parameter ( zero = ( 0.0e+0, 0.0e+0 ) )
150 INTEGER I, IB, IINFO, IWS, J, KI, KK, L, LDWORK,
151 $ lwkopt, nb, nbmin, nx
168 nb = ilaenv( 1,
'CUNGLQ',
' ', m, n, k, -1 )
169 lwkopt = max( 1, m )*nb
171 lquery = ( lwork.EQ.-1 )
174 ELSE IF( n.LT.m )
THEN
176 ELSE IF( k.LT.0 .OR. k.GT.m )
THEN
178 ELSE IF( lda.LT.max( 1, m ) )
THEN
180 ELSE IF( lwork.LT.max( 1, m ) .AND. .NOT.lquery )
THEN
184 CALL xerbla(
'CUNGLQ', -info )
186 ELSE IF( lquery )
THEN
200 IF( nb.GT.1 .AND. nb.LT.k )
THEN
204 nx = max( 0, ilaenv( 3,
'CUNGLQ',
' ', m, n, k, -1 ) )
211 IF( lwork.LT.iws )
THEN
217 nbmin = max( 2, ilaenv( 2,
'CUNGLQ',
' ', m, n, k, -1 ) )
222 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
227 ki = ( ( k-nx-1 ) / nb )*nb
244 $
CALL cungl2( m-kk, n-kk, k-kk, a( kk+1, kk+1 ), lda,
245 $ tau( kk+1 ), work, iinfo )
251 DO 50 i = ki + 1, 1, -nb
252 ib = min( nb, k-i+1 )
258 CALL clarft(
'Forward',
'Rowwise', n-i+1, ib, a( i, i ),
259 $ lda, tau( i ), work, ldwork )
263 CALL clarfb(
'Right',
'Conjugate transpose',
'Forward',
264 $
'Rowwise', m-i-ib+1, n-i+1, ib, a( i, i ),
265 $ lda, work, ldwork, a( i+ib, i ), lda,
266 $ work( ib+1 ), ldwork )
271 CALL cungl2( ib, n-i+1, ib, a( i, i ), lda, tau( i ), work,
277 DO 30 l = i, i + ib - 1
subroutine clarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
CLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cunglq(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGLQ
subroutine cungl2(M, N, K, A, LDA, TAU, WORK, INFO)
CUNGL2 generates all or part of the unitary matrix Q from an LQ factorization determined by cgelqf (u...
subroutine clarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
CLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix...