187 SUBROUTINE zunmrz( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
188 $ WORK, LWORK, INFO )
196 CHARACTER SIDE, TRANS
197 INTEGER INFO, K, L, LDA, LDC, LWORK, M, N
200 COMPLEX*16 A( lda, * ), C( ldc, * ), TAU( * ), WORK( * )
206 INTEGER NBMAX, LDT, TSIZE
207 parameter( nbmax = 64, ldt = nbmax+1,
208 $ tsize = ldt*nbmax )
211 LOGICAL LEFT, LQUERY, NOTRAN
213 INTEGER I, I1, I2, I3, IB, IC, IINFO, IWT, JA, JC,
214 $ ldwork, lwkopt, mi, nb, nbmin, ni, nq, nw
219 EXTERNAL lsame, ilaenv
232 left = lsame( side,
'L' )
233 notran = lsame( trans,
'N' )
234 lquery = ( lwork.EQ.-1 )
245 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 247 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN 249 ELSE IF( m.LT.0 )
THEN 251 ELSE IF( n.LT.0 )
THEN 253 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN 255 ELSE IF( l.LT.0 .OR. ( left .AND. ( l.GT.m ) ) .OR.
256 $ ( .NOT.left .AND. ( l.GT.n ) ) )
THEN 258 ELSE IF( lda.LT.max( 1, k ) )
THEN 260 ELSE IF( ldc.LT.max( 1, m ) )
THEN 262 ELSE IF( lwork.LT.max( 1, nw ) .AND. .NOT.lquery )
THEN 270 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 273 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n,
275 lwkopt = nw*nb + tsize
281 CALL xerbla(
'ZUNMRZ', -info )
283 ELSE IF( lquery )
THEN 289 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 296 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n, k,
300 IF( nb.GT.1 .AND. nb.LT.k )
THEN 301 IF( lwork.LT.nw*nb+tsize )
THEN 302 nb = (lwork-tsize) / ldwork
303 nbmin = max( 2, ilaenv( 2,
'ZUNMRQ', side // trans, m, n, k,
308 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 312 CALL zunmr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
319 IF( ( left .AND. .NOT.notran ) .OR.
320 $ ( .NOT.left .AND. notran ) )
THEN 325 i1 = ( ( k-1 ) / nb )*nb + 1
347 ib = min( nb, k-i+1 )
352 CALL zlarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
353 $ tau( i ), work( iwt ), ldt )
371 CALL zlarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
372 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
373 $ c( ic, jc ), ldc, work, ldwork )
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 zunmrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMRZ
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...
subroutine xerbla(SRNAME, INFO)
XERBLA