LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches

## ◆ zgetc2()

 subroutine zgetc2 ( integer n, complex*16, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, integer, dimension( * ) jpiv, integer info )

ZGETC2 computes the LU factorization with complete pivoting of the general n-by-n matrix.

Purpose:
``` ZGETC2 computes an LU factorization, using complete pivoting, of the
n-by-n matrix A. The factorization has the form A = P * L * U * Q,
where P and Q are permutation matrices, L is lower triangular with
unit diagonal elements and U is upper triangular.

This is a level 1 BLAS version of the algorithm.```
Parameters
 [in] N ``` N is INTEGER The order of the matrix A. N >= 0.``` [in,out] A ``` A is COMPLEX*16 array, dimension (LDA, N) On entry, the n-by-n matrix to be factored. On exit, the factors L and U from the factorization A = P*L*U*Q; the unit diagonal elements of L are not stored. If U(k, k) appears to be less than SMIN, U(k, k) is given the value of SMIN, giving a nonsingular perturbed system.``` [in] LDA ``` LDA is INTEGER The leading dimension of the array A. LDA >= max(1, N).``` [out] IPIV ``` IPIV is INTEGER array, dimension (N). The pivot indices; for 1 <= i <= N, row i of the matrix has been interchanged with row IPIV(i).``` [out] JPIV ``` JPIV is INTEGER array, dimension (N). The pivot indices; for 1 <= j <= N, column j of the matrix has been interchanged with column JPIV(j).``` [out] INFO ``` INFO is INTEGER = 0: successful exit > 0: if INFO = k, U(k, k) is likely to produce overflow if one tries to solve for x in Ax = b. So U is perturbed to avoid the overflow.```
Contributors:
Bo Kagstrom and Peter Poromaa, Department of Computing Science, Umea University, S-901 87 Umea, Sweden.

Definition at line 110 of file zgetc2.f.

111*
112* -- LAPACK auxiliary routine --
113* -- LAPACK is a software package provided by Univ. of Tennessee, --
114* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
115*
116* .. Scalar Arguments ..
117 INTEGER INFO, LDA, N
118* ..
119* .. Array Arguments ..
120 INTEGER IPIV( * ), JPIV( * )
121 COMPLEX*16 A( LDA, * )
122* ..
123*
124* =====================================================================
125*
126* .. Parameters ..
127 DOUBLE PRECISION ZERO, ONE
128 parameter( zero = 0.0d+0, one = 1.0d+0 )
129* ..
130* .. Local Scalars ..
131 INTEGER I, IP, IPV, J, JP, JPV
132 DOUBLE PRECISION BIGNUM, EPS, SMIN, SMLNUM, XMAX
133* ..
134* .. External Subroutines ..
135 EXTERNAL zgeru, zswap
136* ..
137* .. External Functions ..
138 DOUBLE PRECISION DLAMCH
139 EXTERNAL dlamch
140* ..
141* .. Intrinsic Functions ..
142 INTRINSIC abs, dcmplx, max
143* ..
144* .. Executable Statements ..
145*
146 info = 0
147*
148* Quick return if possible
149*
150 IF( n.EQ.0 )
151 \$ RETURN
152*
153* Set constants to control overflow
154*
155 eps = dlamch( 'P' )
156 smlnum = dlamch( 'S' ) / eps
157 bignum = one / smlnum
158*
159* Handle the case N=1 by itself
160*
161 IF( n.EQ.1 ) THEN
162 ipiv( 1 ) = 1
163 jpiv( 1 ) = 1
164 IF( abs( a( 1, 1 ) ).LT.smlnum ) THEN
165 info = 1
166 a( 1, 1 ) = dcmplx( smlnum, zero )
167 END IF
168 RETURN
169 END IF
170*
171* Factorize A using complete pivoting.
172* Set pivots less than SMIN to SMIN
173*
174 DO 40 i = 1, n - 1
175*
176* Find max element in matrix A
177*
178 xmax = zero
179 DO 20 ip = i, n
180 DO 10 jp = i, n
181 IF( abs( a( ip, jp ) ).GE.xmax ) THEN
182 xmax = abs( a( ip, jp ) )
183 ipv = ip
184 jpv = jp
185 END IF
186 10 CONTINUE
187 20 CONTINUE
188 IF( i.EQ.1 )
189 \$ smin = max( eps*xmax, smlnum )
190*
191* Swap rows
192*
193 IF( ipv.NE.i )
194 \$ CALL zswap( n, a( ipv, 1 ), lda, a( i, 1 ), lda )
195 ipiv( i ) = ipv
196*
197* Swap columns
198*
199 IF( jpv.NE.i )
200 \$ CALL zswap( n, a( 1, jpv ), 1, a( 1, i ), 1 )
201 jpiv( i ) = jpv
202*
203* Check for singularity
204*
205 IF( abs( a( i, i ) ).LT.smin ) THEN
206 info = i
207 a( i, i ) = dcmplx( smin, zero )
208 END IF
209 DO 30 j = i + 1, n
210 a( j, i ) = a( j, i ) / a( i, i )
211 30 CONTINUE
212 CALL zgeru( n-i, n-i, -dcmplx( one ), a( i+1, i ), 1,
213 \$ a( i, i+1 ), lda, a( i+1, i+1 ), lda )
214 40 CONTINUE
215*
216 IF( abs( a( n, n ) ).LT.smin ) THEN
217 info = n
218 a( n, n ) = dcmplx( smin, zero )
219 END IF
220*
221* Set last pivots to N
222*
223 ipiv( n ) = n
224 jpiv( n ) = n
225*
226 RETURN
227*
228* End of ZGETC2
229*
subroutine zgeru(m, n, alpha, x, incx, y, incy, a, lda)
ZGERU
Definition zgeru.f:130
double precision function dlamch(cmach)
DLAMCH
Definition dlamch.f:69
subroutine zswap(n, zx, incx, zy, incy)
ZSWAP
Definition zswap.f:81
Here is the call graph for this function:
Here is the caller graph for this function: