143 SUBROUTINE dlaqp2( M, N, OFFSET, A, LDA, JPVT, TAU, VN1, VN2,
151 INTEGER LDA, M, N, OFFSET
155 DOUBLE PRECISION A( LDA, * ), TAU( * ), VN1( * ), VN2( * ),
162 DOUBLE PRECISION ZERO, ONE
163 parameter( zero = 0.0d+0, one = 1.0d+0 )
166 INTEGER I, ITEMP, J, MN, OFFPI, PVT
167 DOUBLE PRECISION TEMP, TEMP2, TOL3Z
173 INTRINSIC abs, max, min, sqrt
177 DOUBLE PRECISION DLAMCH, DNRM2
178 EXTERNAL idamax, dlamch, dnrm2
182 mn = min( m-offset, n )
183 tol3z = sqrt(dlamch(
'Epsilon'))
193 pvt = ( i-1 ) + idamax( n-i+1, vn1( i ), 1 )
196 CALL dswap( m, a( 1, pvt ), 1, a( 1, i ), 1 )
198 jpvt( pvt ) = jpvt( i )
200 vn1( pvt ) = vn1( i )
201 vn2( pvt ) = vn2( i )
206 IF( offpi.LT.m )
THEN
207 CALL dlarfg( m-offpi+1, a( offpi, i ), a( offpi+1, i ),
211 CALL dlarfg( 1, a( m, i ), a( m, i ), 1, tau( i ) )
218 CALL dlarf1f(
'Left', m-offpi+1, n-i, a( offpi, i ), 1,
219 $ tau( i ), a( offpi, i+1 ), lda, work( 1 ) )
225 IF( vn1( j ).NE.zero )
THEN
230 temp = one - ( abs( a( offpi, j ) ) / vn1( j ) )**2
231 temp = max( temp, zero )
232 temp2 = temp*( vn1( j ) / vn2( j ) )**2
233 IF( temp2 .LE. tol3z )
THEN
234 IF( offpi.LT.m )
THEN
235 vn1( j ) = dnrm2( m-offpi, a( offpi+1, j ), 1 )
242 vn1( j ) = vn1( j )*sqrt( temp )
subroutine dlaqp2(m, n, offset, a, lda, jpvt, tau, vn1, vn2, work)
DLAQP2 computes a QR factorization with column pivoting of the matrix block.
subroutine dlarf1f(side, m, n, v, incv, tau, c, ldc, work)
DLARF1F applies an elementary reflector to a general rectangular
subroutine dlarf(side, m, n, v, incv, tau, c, ldc, work)
DLARF applies an elementary reflector to a general rectangular matrix.
subroutine dlarfg(n, alpha, x, incx, tau)
DLARFG generates an elementary reflector (Householder matrix).