167 SUBROUTINE dormtr( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C,
169 $ WORK, LWORK, INFO )
176 CHARACTER SIDE, TRANS, UPLO
177 INTEGER INFO, LDA, LDC, LWORK, M, N
180 DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
186 LOGICAL LEFT, LQUERY, UPPER
187 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NI, NQ, NW
192 EXTERNAL lsame, ilaenv
205 left = lsame( side,
'L' )
206 upper = lsame( uplo,
'U' )
207 lquery = ( lwork.EQ.-1 )
218 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
220 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
222 ELSE IF( .NOT.lsame( trans,
'N' ) .AND.
223 $ .NOT.lsame( trans,
'T' ) )
226 ELSE IF( m.LT.0 )
THEN
228 ELSE IF( n.LT.0 )
THEN
230 ELSE IF( lda.LT.max( 1, nq ) )
THEN
232 ELSE IF( ldc.LT.max( 1, m ) )
THEN
234 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
241 nb = ilaenv( 1,
'DORMQL', side // trans, m-1, n, m-1,
244 nb = ilaenv( 1,
'DORMQL', side // trans, m, n-1, n-1,
249 nb = ilaenv( 1,
'DORMQR', side // trans, m-1, n, m-1,
252 nb = ilaenv( 1,
'DORMQR', side // trans, m, n-1, n-1,
261 CALL xerbla(
'DORMTR', -info )
263 ELSE IF( lquery )
THEN
269 IF( m.EQ.0 .OR. n.EQ.0 .OR. nq.EQ.1 )
THEN
286 CALL dormql( side, trans, mi, ni, nq-1, a( 1, 2 ), lda, tau,
288 $ ldc, work, lwork, iinfo )
300 CALL dormqr( side, trans, mi, ni, nq-1, a( 2, 1 ), lda, tau,
301 $ c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine dormql(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQL
subroutine dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQR
subroutine dormtr(side, uplo, trans, m, n, a, lda, tau, c, ldc, work, lwork, info)
DORMTR