185 SUBROUTINE dormrz( 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 DOUBLE PRECISION 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,
'T' ) )
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.max( 1, nw ) .AND. .NOT.lquery )
THEN
267 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
270 nb = min( nbmax, ilaenv( 1,
'DORMRQ', side // trans, m, n,
272 lwkopt = nw*nb + tsize
278 CALL xerbla(
'DORMRZ', -info )
280 ELSE IF( lquery )
THEN
286 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
293 IF( nb.GT.1 .AND. nb.LT.k )
THEN
294 IF( lwork.LT.nw*nb+tsize )
THEN
295 nb = (lwork-tsize) / ldwork
296 nbmin = max( 2, ilaenv( 2,
'DORMRQ', side // trans, m, n, k,
301 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN
305 CALL dormr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
312 IF( ( left .AND. .NOT.notran ) .OR.
313 $ ( .NOT.left .AND. notran ) )
THEN
318 i1 = ( ( k-1 ) / nb )*nb + 1
340 ib = min( nb, k-i+1 )
345 CALL dlarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
346 $ tau( i ), work( iwt ), ldt )
364 CALL dlarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
365 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
366 $ c( ic, jc ), ldc, work, ldwork )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
DLARZT forms the triangular factor T of a block reflector H = I - vtvH.
subroutine dormrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMRZ
subroutine dormr3(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, INFO)
DORMR3 multiplies a general matrix by the orthogonal matrix from a RZ factorization determined by stz...
subroutine dlarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
DLARZB applies a block reflector or its transpose to a general matrix.