147 SUBROUTINE dlaqp2( M, N, OFFSET, A, LDA, JPVT, TAU, VN1, VN2,
155 INTEGER LDA, M, N, OFFSET
159 DOUBLE PRECISION A( LDA, * ), TAU( * ), VN1( * ), VN2( * ),
166 DOUBLE PRECISION ZERO, ONE
167 parameter( zero = 0.0d+0, one = 1.0d+0 )
170 INTEGER I, ITEMP, J, MN, OFFPI, PVT
171 DOUBLE PRECISION AII, TEMP, TEMP2, TOL3Z
177 INTRINSIC abs, max, min, sqrt
181 DOUBLE PRECISION DLAMCH, DNRM2
182 EXTERNAL idamax, dlamch, dnrm2
186 mn = min( m-offset, n )
187 tol3z = sqrt(dlamch(
'Epsilon'))
197 pvt = ( i-1 ) + idamax( n-i+1, vn1( i ), 1 )
200 CALL dswap( m, a( 1, pvt ), 1, a( 1, i ), 1 )
202 jpvt( pvt ) = jpvt( i )
204 vn1( pvt ) = vn1( i )
205 vn2( pvt ) = vn2( i )
210 IF( offpi.LT.m )
THEN
211 CALL dlarfg( m-offpi+1, a( offpi, i ), a( offpi+1, i ), 1,
214 CALL dlarfg( 1, a( m, i ), a( m, i ), 1, tau( i ) )
223 CALL dlarf(
'Left', m-offpi+1, n-i, a( offpi, i ), 1,
224 $ tau( i ), a( offpi, i+1 ), lda, work( 1 ) )
231 IF( vn1( j ).NE.zero )
THEN
236 temp = one - ( abs( a( offpi, j ) ) / vn1( j ) )**2
237 temp = max( temp, zero )
238 temp2 = temp*( vn1( j ) / vn2( j ) )**2
239 IF( temp2 .LE. tol3z )
THEN
240 IF( offpi.LT.m )
THEN
241 vn1( j ) = dnrm2( m-offpi, a( offpi+1, j ), 1 )
248 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 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).
subroutine dswap(n, dx, incx, dy, incy)
DSWAP