170 SUBROUTINE sormtr( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
171 $ WORK, LWORK, INFO )
178 CHARACTER SIDE, TRANS, UPLO
179 INTEGER INFO, LDA, LDC, LWORK, M, N
182 REAL A( lda, * ), C( ldc, * ), TAU( * ),
189 LOGICAL LEFT, LQUERY, UPPER
190 INTEGER I1, I2, IINFO, LWKOPT, MI, NI, NB, NQ, NW
195 EXTERNAL ilaenv, lsame
208 left = lsame( side,
'L' )
209 upper = lsame( uplo,
'U' )
210 lquery = ( lwork.EQ.-1 )
221 IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 223 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 225 ELSE IF( .NOT.lsame( trans,
'N' ) .AND. .NOT.lsame( trans,
'T' ) )
228 ELSE IF( m.LT.0 )
THEN 230 ELSE IF( n.LT.0 )
THEN 232 ELSE IF( lda.LT.max( 1, nq ) )
THEN 234 ELSE IF( ldc.LT.max( 1, m ) )
THEN 236 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN 243 nb = ilaenv( 1,
'SORMQL', side // trans, m-1, n, m-1,
246 nb = ilaenv( 1,
'SORMQL', side // trans, m, n-1, n-1,
251 nb = ilaenv( 1,
'SORMQR', side // trans, m-1, n, m-1,
254 nb = ilaenv( 1,
'SORMQR', side // trans, m, n-1, n-1,
263 CALL xerbla(
'SORMTR', -info )
265 ELSE IF( lquery )
THEN 271 IF( m.EQ.0 .OR. n.EQ.0 .OR. nq.EQ.1 )
THEN 288 CALL sormql( side, trans, mi, ni, nq-1, a( 1, 2 ), lda, tau, c,
289 $ ldc, work, lwork, iinfo )
301 CALL sormqr( side, trans, mi, ni, nq-1, a( 2, 1 ), lda, tau,
302 $ c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMQR
subroutine sormtr(SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMTR
subroutine sormql(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMQL