178 SUBROUTINE zunmhr( 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 COMPLEX*16 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,
'C' ) )
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,
'ZUNMQR', side // trans, nh, n, nh, -1 )
254 nb = ilaenv( 1,
'ZUNMQR', side // trans, m, nh, nh, -1 )
256 lwkopt = max( 1, nw )*nb
261 CALL xerbla(
'ZUNMHR', -info )
263 ELSE IF( lquery )
THEN
269 IF( m.EQ.0 .OR. n.EQ.0 .OR. nh.EQ.0 )
THEN
286 CALL zunmqr( side, trans, mi, ni, nh, a( ilo+1, ilo ), lda,
287 $ tau( ilo ), c( i1, i2 ), ldc, work, lwork, iinfo )