169 SUBROUTINE zunmrq( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
170 $ work, lwork, info )
178 CHARACTER SIDE, TRANS
179 INTEGER INFO, K, LDA, LDC, LWORK, M, N
182 COMPLEX*16 A( lda, * ), C( ldc, * ), TAU( * ), WORK( * )
189 parameter( nbmax = 64, ldt = nbmax+1 )
192 LOGICAL LEFT, LQUERY, NOTRAN
194 INTEGER I, I1, I2, I3, IB, IINFO, IWS, LDWORK, LWKOPT,
195 $ mi, nb, nbmin, ni, nq, nw
198 COMPLEX*16 T( ldt, nbmax )
203 EXTERNAL lsame, ilaenv
216 left = lsame( side,
'L' )
217 notran = lsame( trans,
'N' )
218 lquery = ( lwork.EQ.-1 )
229 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
231 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN
233 ELSE IF( m.LT.0 )
THEN
235 ELSE IF( n.LT.0 )
THEN
237 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN
239 ELSE IF( lda.LT.max( 1, k ) )
THEN
241 ELSE IF( ldc.LT.max( 1, m ) )
THEN
246 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
253 nb = min( nbmax, ilaenv( 1,
'ZUNMRQ', side // trans, m, n,
259 IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
265 CALL xerbla(
'ZUNMRQ', -info )
267 ELSE IF( lquery )
THEN
273 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
279 IF( nb.GT.1 .AND. nb.LT.k )
THEN
281 IF( lwork.LT.iws )
THEN
283 nbmin = max( 2, ilaenv( 2,
'ZUNMRQ', side // trans, m, n, k,
290 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN
294 CALL zunmr2( side, trans, m, n, k, a, lda, tau, c, ldc, work,
300 IF( ( left .AND. .NOT.notran ) .OR.
301 $ ( .NOT.left .AND. notran ) )
THEN
306 i1 = ( ( k-1 ) / nb )*nb + 1
324 ib = min( nb, k-i+1 )
329 CALL zlarft(
'Backward',
'Rowwise', nq-k+i+ib-1, ib,
330 $ a( i, 1 ), lda, tau( i ), t, ldt )
335 mi = m - k + i + ib - 1
340 ni = n - k + i + ib - 1
345 CALL zlarfb( side, transt,
'Backward',
'Rowwise', mi, ni,
346 $ ib, a( i, 1 ), lda, t, ldt, c, ldc, work,
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...
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