193 SUBROUTINE dormbr( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
194 $ LDC, WORK, LWORK, INFO )
201 CHARACTER SIDE, TRANS, VECT
202 INTEGER INFO, K, LDA, LDC, LWORK, M, N
205 DOUBLE PRECISION A( lda, * ), 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 ELSE IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 249 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) )
THEN 251 ELSE IF( m.LT.0 )
THEN 253 ELSE IF( n.LT.0 )
THEN 255 ELSE IF( k.LT.0 )
THEN 257 ELSE IF( ( applyq .AND. lda.LT.max( 1, nq ) ) .OR.
258 $ ( .NOT.applyq .AND. lda.LT.max( 1, min( nq, k ) ) ) )
261 ELSE IF( ldc.LT.max( 1, m ) )
THEN 263 ELSE IF( lwork.LT.nw .AND. .NOT.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 xerbla(SRNAME, INFO)
XERBLA
subroutine dormlq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMLQ
subroutine dormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMQR
subroutine dormbr(VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMBR