156 SUBROUTINE dorgbr( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
164 INTEGER INFO, K, LDA, LWORK, M, N
167 DOUBLE PRECISION A( lda, * ), TAU( * ), WORK( * )
173 DOUBLE PRECISION ZERO, ONE
174 parameter( zero = 0.0d+0, one = 1.0d+0 )
177 LOGICAL LQUERY, WANTQ
178 INTEGER I, IINFO, J, LWKOPT, MN
195 wantq = lsame( vect,
'Q' )
197 lquery = ( lwork.EQ.-1 )
198 IF( .NOT.wantq .AND. .NOT.lsame( vect,
'P' ) )
THEN 200 ELSE IF( m.LT.0 )
THEN 202 ELSE IF( n.LT.0 .OR. ( wantq .AND. ( n.GT.m .OR. n.LT.min( m,
203 $ k ) ) ) .OR. ( .NOT.wantq .AND. ( m.GT.n .OR. m.LT.
204 $ min( n, k ) ) ) )
THEN 206 ELSE IF( k.LT.0 )
THEN 208 ELSE IF( lda.LT.max( 1, m ) )
THEN 210 ELSE IF( lwork.LT.max( 1, mn ) .AND. .NOT.lquery )
THEN 218 CALL dorgqr( m, n, k, a, lda, tau, work, -1, iinfo )
221 CALL dorgqr( m-1, m-1, m-1, a, lda, tau, work, -1,
227 CALL dorglq( m, n, k, a, lda, tau, work, -1, iinfo )
230 CALL dorglq( n-1, n-1, n-1, a, lda, tau, work, -1,
235 lwkopt = int( work( 1 ) )
236 lwkopt = max(lwkopt, mn)
240 CALL xerbla(
'DORGBR', -info )
242 ELSE IF( lquery )
THEN 249 IF( m.EQ.0 .OR. n.EQ.0 )
THEN 263 CALL dorgqr( m, n, k, a, lda, tau, work, lwork, iinfo )
276 a( i, j ) = a( i, j-1 )
287 CALL dorgqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
300 CALL dorglq( m, n, k, a, lda, tau, work, lwork, iinfo )
315 DO 50 i = j - 1, 2, -1
316 a( i, j ) = a( i-1, j )
324 CALL dorglq( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dorgqr(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
DORGQR
subroutine dorgbr(VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
DORGBR
subroutine dorglq(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
DORGLQ