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' ) )
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
double precision function zqpt01(M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
ZQPT01
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMQR
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY