179 SUBROUTINE sormhr( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
180 $ LDC, WORK, LWORK, INFO )
188 CHARACTER SIDE, TRANS
189 INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N
192 REAL A( lda, * ), C( ldc, * ), TAU( * ),
200 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW
205 EXTERNAL ilaenv, lsame
219 left = lsame( side,
'L' )
220 lquery = ( lwork.EQ.-1 )
231 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 233 ELSE IF( .NOT.lsame( trans,
'N' ) .AND. .NOT.lsame( trans,
'T' ) )
236 ELSE IF( m.LT.0 )
THEN 238 ELSE IF( n.LT.0 )
THEN 240 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, nq ) )
THEN 242 ELSE IF( ihi.LT.min( ilo, nq ) .OR. ihi.GT.nq )
THEN 244 ELSE IF( lda.LT.max( 1, nq ) )
THEN 246 ELSE IF( ldc.LT.max( 1, m ) )
THEN 248 ELSE IF( lwork.LT.max( 1, nw ) .AND. .NOT.lquery )
THEN 254 nb = ilaenv( 1,
'SORMQR', side // trans, nh, n, nh, -1 )
256 nb = ilaenv( 1,
'SORMQR', side // trans, m, nh, nh, -1 )
258 lwkopt = max( 1, nw )*nb
263 CALL xerbla(
'SORMHR', -info )
265 ELSE IF( lquery )
THEN 271 IF( m.EQ.0 .OR. n.EQ.0 .OR. nh.EQ.0 )
THEN 288 CALL sormqr( side, trans, mi, ni, nh, a( ilo+1, ilo ), lda,
289 $ tau( ilo ), c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine sormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMQR
subroutine sormhr(SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMHR
subroutine xerbla(SRNAME, INFO)
XERBLA