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 xerbla(SRNAME, INFO)
XERBLA
subroutine sormhr(SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMHR