119 DOUBLE PRECISION FUNCTION dqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
127 INTEGER k, lda, lwork, m, n
131 DOUBLE PRECISION a( lda, * ), af( lda, * ), tau( * ),
138 DOUBLE PRECISION zero, one
139 parameter( zero = 0.0d0, one = 1.0d0 )
143 DOUBLE PRECISION norma
146 DOUBLE PRECISION rwork( 1 )
156 INTRINSIC dble, max, min
164 IF( lwork.LT.m*n+n )
THEN
165 CALL xerbla(
'DQPT01', 10 )
171 IF( m.LE.0 .OR. n.LE.0 )
174 norma =
dlange(
'One-norm', m, n, a, lda, rwork )
181 DO i = 1, min( j, m )
182 work( ( j-1 )*m+i ) = af( i, j )
188 work( ( j-1 )*m+i ) = zero
198 CALL dcopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
201 CALL dormqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
202 $ m, work( m*n+1 ), lwork-m*n, info )
208 CALL daxpy( m, -one, a( 1, jpvt( j ) ), 1, work( ( j-1 )*m+1 ),
213 $ ( dble( max( m, n ) )*
dlamch(
'Epsilon' ) )
subroutine xerbla(srname, info)
double precision function dqpt01(m, n, k, a, af, lda, tau, jpvt, work, lwork)
DQPT01
subroutine daxpy(n, da, dx, incx, dy, incy)
DAXPY
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
double precision function dlamch(cmach)
DLAMCH
double precision function dlange(norm, m, n, a, lda, work)
DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine dormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
DORMQR