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 )
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 )
202 $ ( dble( max( m, n ) )*
dlamch(
'Epsilon' ) )
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 ...
DOUBLE PRECISION function zqpt01(M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
ZQPT01
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real j
DOUBLE PRECISION function dlamch(CMACH)
DLAMCH
subroutine zunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMQR