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)
subroutine dormbr(vect, side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMBR
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