169 SUBROUTINE dormtr( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
170 $ WORK, LWORK, INFO )
177 CHARACTER SIDE, TRANS, UPLO
178 INTEGER INFO, LDA, LDC, LWORK, M, N
181 DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
187 LOGICAL LEFT, LQUERY, UPPER
188 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NI, NQ, NW
193 EXTERNAL lsame, ilaenv
206 left = lsame( side,
'L' )
207 upper = lsame( uplo,
'U' )
208 lquery = ( lwork.EQ.-1 )
219 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
221 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
223 ELSE IF( .NOT.lsame( trans,
'N' ) .AND. .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, c,
287 $ ldc, work, lwork, iinfo )
299 CALL dormqr( side, trans, mi, ni, nq-1, a( 2, 1 ), lda, tau,
300 $ c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine xerbla(srname, info)
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