170 SUBROUTINE sormrq( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
171 $ work, lwork, info )
179 CHARACTER SIDE, TRANS
180 INTEGER INFO, K, LDA, LDC, LWORK, M, N
183 REAL A( lda, * ), C( ldc, * ), TAU( * ),
191 parameter( nbmax = 64, ldt = nbmax+1 )
194 LOGICAL LEFT, LQUERY, NOTRAN
196 INTEGER I, I1, I2, I3, IB, IINFO, IWS, LDWORK, LWKOPT,
197 $ mi, nb, nbmin, ni, nq, nw
205 EXTERNAL lsame, ilaenv
218 left = lsame( side,
'L' )
219 notran = lsame( trans,
'N' )
220 lquery = ( lwork.EQ.-1 )
231 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
233 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) )
THEN
235 ELSE IF( m.LT.0 )
THEN
237 ELSE IF( n.LT.0 )
THEN
239 ELSE IF( k.LT.0 .OR. k.GT.nq )
THEN
241 ELSE IF( lda.LT.max( 1, k ) )
THEN
243 ELSE IF( ldc.LT.max( 1, m ) )
THEN
248 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
255 nb = min( nbmax, ilaenv( 1,
'SORMRQ', side // trans, m, n,
261 IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
267 CALL
xerbla(
'SORMRQ', -info )
269 ELSE IF( lquery )
THEN
275 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
281 IF( nb.GT.1 .AND. nb.LT.k )
THEN
283 IF( lwork.LT.iws )
THEN
285 nbmin = max( 2, ilaenv( 2,
'SORMRQ', side // trans, m, n, k,
292 IF( nb.LT.nbmin .OR. nb.GE.k )
THEN
296 CALL
sormr2( side, trans, m, n, k, a, lda, tau, c, ldc, work,
302 IF( ( left .AND. .NOT.notran ) .OR.
303 $ ( .NOT.left .AND. notran ) )
THEN
308 i1 = ( ( k-1 ) / nb )*nb + 1
326 ib = min( nb, k-i+1 )
331 CALL
slarft(
'Backward',
'Rowwise', nq-k+i+ib-1, ib,
332 $ a( i, 1 ), lda, tau( i ), t, ldt )
337 mi = m - k + i + ib - 1
342 ni = n - k + i + ib - 1
347 CALL
slarfb( side, transt,
'Backward',
'Rowwise', mi, ni,
348 $ ib, a( i, 1 ), lda, t, ldt, c, ldc, work,
subroutine sormr2(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, INFO)
SORMR2 multiplies a general matrix by the orthogonal matrix from a RQ factorization determined by sge...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sormrq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMRQ
subroutine slarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
SLARFB applies a block reflector or its transpose to a general rectangular matrix.
subroutine slarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
SLARFT forms the triangular factor T of a block reflector H = I - vtvH