175 SUBROUTINE sormhr( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
176 $ LDC, WORK, LWORK, INFO )
183 CHARACTER SIDE, TRANS
184 INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N
187 REAL A( LDA, * ), C( LDC, * ), TAU( * ),
195 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW
201 EXTERNAL ilaenv, lsame, sroundup_lwork
215 left = lsame( side,
'L' )
216 lquery = ( lwork.EQ.-1 )
227 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN
229 ELSE IF( .NOT.lsame( trans,
'N' ) .AND.
230 $ .NOT.lsame( trans,
'T' ) )
233 ELSE IF( m.LT.0 )
THEN
235 ELSE IF( n.LT.0 )
THEN
237 ELSE IF( ilo.LT.1 .OR. ilo.GT.max( 1, nq ) )
THEN
239 ELSE IF( ihi.LT.min( ilo, nq ) .OR. ihi.GT.nq )
THEN
241 ELSE IF( lda.LT.max( 1, nq ) )
THEN
243 ELSE IF( ldc.LT.max( 1, m ) )
THEN
245 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN
251 nb = ilaenv( 1,
'SORMQR', side // trans, nh, n, nh, -1 )
253 nb = ilaenv( 1,
'SORMQR', side // trans, m, nh, nh, -1 )
256 work( 1 ) = sroundup_lwork(lwkopt)
260 CALL xerbla(
'SORMHR', -info )
262 ELSE IF( lquery )
THEN
268 IF( m.EQ.0 .OR. n.EQ.0 .OR. nh.EQ.0 )
THEN
285 CALL sormqr( side, trans, mi, ni, nh, a( ilo+1, ilo ), lda,
286 $ tau( ilo ), c( i1, i2 ), ldc, work, lwork, iinfo )
288 work( 1 ) = sroundup_lwork(lwkopt)
subroutine sormhr(side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc, work, lwork, info)
SORMHR
subroutine sormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
SORMQR