166 SUBROUTINE cunmlq( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
167 $ WORK, LWORK, INFO )
174 CHARACTER SIDE, TRANS
175 INTEGER INFO, K, LDA, LDC, LWORK, M, N
178 COMPLEX A( LDA, * ), C( LDC, * ), TAU( * ),
185 INTEGER NBMAX, LDT, TSIZE
186 parameter( nbmax = 64, ldt = nbmax+1,
187 $ tsize = ldt*nbmax )
190 LOGICAL LEFT, LQUERY, NOTRAN
192 INTEGER I, I1, I2, I3, IB, IC, IINFO, IWT, JC, LDWORK,
193 $ lwkopt, mi, nb, nbmin, ni, nq, nw
198 EXTERNAL lsame, ilaenv
211 left = lsame( side,
'L' )
212 notran = lsame( trans,
'N' )
213 lquery = ( lwork.EQ.-1 )
224 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
226 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN
228 ELSE IF( m.LT.0 )
THEN
230 ELSE IF( n.LT.0 )
THEN
232 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN
234 ELSE IF( lda.LT.
max( 1, k ) )
THEN
236 ELSE IF( ldc.LT.
max( 1, m ) )
THEN
238 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
246 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
THEN
249 nb =
min( nbmax, ilaenv( 1,
'CUNMLQ', side // trans, m, n,
251 lwkopt = nw*nb + tsize
257 CALL xerbla(
'CUNMLQ', -info )
259 ELSE IF( lquery )
THEN
265 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
THEN
273 IF( nb.GT.1 .AND. nb.LT.k )
THEN
274 IF( lwork.LT.lwkopt )
THEN
275 nb = (lwork-tsize) / ldwork
276 nbmin =
max'CUNMLQ', side // trans, m, n, k,
281 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN
285 CALL cunml2( side, trans, m, n, k, a, lda, tau, c, ldc, work
292 IF( ( left .AND. notran ) .OR.
293 $ ( .NOT.left .AND. .NOT.notran ) )
THEN
298 i1 = ( ( k-1 ) / nb )*nb + 1
318 ib =
min( nb, k-i+1 )
323 CALL clarft(
'Forward',
'Rowwise', nq-i+1, ib, a( i, i ),
324 $ lda, tau( i ), work( iwt ), ldt )
341 CALL clarfb( side, transt,
'Forward',
'Rowwise', mi, ni, ib,
342 $ a( i, i ), lda, work( iwt ), ldt,
343 $ c( ic, jc ), ldc, work, ldwork )
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.
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...