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

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

CVSweb interface <joel.bertrand@systella.fr>