187 SUBROUTINE sormrz( 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 REAL 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,
'T' ) )
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,
'SORMRQ', side // trans, m, n,
275 lwkopt = nw*nb + tsize
281 CALL xerbla(
'SORMRZ', -info )
283 ELSE IF( lquery )
THEN 289 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 295 IF( nb.GT.1 .AND. nb.LT.k )
THEN 296 IF( lwork.LT.nw*nb+tsize )
THEN 297 nb = (lwork-tsize) / ldwork
298 nbmin = max( 2, ilaenv( 2,
'SORMRQ', side // trans, m, n, k,
303 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN 307 CALL sormr3( side, trans, m, n, k, l, a, lda, tau, c, ldc,
314 IF( ( left .AND. .NOT.notran ) .OR.
315 $ ( .NOT.left .AND. notran ) )
THEN 320 i1 = ( ( k-1 ) / nb )*nb + 1
342 ib = min( nb, k-i+1 )
347 CALL slarzt(
'Backward',
'Rowwise', l, ib, a( i, ja ), lda,
348 $ tau( i ), work( iwt ), ldt )
366 CALL slarzb( side, transt,
'Backward',
'Rowwise', mi, ni,
367 $ ib, l, a( i, ja ), lda, work( iwt ), ldt,
368 $ c( ic, jc ), ldc, work, ldwork )
subroutine sormrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMRZ
subroutine slarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
SLARZB applies a block reflector or its transpose to a general matrix.
subroutine sormr3(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, INFO)
SORMR3 multiplies a general matrix by the orthogonal matrix from a RZ factorization determined by stz...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
SLARZT forms the triangular factor T of a block reflector H = I - vtvH.