118 DOUBLE PRECISION FUNCTION zqpt01( M, N, K, A, AF, LDA, TAU, JPVT,
126 INTEGER k, lda, lwork, m, n
130 COMPLEX*16 a( lda, * ), af( lda, * ), tau( * ),
137 DOUBLE PRECISION zero, one
138 parameter( zero = 0.0d0, one = 1.0d0 )
142 DOUBLE PRECISION norma
145 DOUBLE PRECISION rwork( 1 )
155 INTRINSIC dble, dcmplx, max, min
163 IF( lwork.LT.m*n+n )
THEN
164 CALL xerbla(
'ZQPT01', 10 )
170 IF( m.LE.0 .OR. n.LE.0 )
173 norma =
zlange(
'One-norm', m, n, a, lda, rwork )
176 DO i = 1, min( j, m )
177 work( ( j-1 )*m+i ) = af( i, j )
180 work( ( j-1 )*m+i ) = zero
184 CALL zcopy( m, af( 1, j ), 1, work( ( j-1 )*m+1 ), 1 )
187 CALL zunmqr(
'Left',
'No transpose', m, n, k, af, lda, tau, work,
188 $ m, work( m*n+1 ), lwork-m*n, info )
194 CALL zaxpy( m, dcmplx( -one ), a( 1, jpvt( j ) ), 1,
195 $ work( ( j-1 )*m+1 ), 1 )
199 $ ( dble( max( m, n ) )*
dlamch(
'Epsilon' ) )
subroutine xerbla(srname, info)
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
double precision function dlamch(cmach)
DLAMCH
double precision function zlange(norm, m, n, a, lda, work)
ZLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine zunmqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
ZUNMQR
double precision function zqpt01(m, n, k, a, af, lda, tau, jpvt, work, lwork)
ZQPT01