185 SUBROUTINE cunmrz( 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 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.nw .AND. .NOT.lquery )
THEN 267 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 270 nb = min( nbmax, ilaenv( 1,
'CUNMRQ', side // trans, m, n,
272 lwkopt = nw*nb + tsize
278 CALL xerbla(
'CUNMRZ', -info )
280 ELSE IF( lquery )
THEN 286 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 292 nb = min( nbmax, ilaenv( 1,
'CUNMRQ', side // trans, m, n, k,
296 IF( nb.GT.1 .AND. nb.LT.k )
THEN 297 IF( lwork.LT.lwkopt )
THEN 298 nb = (lwork-tsize) / ldwork
299 nbmin = max( 2, ilaenv( 2,
'CUNMRQ', side // trans, m, n, k,
304 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 308 CALL cunmr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
315 IF( ( left .AND. .NOT.notran ) .OR.
316 $ ( .NOT.left .AND. notran ) )
THEN 321 i1 = ( ( k-1 ) / nb )*nb + 1
343 ib = min( nb, k-i+1 )
348 CALL clarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
349 $ tau( i ), work( iwt ), ldt )
367 CALL clarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
368 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
369 $ c( ic, jc ), ldc, work, ldwork )
subroutine cunmr3(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, INFO)
CUNMR3 multiplies a general matrix by the unitary matrix from a RZ factorization determined by ctzrzf...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cunmrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMRZ
subroutine clarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
CLARZT forms the triangular factor T of a block reflector H = I - vtvH.
subroutine clarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
CLARZB applies a block reflector or its conjugate-transpose to a general matrix.