summaryrefslogtreecommitdiff
path: root/src/lib/lapack/zlaqp2.f
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/lapack/zlaqp2.f')
-rw-r--r--src/lib/lapack/zlaqp2.f179
1 files changed, 0 insertions, 179 deletions
diff --git a/src/lib/lapack/zlaqp2.f b/src/lib/lapack/zlaqp2.f
deleted file mode 100644
index 46f6d95c..00000000
--- a/src/lib/lapack/zlaqp2.f
+++ /dev/null
@@ -1,179 +0,0 @@
- SUBROUTINE ZLAQP2( M, N, OFFSET, A, LDA, JPVT, TAU, VN1, VN2,
- $ WORK )
-*
-* -- LAPACK auxiliary routine (version 3.1) --
-* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
-* November 2006
-*
-* .. Scalar Arguments ..
- INTEGER LDA, M, N, OFFSET
-* ..
-* .. Array Arguments ..
- INTEGER JPVT( * )
- DOUBLE PRECISION VN1( * ), VN2( * )
- COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
-* ..
-*
-* Purpose
-* =======
-*
-* ZLAQP2 computes a QR factorization with column pivoting of
-* the block A(OFFSET+1:M,1:N).
-* The block A(1:OFFSET,1:N) is accordingly pivoted, but not factorized.
-*
-* Arguments
-* =========
-*
-* M (input) INTEGER
-* The number of rows of the matrix A. M >= 0.
-*
-* N (input) INTEGER
-* The number of columns of the matrix A. N >= 0.
-*
-* OFFSET (input) INTEGER
-* The number of rows of the matrix A that must be pivoted
-* but no factorized. OFFSET >= 0.
-*
-* A (input/output) COMPLEX*16 array, dimension (LDA,N)
-* On entry, the M-by-N matrix A.
-* On exit, the upper triangle of block A(OFFSET+1:M,1:N) is
-* the triangular factor obtained; the elements in block
-* A(OFFSET+1:M,1:N) below the diagonal, together with the
-* array TAU, represent the orthogonal matrix Q as a product of
-* elementary reflectors. Block A(1:OFFSET,1:N) has been
-* accordingly pivoted, but no factorized.
-*
-* LDA (input) INTEGER
-* The leading dimension of the array A. LDA >= max(1,M).
-*
-* JPVT (input/output) INTEGER array, dimension (N)
-* On entry, if JPVT(i) .ne. 0, the i-th column of A is permuted
-* to the front of A*P (a leading column); if JPVT(i) = 0,
-* the i-th column of A is a free column.
-* On exit, if JPVT(i) = k, then the i-th column of A*P
-* was the k-th column of A.
-*
-* TAU (output) COMPLEX*16 array, dimension (min(M,N))
-* The scalar factors of the elementary reflectors.
-*
-* VN1 (input/output) DOUBLE PRECISION array, dimension (N)
-* The vector with the partial column norms.
-*
-* VN2 (input/output) DOUBLE PRECISION array, dimension (N)
-* The vector with the exact column norms.
-*
-* WORK (workspace) COMPLEX*16 array, dimension (N)
-*
-* Further Details
-* ===============
-*
-* Based on contributions by
-* G. Quintana-Orti, Depto. de Informatica, Universidad Jaime I, Spain
-* X. Sun, Computer Science Dept., Duke University, USA
-*
-* Partial column norm updating strategy modified by
-* Z. Drmac and Z. Bujanovic, Dept. of Mathematics,
-* University of Zagreb, Croatia.
-* June 2006.
-* For more details see LAPACK Working Note 176.
-* =====================================================================
-*
-* .. Parameters ..
- DOUBLE PRECISION ZERO, ONE
- COMPLEX*16 CONE
- PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0,
- $ CONE = ( 1.0D+0, 0.0D+0 ) )
-* ..
-* .. Local Scalars ..
- INTEGER I, ITEMP, J, MN, OFFPI, PVT
- DOUBLE PRECISION TEMP, TEMP2, TOL3Z
- COMPLEX*16 AII
-* ..
-* .. External Subroutines ..
- EXTERNAL ZLARF, ZLARFG, ZSWAP
-* ..
-* .. Intrinsic Functions ..
- INTRINSIC ABS, DCONJG, MAX, MIN, SQRT
-* ..
-* .. External Functions ..
- INTEGER IDAMAX
- DOUBLE PRECISION DLAMCH, DZNRM2
- EXTERNAL IDAMAX, DLAMCH, DZNRM2
-* ..
-* .. Executable Statements ..
-*
- MN = MIN( M-OFFSET, N )
- TOL3Z = SQRT(DLAMCH('Epsilon'))
-*
-* Compute factorization.
-*
- DO 20 I = 1, MN
-*
- OFFPI = OFFSET + I
-*
-* Determine ith pivot column and swap if necessary.
-*
- PVT = ( I-1 ) + IDAMAX( N-I+1, VN1( I ), 1 )
-*
- IF( PVT.NE.I ) THEN
- CALL ZSWAP( M, A( 1, PVT ), 1, A( 1, I ), 1 )
- ITEMP = JPVT( PVT )
- JPVT( PVT ) = JPVT( I )
- JPVT( I ) = ITEMP
- VN1( PVT ) = VN1( I )
- VN2( PVT ) = VN2( I )
- END IF
-*
-* Generate elementary reflector H(i).
-*
- IF( OFFPI.LT.M ) THEN
- CALL ZLARFG( M-OFFPI+1, A( OFFPI, I ), A( OFFPI+1, I ), 1,
- $ TAU( I ) )
- ELSE
- CALL ZLARFG( 1, A( M, I ), A( M, I ), 1, TAU( I ) )
- END IF
-*
- IF( I.LT.N ) THEN
-*
-* Apply H(i)' to A(offset+i:m,i+1:n) from the left.
-*
- AII = A( OFFPI, I )
- A( OFFPI, I ) = CONE
- CALL ZLARF( 'Left', M-OFFPI+1, N-I, A( OFFPI, I ), 1,
- $ DCONJG( TAU( I ) ), A( OFFPI, I+1 ), LDA,
- $ WORK( 1 ) )
- A( OFFPI, I ) = AII
- END IF
-*
-* Update partial column norms.
-*
- DO 10 J = I + 1, N
- IF( VN1( J ).NE.ZERO ) THEN
-*
-* NOTE: The following 4 lines follow from the analysis in
-* Lapack Working Note 176.
-*
- TEMP = ONE - ( ABS( A( OFFPI, J ) ) / VN1( J ) )**2
- TEMP = MAX( TEMP, ZERO )
- TEMP2 = TEMP*( VN1( J ) / VN2( J ) )**2
- IF( TEMP2 .LE. TOL3Z ) THEN
- IF( OFFPI.LT.M ) THEN
- VN1( J ) = DZNRM2( M-OFFPI, A( OFFPI+1, J ), 1 )
- VN2( J ) = VN1( J )
- ELSE
- VN1( J ) = ZERO
- VN2( J ) = ZERO
- END IF
- ELSE
- VN1( J ) = VN1( J )*SQRT( TEMP )
- END IF
- END IF
- 10 CONTINUE
-*
- 20 CONTINUE
-*
- RETURN
-*
-* End of ZLAQP2
-*
- END