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 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.
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.