193 SUBROUTINE dormbr( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
194 $ LDC, WORK, LWORK, INFO )
201 CHARACTER SIDE, TRANS,
202 INTEGER INFO, K, LDA, LDC, LWORK, M, N
205 DOUBLE PRECISION A( , * ), C( LDC, * ), TAU( * ), WORK( * )
211 LOGICAL APPLYQ, LEFT, LQUERY, NOTRAN
213 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NI, NQ, NW
218 EXTERNAL lsame, ilaenv
231 applyq = lsame( vect,
'Q' )
232 left = lsame( side,
'L' )
233 notran = lsame( trans,
'N' )
234 lquery = ( lwork.EQ.-1 )
245 IF( .NOT.applyq .AND. .NOT.lsame( vect, 'p
' ) ) THEN
247.NOT..AND..NOT.
ELSE IF( LEFT LSAME( SIDE, 'r
' ) ) THEN
249.NOT..AND..NOT.
ELSE IF( NOTRAN LSAME( TRANS, 't
' ) ) THEN
251.LT.
ELSE IF( M0 ) THEN
253.LT.
ELSE IF( N0 ) THEN
255.LT.
ELSE IF( K0 ) THEN
257.AND..LT..OR.
ELSE IF( ( APPLYQ LDAMAX( 1, NQ ) )
258.NOT..AND..LT.
$ ( APPLYQ LDAMAX( 1, MIN( NQ, K ) ) ) )
261.LT.
ELSE IF( LDCMAX( 1, M ) ) THEN
263.LT..AND..NOT.
ELSE IF( LWORKNW LQUERY ) THEN
270 NB = ILAENV( 1, 'dormqr', SIDE // TRANS, M-1, N, M-1,
273 NB = ILAENV( 1, 'dormqr', SIDE // TRANS, M, N-1, N-1,
278 NB = ILAENV( 1, 'dormlq', side // trans, m-1, n, m-1,
281 nb = ilaenv( 1,
'DORMLQ', side // trans, m, n-1, n-1,
290 CALL xerbla(
'DORMBR', -info )
292 ELSE IF( lquery )
THEN
299 IF( m.EQ.0 .OR. n.EQ.0 )
310 CALL dormqr( side, trans, m, n, k, a, lda, tau, c, ldc,
311 $ work, lwork, iinfo )
312 ELSE IF( nq.GT.1 )
THEN
327 CALL dormqr( side, trans, mi, ni, nq-1, a( 2, 1 ), lda, tau,
328 $ c( i1, i2 ), ldc, work, lwork, iinfo )
343 CALL dormlq( side, transt, m, n, k, a, lda, tau, c, ldc,
344 $ work, lwork, iinfo )
345 ELSE IF( nq.GT.1 )
THEN
360 CALL dormlq( side, transt, mi, ni, nq-1, a( 1, 2 ), lda,
361 $ tau, c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine dormbr(vect, side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMBR
subroutine dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQR
subroutine dormlq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMLQ