165 SUBROUTINE zunmrq( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
166 $ WORK, LWORK, INFO )
173 CHARACTER SIDE, TRANS
174 INTEGER INFO, K, LDA, LDC, LWORK, M, N
177 COMPLEX*16 A( lda, * ), C( ldc, * ), TAU( * ), WORK( * )
183 INTEGER NBMAX, LDT, TSIZE
184 parameter( nbmax = 64, ldt = nbmax+1,
185 $ tsize = ldt*nbmax )
188 LOGICAL LEFT, LQUERY, NOTRAN
190 INTEGER I, I1, I2, I3, IB, IINFO, IWT, LDWORK, LWKOPT,
191 $ mi, nb, nbmin, ni, nq, nw
196 EXTERNAL lsame, ilaenv
209 left = lsame( side,
'L' )
210 notran = lsame( trans,
'N' )
211 lquery = ( lwork.EQ.-1 )
222 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 224 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN 226 ELSE IF( m.LT.0 )
THEN 228 ELSE IF( n.LT.0 )
THEN 230 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN 232 ELSE IF( lda.LT.max( 1, k ) )
THEN 234 ELSE IF( ldc.LT.max( 1, m ) )
THEN 236 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN 244 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 247 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n,
249 lwkopt = nw*nb + tsize
255 CALL xerbla(
'ZUNMRQ', -info )
257 ELSE IF( lquery )
THEN 263 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 269 IF( nb.GT.1 .AND. nb.LT.k )
THEN 270 IF( lwork.LT.lwkopt )
THEN 271 nb = (lwork-tsize) / ldwork
272 nbmin = max( 2, ilaenv( 2,
'ZUNMRQ', side // trans, m, n, k,
277 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 281 CALL zunmr2( side, trans, m, n, k, a, lda, tau, c, ldc, work,
288 IF( ( left .AND. .NOT.notran ) .OR.
289 $ ( .NOT.left .AND. notran ) )
THEN 294 i1 = ( ( k-1 ) / nb )*nb + 1
312 ib = min( nb, k-i+1 )
317 CALL zlarft(
'Backward',
'Rowwise', nq-k+i+ib-1, ib,
318 $ a( i, 1 ), lda, tau( i ), work( iwt ), ldt )
323 mi = m - k + i + ib - 1
328 ni = n - k + i + ib - 1
333 CALL zlarfb( side, transt,
'Backward',
'Rowwise', mi, ni,
334 $ ib, a( i, 1 ), lda, work( iwt ), ldt, c, ldc,
subroutine zunmr2(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO)
ZUNMR2 multiplies a general matrix by the unitary matrix from a RQ factorization determined by cgerqf...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine zunmrq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMRQ
subroutine zlarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
ZLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix...