120 DOUBLE PRECISION FUNCTION zqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
129 INTEGER K, LDA, LWORK, M, N
133 COMPLEX*16 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, ZLANGE
152 EXTERNAL dlamch, zlange
158 INTRINSIC dble, dcmplx, max, min
166 IF( lwork.LT.m*n+n )
THEN
167 CALL
xerbla(
'ZQPT01', 10 )
173 IF( m.LE.0 .OR. n.LE.0 )
176 norma = zlange(
'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
zcopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
190 CALL
zunmqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
191 $ m, work( m*n+1 ), lwork-m*n, info )
197 CALL
zaxpy( m, dcmplx( -one ), a( 1, jpvt( j ) ), 1,
198 $ work( ( j-1 )*m+1 ), 1 )
201 zqpt01 = zlange(
'One-norm', m, n, work, m, rwork ) /
202 $ ( dble( max( m, n ) )*dlamch(
'Epsilon' ) )
204 $ zqpt01 = zqpt01 / norma
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
subroutine zunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMQR