LAPACK  3.10.1
LAPACK: Linear Algebra PACKage

◆ dgetc2()

subroutine dgetc2 ( integer  N,
double precision, dimension( lda, * )  A,
integer  LDA,
integer, dimension( * )  IPIV,
integer, dimension( * )  JPIV,
integer  INFO 
)

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

Download DGETC2 + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 DGETC2 computes an LU factorization with 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 the Level 2 BLAS algorithm.
Parameters
[in]N
          N is INTEGER
          The order of the matrix A. N >= 0.
[in,out]A
          A is DOUBLE PRECISION array, dimension (LDA, N)
          On entry, the n-by-n matrix A 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, i.e., 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
                we try to solve for x in Ax = b. So U is perturbed to
                avoid the overflow.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Bo Kagstrom and Peter Poromaa, Department of Computing Science, Umea University, S-901 87 Umea, Sweden.

Definition at line 110 of file dgetc2.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  DOUBLE PRECISION 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 dger, dswap, dlabad
136 * ..
137 * .. External Functions ..
138  DOUBLE PRECISION DLAMCH
139  EXTERNAL dlamch
140 * ..
141 * .. Intrinsic Functions ..
142  INTRINSIC abs, 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  CALL dlabad( smlnum, bignum )
159 *
160 * Handle the case N=1 by itself
161 *
162  IF( n.EQ.1 ) THEN
163  ipiv( 1 ) = 1
164  jpiv( 1 ) = 1
165  IF( abs( a( 1, 1 ) ).LT.smlnum ) THEN
166  info = 1
167  a( 1, 1 ) = smlnum
168  END IF
169  RETURN
170  END IF
171 *
172 * Factorize A using complete pivoting.
173 * Set pivots less than SMIN to SMIN.
174 *
175  DO 40 i = 1, n - 1
176 *
177 * Find max element in matrix A
178 *
179  xmax = zero
180  DO 20 ip = i, n
181  DO 10 jp = i, n
182  IF( abs( a( ip, jp ) ).GE.xmax ) THEN
183  xmax = abs( a( ip, jp ) )
184  ipv = ip
185  jpv = jp
186  END IF
187  10 CONTINUE
188  20 CONTINUE
189  IF( i.EQ.1 )
190  $ smin = max( eps*xmax, smlnum )
191 *
192 * Swap rows
193 *
194  IF( ipv.NE.i )
195  $ CALL dswap( n, a( ipv, 1 ), lda, a( i, 1 ), lda )
196  ipiv( i ) = ipv
197 *
198 * Swap columns
199 *
200  IF( jpv.NE.i )
201  $ CALL dswap( n, a( 1, jpv ), 1, a( 1, i ), 1 )
202  jpiv( i ) = jpv
203 *
204 * Check for singularity
205 *
206  IF( abs( a( i, i ) ).LT.smin ) THEN
207  info = i
208  a( i, i ) = smin
209  END IF
210  DO 30 j = i + 1, n
211  a( j, i ) = a( j, i ) / a( i, i )
212  30 CONTINUE
213  CALL dger( n-i, n-i, -one, a( i+1, i ), 1, a( i, i+1 ), lda,
214  $ a( i+1, i+1 ), lda )
215  40 CONTINUE
216 *
217  IF( abs( a( n, n ) ).LT.smin ) THEN
218  info = n
219  a( n, n ) = smin
220  END IF
221 *
222 * Set last pivots to N
223 *
224  ipiv( n ) = n
225  jpiv( n ) = n
226 *
227  RETURN
228 *
229 * End of DGETC2
230 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
subroutine dlabad(SMALL, LARGE)
DLABAD
Definition: dlabad.f:74
subroutine dswap(N, DX, INCX, DY, INCY)
DSWAP
Definition: dswap.f:82
subroutine dger(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
DGER
Definition: dger.f:130
Here is the call graph for this function:
Here is the caller graph for this function: