167 SUBROUTINE zunmql( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
168 $ WORK, LWORK, INFO )
176 CHARACTER SIDE, TRANS
177 INTEGER INFO, K, LDA, LDC, LWORK, M, N
180 COMPLEX*16 A( lda, * ), C( ldc, * ), TAU( * ), WORK( * )
186 INTEGER NBMAX, LDT, TSIZE
187 parameter( nbmax = 64, ldt = nbmax+1,
188 $ tsize = ldt*nbmax )
191 LOGICAL LEFT, LQUERY, NOTRAN
192 INTEGER I, I1, I2, I3, IB, IINFO, IWT, LDWORK, LWKOPT,
193 $ 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, nq ) )
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 )
THEN 249 nb = min( nbmax, ilaenv( 1,
'ZUNMQL', side // trans, m, n,
251 lwkopt = nw*nb + tsize
257 CALL xerbla(
'ZUNMQL', -info )
259 ELSE IF( lquery )
THEN 265 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 271 IF( nb.GT.1 .AND. nb.LT.k )
THEN 272 IF( lwork.LT.nw*nb+tsize )
THEN 273 nb = (lwork-tsize) / ldwork
274 nbmin = max( 2, ilaenv( 2,
'ZUNMQL', side // trans, m, n, k,
279 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 283 CALL zunm2l( side, trans, m, n, k, a, lda, tau, c, ldc, work,
290 IF( ( left .AND. notran ) .OR.
291 $ ( .NOT.left .AND. .NOT.notran ) )
THEN 296 i1 = ( ( k-1 ) / nb )*nb + 1
308 ib = min( nb, k-i+1 )
313 CALL zlarft(
'Backward',
'Columnwise', nq-k+i+ib-1, ib,
314 $ a( 1, i ), lda, tau( i ), work( iwt ), ldt )
319 mi = m - k + i + ib - 1
324 ni = n - k + i + ib - 1
329 CALL zlarfb( side, trans,
'Backward',
'Columnwise', mi, ni,
330 $ ib, a( 1, i ), lda, work( iwt ), ldt, c, ldc,
subroutine zunmql(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMQL
subroutine zlarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine zunm2l(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO)
ZUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf...
subroutine xerbla(SRNAME, INFO)
XERBLA
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...