176 SUBROUTINE dormhr( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
177 $ LDC, WORK, LWORK, INFO )
184 CHARACTER SIDE, TRANS
185 INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N
188 DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * )
195 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW
200 EXTERNAL lsame, ilaenv
214 left = lsame( side,
'L' )
215 lquery = ( lwork.EQ.-1 )
226 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
228 ELSE IF( .NOT.lsame( trans,
'N' ) .AND. .NOT.lsame( trans,
'T' ) )
231 ELSE IF( m.LT.0 )
THEN
233 ELSE IF( n.LT.0 )
THEN
235 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, nq ) )
THEN
237 ELSE IF( ihi.LT.min( ilo, nq ) .OR. ihi.GT.nq )
THEN
239 ELSE IF( lda.LT.max( 1, nq ) )
THEN
241 ELSE IF( ldc.LT.max( 1, m ) )
THEN
243 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
249 nb = ilaenv( 1,
'DORMQR', side // trans, nh, n, nh, -1 )
251 nb = ilaenv( 1,
'DORMQR', side // trans, m, nh, nh, -1 )
258 CALL xerbla(
'DORMHR', -info )
260 ELSE IF( lquery )
THEN
266 IF( m.EQ.0 .OR. n.EQ.0 .OR. nh.EQ.0 )
THEN
283 CALL dormqr( side, trans, mi, ni, nh, a( ilo+1, ilo ), lda,
284 $ tau( ilo ), c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine xerbla(srname, info)
subroutine dormhr(side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc, work, lwork, info)
DORMHR
subroutine dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQR