178 SUBROUTINE dormhr( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
179 $ ldc, work, lwork, info )
187 CHARACTER SIDE, TRANS
188 INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N
191 DOUBLE PRECISION A( lda, * ), C( ldc, * ), TAU( * ), WORK( * )
198 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW
203 EXTERNAL lsame, ilaenv
217 left = lsame( side,
'L' )
218 lquery = ( lwork.EQ.-1 )
229 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
231 ELSE IF( .NOT.lsame( trans,
'N' ) .AND. .NOT.lsame( trans,
'T' ) )
234 ELSE IF( m.LT.0 )
THEN
236 ELSE IF( n.LT.0 )
THEN
238 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, nq ) )
THEN
240 ELSE IF( ihi.LT.min( ilo, nq ) .OR. ihi.GT.nq )
THEN
242 ELSE IF( lda.LT.max( 1, nq ) )
THEN
244 ELSE IF( ldc.LT.max( 1, m ) )
THEN
246 ELSE IF( lwork.LT.max( 1, nw ) .AND. .NOT.lquery )
THEN
252 nb = ilaenv( 1,
'DORMQR', side // trans, nh, n, nh, -1 )
254 nb = ilaenv( 1,
'DORMQR', side // trans, m, nh, nh, -1 )
256 lwkopt = max( 1, nw )*nb
261 CALL xerbla(
'DORMHR', -info )
263 ELSE IF( lquery )
THEN
269 IF( m.EQ.0 .OR. n.EQ.0 .OR. nh.EQ.0 )
THEN
286 CALL dormqr( side, trans, mi, ni, nh, a( ilo+1, ilo ), lda,
287 $ tau( ilo ), c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine dormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMQR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dormhr(SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMHR