1       2       3       4       5       6       7       8       9      10      11      12      13      14      15      16      17      18      19      20      21      22      23      24      25      26      27      28      29      30      31      32      33      34      35      36      37      38      39      40      41      42      43      44      45      46      47      48      49      50      51      52      53      54      55      56      57      58      59      60      61      62      63      64      65      66      67      68      69      70      71      72      73      74      75      76      77      78      79      80      81      82      83      84      85      86      87      88      89      90      91      92      93      94      95      96      97 SUBROUTINE ZPOTRI( UPLO, N, A, LDA, INFO ) * *  -- LAPACK routine (version 3.3.1) -- *  -- LAPACK is a software package provided by Univ. of Tennessee,    -- *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- *  -- April 2011                                                      -- * *     .. Scalar Arguments ..       CHARACTER          UPLO       INTEGER            INFO, LDA, N *     .. *     .. Array Arguments ..       COMPLEX*16         A( LDA, * ) *     .. * *  Purpose *  ======= * *  ZPOTRI computes the inverse of a complex Hermitian positive definite *  matrix A using the Cholesky factorization A = U**H*U or A = L*L**H *  computed by ZPOTRF. * *  Arguments *  ========= * *  UPLO    (input) CHARACTER*1 *          = 'U':  Upper triangle of A is stored; *          = 'L':  Lower triangle of A is stored. * *  N       (input) INTEGER *          The order of the matrix A.  N >= 0. * *  A       (input/output) COMPLEX*16 array, dimension (LDA,N) *          On entry, the triangular factor U or L from the Cholesky *          factorization A = U**H*U or A = L*L**H, as computed by *          ZPOTRF. *          On exit, the upper or lower triangle of the (Hermitian) *          inverse of A, overwriting the input factor U or L. * *  LDA     (input) INTEGER *          The leading dimension of the array A.  LDA >= max(1,N). * *  INFO    (output) INTEGER *          = 0:  successful exit *          < 0:  if INFO = -i, the i-th argument had an illegal value *          > 0:  if INFO = i, the (i,i) element of the factor U or L is *                zero, and the inverse could not be computed. * *  ===================================================================== * *     .. External Functions ..       LOGICAL            LSAME       EXTERNAL           LSAME *     .. *     .. External Subroutines ..       EXTERNAL           XERBLA, ZLAUUM, ZTRTRI *     .. *     .. Intrinsic Functions ..       INTRINSIC          MAX *     .. *     .. Executable Statements .. * *     Test the input parameters. *       INFO = 0       IF( .NOT.LSAME( UPLO, 'U' ) .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN          INFO = -1       ELSE IF( N.LT.0 ) THEN          INFO = -2       ELSE IF( LDA.LT.MAX( 1, N ) ) THEN          INFO = -4       END IF       IF( INFO.NE.0 ) THEN          CALL XERBLA( 'ZPOTRI', -INFO )          RETURN       END IF * *     Quick return if possible *       IF( N.EQ.0 )      $RETURN * * Invert the triangular Cholesky factor U or L. * CALL ZTRTRI( UPLO, 'Non-unit', N, A, LDA, INFO ) IF( INFO.GT.0 )$   RETURN * *     Form inv(U) * inv(U)**H or inv(L)**H * inv(L). *       CALL ZLAUUM( UPLO, N, A, LDA, INFO ) *       RETURN * *     End of ZPOTRI *       END