187 SUBROUTINE cunmrz( 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 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,
'CUNMRQ', side // trans, m, n,
275 lwkopt = nw*nb + tsize
281 CALL xerbla(
'CUNMRZ', -info )
283 ELSE IF( lquery )
THEN 289 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 295 nb = min( nbmax, ilaenv( 1,
'CUNMRQ', side // trans, m, n, k,
299 IF( nb.GT.1 .AND. nb.LT.k )
THEN 300 IF( lwork.LT.nw*nb+tsize )
THEN 301 nb = (lwork-tsize) / ldwork
302 nbmin = max( 2, ilaenv( 2,
'CUNMRQ', side // trans, m, n, k,
307 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 311 CALL cunmr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
318 IF( ( left .AND. .NOT.notran ) .OR.
319 $ ( .NOT.left .AND. notran ) )
THEN 324 i1 = ( ( k-1 ) / nb )*nb + 1
346 ib = min( nb, k-i+1 )
351 CALL clarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
352 $ tau( i ), work( iwt ), ldt )
370 CALL clarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
371 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
372 $ c( ic, jc ), ldc, work, ldwork )
subroutine cunmrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMRZ
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 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.