185 SUBROUTINE zunmrz( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
186 $ WORK, LWORK, INFO )
193 CHARACTER SIDE, TRANS
194 INTEGER INFO, K, L, LDA, LDC, LWORK, M, N
197 COMPLEX*16 A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
203 INTEGER NBMAX, LDT, TSIZE
204 parameter( nbmax = 64, ldt = nbmax+1,
205 $ tsize = ldt*nbmax )
208 LOGICAL LEFT, LQUERY, NOTRAN
210 INTEGER I, I1, I2, I3, IB, IC, IINFO, IWT, JA, JC,
211 $ ldwork, lwkopt, mi, nb, nbmin, ni, nq, nw
216 EXTERNAL lsame, ilaenv
229 left = lsame( side,
'L' )
230 notran = lsame( trans,
'N' )
231 lquery = ( lwork.EQ.-1 )
242 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
244 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN
246 ELSE IF( m.LT.0 )
THEN
248 ELSE IF( n.LT.0 )
THEN
250 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN
252 ELSE IF( l.LT.0 .OR. ( left .AND. ( l.GT.m ) ) .OR.
253 $ ( .NOT.left .AND. ( l.GT.n ) ) )
THEN
255 ELSE IF( lda.LT.max( 1, k ) )
THEN
257 ELSE IF( ldc.LT.max( 1, m ) )
THEN
259 ELSE IF( lwork.LT.max( 1, nw ) .AND. .NOT.lquery )
THEN
267 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
270 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n,
272 lwkopt = nw*nb + tsize
278 CALL xerbla(
'ZUNMRZ', -info )
280 ELSE IF( lquery )
THEN
286 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
293 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n, k,
297 IF( nb.GT.1 .AND. nb.LT.k )
THEN
298 IF( lwork.LT.lwkopt )
THEN
299 nb = (lwork-tsize) / ldwork
300 nbmin = max( 2, ilaenv( 2,
'ZUNMRQ', side // trans, m, n, k,
305 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN
309 CALL zunmr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
316 IF( ( left .AND. .NOT.notran ) .OR.
317 $ ( .NOT.left .AND. notran ) )
THEN
322 i1 = ( ( k-1 ) / nb )*nb + 1
344 ib = min( nb, k-i+1 )
349 CALL zlarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
350 $ tau( i ), work( iwt ), ldt )
368 CALL zlarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
369 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
370 $ c( ic, jc ), ldc, work, ldwork )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zunmrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMRZ
subroutine zlarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
ZLARZB applies a block reflector or its conjugate-transpose to a general matrix.
subroutine zlarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
ZLARZT forms the triangular factor T of a block reflector H = I - vtvH.
subroutine zunmr3(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, INFO)
ZUNMR3 multiplies a general matrix by the unitary matrix from a RZ factorization determined by ctzrzf...