Annotation of rpl/lapack/lapack/zla_porpvgrw.f, revision 1.1

1.1     ! bertrand    1:       DOUBLE PRECISION FUNCTION ZLA_PORPVGRW( UPLO, NCOLS, A, LDA, AF, 
        !             2:      $                                        LDAF, WORK )
        !             3: *
        !             4: *     -- LAPACK routine (version 3.2.2)                                 --
        !             5: *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
        !             6: *     -- Jason Riedy of Univ. of California Berkeley.                 --
        !             7: *     -- June 2010                                                    --
        !             8: *
        !             9: *     -- LAPACK is a software package provided by Univ. of Tennessee, --
        !            10: *     -- Univ. of California Berkeley and NAG Ltd.                    --
        !            11: *
        !            12:       IMPLICIT NONE
        !            13: *     ..
        !            14: *     .. Scalar Arguments ..
        !            15:       CHARACTER*1        UPLO
        !            16:       INTEGER            NCOLS, LDA, LDAF
        !            17: *     ..
        !            18: *     .. Array Arguments ..
        !            19:       COMPLEX*16         A( LDA, * ), AF( LDAF, * )
        !            20:       DOUBLE PRECISION   WORK( * )
        !            21: *     ..
        !            22: *
        !            23: *  Purpose
        !            24: *  =======
        !            25: * 
        !            26: *  ZLA_PORPVGRW computes the reciprocal pivot growth factor
        !            27: *  norm(A)/norm(U). The "max absolute element" norm is used. If this is
        !            28: *  much less than 1, the stability of the LU factorization of the
        !            29: *  (equilibrated) matrix A could be poor. This also means that the
        !            30: *  solution X, estimated condition numbers, and error bounds could be
        !            31: *  unreliable.
        !            32: *
        !            33: *  Arguments
        !            34: *  =========
        !            35: *
        !            36: *     UPLO    (input) CHARACTER*1
        !            37: *       = 'U':  Upper triangle of A is stored;
        !            38: *       = 'L':  Lower triangle of A is stored.
        !            39: *
        !            40: *     NCOLS   (input) INTEGER
        !            41: *     The number of columns of the matrix A. NCOLS >= 0.
        !            42: *
        !            43: *     A       (input) COMPLEX*16 array, dimension (LDA,N)
        !            44: *     On entry, the N-by-N matrix A.
        !            45: *
        !            46: *     LDA     (input) INTEGER
        !            47: *     The leading dimension of the array A.  LDA >= max(1,N).
        !            48: *
        !            49: *     AF      (input) COMPLEX*16 array, dimension (LDAF,N)
        !            50: *     The triangular factor U or L from the Cholesky factorization
        !            51: *     A = U**T*U or A = L*L**T, as computed by ZPOTRF.
        !            52: *
        !            53: *     LDAF    (input) INTEGER
        !            54: *     The leading dimension of the array AF.  LDAF >= max(1,N).
        !            55: *
        !            56: *     WORK    (input) COMPLEX*16 array, dimension (2*N)
        !            57: *
        !            58: *  =====================================================================
        !            59: *
        !            60: *     .. Local Scalars ..
        !            61:       INTEGER            I, J
        !            62:       DOUBLE PRECISION   AMAX, UMAX, RPVGRW
        !            63:       LOGICAL            UPPER
        !            64:       COMPLEX*16         ZDUM
        !            65: *     ..
        !            66: *     .. External Functions ..
        !            67:       EXTERNAL           LSAME, ZLASET
        !            68:       LOGICAL            LSAME
        !            69: *     ..
        !            70: *     .. Intrinsic Functions ..
        !            71:       INTRINSIC          ABS, MAX, MIN, REAL, DIMAG
        !            72: *     ..
        !            73: *     .. Statement Functions ..
        !            74:       DOUBLE PRECISION   CABS1
        !            75: *     ..
        !            76: *     .. Statement Function Definitions ..
        !            77:       CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
        !            78: *     ..
        !            79: *     .. Executable Statements ..
        !            80:       UPPER = LSAME( 'Upper', UPLO )
        !            81: *
        !            82: *     DPOTRF will have factored only the NCOLSxNCOLS leading minor, so
        !            83: *     we restrict the growth search to that minor and use only the first
        !            84: *     2*NCOLS workspace entries.
        !            85: *
        !            86:       RPVGRW = 1.0D+0
        !            87:       DO I = 1, 2*NCOLS
        !            88:          WORK( I ) = 0.0D+0
        !            89:       END DO
        !            90: *
        !            91: *     Find the max magnitude entry of each column.
        !            92: *
        !            93:       IF ( UPPER ) THEN
        !            94:          DO J = 1, NCOLS
        !            95:             DO I = 1, J
        !            96:                WORK( NCOLS+J ) =
        !            97:      $              MAX( CABS1( A( I, J ) ), WORK( NCOLS+J ) )
        !            98:             END DO
        !            99:          END DO
        !           100:       ELSE
        !           101:          DO J = 1, NCOLS
        !           102:             DO I = J, NCOLS
        !           103:                WORK( NCOLS+J ) =
        !           104:      $              MAX( CABS1( A( I, J ) ), WORK( NCOLS+J ) )
        !           105:             END DO
        !           106:          END DO
        !           107:       END IF
        !           108: *
        !           109: *     Now find the max magnitude entry of each column of the factor in
        !           110: *     AF.  No pivoting, so no permutations.
        !           111: *
        !           112:       IF ( LSAME( 'Upper', UPLO ) ) THEN
        !           113:          DO J = 1, NCOLS
        !           114:             DO I = 1, J
        !           115:                WORK( J ) = MAX( CABS1( AF( I, J ) ), WORK( J ) )
        !           116:             END DO
        !           117:          END DO
        !           118:       ELSE
        !           119:          DO J = 1, NCOLS
        !           120:             DO I = J, NCOLS
        !           121:                WORK( J ) = MAX( CABS1( AF( I, J ) ), WORK( J ) )
        !           122:             END DO
        !           123:          END DO
        !           124:       END IF
        !           125: *
        !           126: *     Compute the *inverse* of the max element growth factor.  Dividing
        !           127: *     by zero would imply the largest entry of the factor's column is
        !           128: *     zero.  Than can happen when either the column of A is zero or
        !           129: *     massive pivots made the factor underflow to zero.  Neither counts
        !           130: *     as growth in itself, so simply ignore terms with zero
        !           131: *     denominators.
        !           132: *
        !           133:       IF ( LSAME( 'Upper', UPLO ) ) THEN
        !           134:          DO I = 1, NCOLS
        !           135:             UMAX = WORK( I )
        !           136:             AMAX = WORK( NCOLS+I )
        !           137:             IF ( UMAX /= 0.0D+0 ) THEN
        !           138:                RPVGRW = MIN( AMAX / UMAX, RPVGRW )
        !           139:             END IF
        !           140:          END DO
        !           141:       ELSE
        !           142:          DO I = 1, NCOLS
        !           143:             UMAX = WORK( I )
        !           144:             AMAX = WORK( NCOLS+I )
        !           145:             IF ( UMAX /= 0.0D+0 ) THEN
        !           146:                RPVGRW = MIN( AMAX / UMAX, RPVGRW )
        !           147:             END IF
        !           148:          END DO
        !           149:       END IF
        !           150: 
        !           151:       ZLA_PORPVGRW = RPVGRW
        !           152:       END

CVSweb interface <joel.bertrand@systella.fr>