LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ zhecon_3()

subroutine zhecon_3 ( character  UPLO,
integer  N,
complex*16, dimension( lda, * )  A,
integer  LDA,
complex*16, dimension( * )  E,
integer, dimension( * )  IPIV,
double precision  ANORM,
double precision  RCOND,
complex*16, dimension( * )  WORK,
integer  INFO 
)

ZHECON_3

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

Purpose:
 ZHECON_3 estimates the reciprocal of the condition number (in the
 1-norm) of a complex Hermitian matrix A using the factorization
 computed by ZHETRF_RK or ZHETRF_BK:

    A = P*U*D*(U**H)*(P**T) or A = P*L*D*(L**H)*(P**T),

 where U (or L) is unit upper (or lower) triangular matrix,
 U**H (or L**H) is the conjugate of U (or L), P is a permutation
 matrix, P**T is the transpose of P, and D is Hermitian and block
 diagonal with 1-by-1 and 2-by-2 diagonal blocks.

 An estimate is obtained for norm(inv(A)), and the reciprocal of the
 condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))).
 This routine uses BLAS3 solver ZHETRS_3.
Parameters
[in]UPLO
          UPLO is CHARACTER*1
          Specifies whether the details of the factorization are
          stored as an upper or lower triangular matrix:
          = 'U':  Upper triangular, form is A = P*U*D*(U**H)*(P**T);
          = 'L':  Lower triangular, form is A = P*L*D*(L**H)*(P**T).
[in]N
          N is INTEGER
          The order of the matrix A.  N >= 0.
[in]A
          A is COMPLEX*16 array, dimension (LDA,N)
          Diagonal of the block diagonal matrix D and factors U or L
          as computed by ZHETRF_RK and ZHETRF_BK:
            a) ONLY diagonal elements of the Hermitian block diagonal
               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
               (superdiagonal (or subdiagonal) elements of D
                should be provided on entry in array E), and
            b) If UPLO = 'U': factor U in the superdiagonal part of A.
               If UPLO = 'L': factor L in the subdiagonal part of A.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A.  LDA >= max(1,N).
[in]E
          E is COMPLEX*16 array, dimension (N)
          On entry, contains the superdiagonal (or subdiagonal)
          elements of the Hermitian block diagonal matrix D
          with 1-by-1 or 2-by-2 diagonal blocks, where
          If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced;
          If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced.

          NOTE: For 1-by-1 diagonal block D(k), where
          1 <= k <= N, the element E(k) is not referenced in both
          UPLO = 'U' or UPLO = 'L' cases.
[in]IPIV
          IPIV is INTEGER array, dimension (N)
          Details of the interchanges and the block structure of D
          as determined by ZHETRF_RK or ZHETRF_BK.
[in]ANORM
          ANORM is DOUBLE PRECISION
          The 1-norm of the original matrix A.
[out]RCOND
          RCOND is DOUBLE PRECISION
          The reciprocal of the condition number of the matrix A,
          computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an
          estimate of the 1-norm of inv(A) computed in this routine.
[out]WORK
          WORK is COMPLEX*16 array, dimension (2*N)
[out]INFO
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -i, the i-th argument had an illegal value
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
  June 2017,  Igor Kozachenko,
                  Computer Science Division,
                  University of California, Berkeley

  September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
                  School of Mathematics,
                  University of Manchester

Definition at line 164 of file zhecon_3.f.

166 *
167 * -- LAPACK computational routine --
168 * -- LAPACK is a software package provided by Univ. of Tennessee, --
169 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
170 *
171 * .. Scalar Arguments ..
172  CHARACTER UPLO
173  INTEGER INFO, LDA, N
174  DOUBLE PRECISION ANORM, RCOND
175 * ..
176 * .. Array Arguments ..
177  INTEGER IPIV( * )
178  COMPLEX*16 A( LDA, * ), E( * ), WORK( * )
179 * ..
180 *
181 * =====================================================================
182 *
183 * .. Parameters ..
184  DOUBLE PRECISION ONE, ZERO
185  parameter( one = 1.0d+0, zero = 0.0d+0 )
186 * ..
187 * .. Local Scalars ..
188  LOGICAL UPPER
189  INTEGER I, KASE
190  DOUBLE PRECISION AINVNM
191 * ..
192 * .. Local Arrays ..
193  INTEGER ISAVE( 3 )
194 * ..
195 * .. External Functions ..
196  LOGICAL LSAME
197  EXTERNAL lsame
198 * ..
199 * .. External Subroutines ..
200  EXTERNAL zhetrs_3, zlacn2, xerbla
201 * ..
202 * .. Intrinsic Functions ..
203  INTRINSIC max
204 * ..
205 * .. Executable Statements ..
206 *
207 * Test the input parameters.
208 *
209  info = 0
210  upper = lsame( uplo, 'U' )
211  IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
212  info = -1
213  ELSE IF( n.LT.0 ) THEN
214  info = -2
215  ELSE IF( lda.LT.max( 1, n ) ) THEN
216  info = -4
217  ELSE IF( anorm.LT.zero ) THEN
218  info = -7
219  END IF
220  IF( info.NE.0 ) THEN
221  CALL xerbla( 'ZHECON_3', -info )
222  RETURN
223  END IF
224 *
225 * Quick return if possible
226 *
227  rcond = zero
228  IF( n.EQ.0 ) THEN
229  rcond = one
230  RETURN
231  ELSE IF( anorm.LE.zero ) THEN
232  RETURN
233  END IF
234 *
235 * Check that the diagonal matrix D is nonsingular.
236 *
237  IF( upper ) THEN
238 *
239 * Upper triangular storage: examine D from bottom to top
240 *
241  DO i = n, 1, -1
242  IF( ipiv( i ).GT.0 .AND. a( i, i ).EQ.zero )
243  $ RETURN
244  END DO
245  ELSE
246 *
247 * Lower triangular storage: examine D from top to bottom.
248 *
249  DO i = 1, n
250  IF( ipiv( i ).GT.0 .AND. a( i, i ).EQ.zero )
251  $ RETURN
252  END DO
253  END IF
254 *
255 * Estimate the 1-norm of the inverse.
256 *
257  kase = 0
258  30 CONTINUE
259  CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
260  IF( kase.NE.0 ) THEN
261 *
262 * Multiply by inv(L*D*L**H) or inv(U*D*U**H).
263 *
264  CALL zhetrs_3( uplo, n, 1, a, lda, e, ipiv, work, n, info )
265  GO TO 30
266  END IF
267 *
268 * Compute the estimate of the reciprocal condition number.
269 *
270  IF( ainvnm.NE.zero )
271  $ rcond = ( one / ainvnm ) / anorm
272 *
273  RETURN
274 *
275 * End of ZHECON_3
276 *
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:60
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
subroutine zhetrs_3(UPLO, N, NRHS, A, LDA, E, IPIV, B, LDB, INFO)
ZHETRS_3
Definition: zhetrs_3.f:165
subroutine zlacn2(N, V, X, EST, KASE, ISAVE)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
Definition: zlacn2.f:133
Here is the call graph for this function:
Here is the caller graph for this function: