118 REAL function
sqpt01( m, n, k, a, af, lda, tau, jpvt,
126 INTEGER k, lda, lwork, m, n
130 REAL a( lda, * ), af( lda, * ), tau( * ),
138 parameter( zero = 0.0e0, one = 1.0e0 )
155 INTRINSIC max, min, real
163 IF( lwork.LT.m*n+n )
THEN
164 CALL xerbla(
'SQPT01', 10 )
170 IF( m.LE.0 .OR. n.LE.0 )
173 norma =
slange(
'One-norm', m, n, a, lda, rwork )
176 DO 10 i = 1, min( j, m )
177 work( ( j-1 )*m+i ) = af( i, j )
180 work( ( j-1 )*m+i ) = zero
184 CALL scopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
187 CALL sormqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
188 $ m, work( m*n+1 ), lwork-m*n, info )
194 CALL saxpy( m, -one, a( 1, jpvt( j ) ), 1, work( ( j-1 )*m+1 ),
199 $ ( real( max( m, n ) )*
slamch(
'Epsilon' ) )
subroutine xerbla(SRNAME, INFO)
XERBLA
real function slange(NORM, M, N, A, LDA, WORK)
SLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine sormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
SORMQR
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
real function sqpt01(M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
SQPT01
real function slamch(CMACH)
SLAMCH