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)
XERBLA
subroutine dormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMQR
subroutine dormql(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMQL
subroutine dormtr(SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMTR