120 DOUBLE PRECISION FUNCTION dqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
129 INTEGER K, LDA, LWORK, M, N
133 DOUBLE PRECISION A( lda, * ), AF( lda, * ), TAU( * ),
140 DOUBLE PRECISION ZERO, ONE
141 parameter ( zero = 0.0d0, one = 1.0d0 )
145 DOUBLE PRECISION NORMA
148 DOUBLE PRECISION RWORK( 1 )
151 DOUBLE PRECISION DLAMCH, DLANGE
152 EXTERNAL dlamch, dlange
158 INTRINSIC dble, max, min
166 IF( lwork.LT.m*n+n )
THEN
167 CALL xerbla(
'DQPT01', 10 )
173 IF( m.LE.0 .OR. n.LE.0 )
176 norma = dlange(
'One-norm', m, n, a, lda, rwork )
179 DO 10 i = 1, min( j, m )
180 work( ( j-1 )*m+i ) = af( i, j )
183 work( ( j-1 )*m+i ) = zero
187 CALL dcopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
190 CALL dormqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
191 $ m, work( m*n+1 ), lwork-m*n, info )
197 CALL daxpy( m, -one, a( 1, jpvt( j ) ), 1, work( ( j-1 )*m+1 ),
201 dqpt01 = dlange(
'One-norm', m, n, work, m, rwork ) /
202 $ ( dble( max( m, n ) )*dlamch(
'Epsilon' ) )
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
subroutine dormqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMQR
subroutine xerbla(SRNAME, INFO)
XERBLA
double precision function dqpt01(M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
DQPT01