168 SUBROUTINE cunmlq( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
169 $ WORK, LWORK, INFO )
177 CHARACTER SIDE, TRANS
178 INTEGER INFO, K, LDA, LDC, LWORK, M, N
181 COMPLEX A( lda, * ), C( ldc, * ), TAU( * ),
188 INTEGER NBMAX, LDT, TSIZE
189 parameter( nbmax = 64, ldt = nbmax+1,
190 $ tsize = ldt*nbmax )
193 LOGICAL LEFT, LQUERY, NOTRAN
195 INTEGER I, I1, I2, I3, IB, IC, IINFO, IWT, JC, LDWORK,
196 $ lwkopt, mi, nb, nbmin, ni, nq, nw
201 EXTERNAL lsame, ilaenv
214 left = lsame( side,
'L' )
215 notran = lsame( trans,
'N' )
216 lquery = ( lwork.EQ.-1 )
227 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 229 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN 231 ELSE IF( m.LT.0 )
THEN 233 ELSE IF( n.LT.0 )
THEN 235 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN 237 ELSE IF( lda.LT.max( 1, k ) )
THEN 239 ELSE IF( ldc.LT.max( 1, m ) )
THEN 241 ELSE IF( lwork.LT.max( 1, nw ) .AND. .NOT.lquery )
THEN 249 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
THEN 252 nb = min( nbmax, ilaenv( 1,
'CUNMLQ', side // trans, m, n,
254 lwkopt = max( 1, nw )*nb + tsize
260 CALL xerbla(
'CUNMLQ', -info )
262 ELSE IF( lquery )
THEN 268 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
THEN 276 IF( nb.GT.1 .AND. nb.LT.k )
THEN 277 IF( lwork.LT.nw*nb+tsize )
THEN 278 nb = (lwork-tsize) / ldwork
279 nbmin = max( 2, ilaenv( 2,
'CUNMLQ', side // trans, m, n, k,
284 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 288 CALL cunml2( side, trans, m, n, k, a, lda, tau, c, ldc, work,
295 IF( ( left .AND. notran ) .OR.
296 $ ( .NOT.left .AND. .NOT.notran ) )
THEN 301 i1 = ( ( k-1 ) / nb )*nb + 1
321 ib = min( nb, k-i+1 )
326 CALL clarft(
'Forward',
'Rowwise', nq-i+1, ib, a( i, i ),
327 $ lda, tau( i ), work( iwt ), ldt )
344 CALL clarfb( side, transt,
'Forward',
'Rowwise', mi, ni, ib,
345 $ a( i, i ), lda, work( iwt ), ldt,
346 $ c( ic, jc ), ldc, work, ldwork )
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 cunmlq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMLQ
subroutine cunml2(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO)
CUNML2 multiplies a general matrix by the unitary matrix from a LQ factorization determined by cgelqf...
subroutine xerbla(SRNAME, INFO)
XERBLA
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...