Annotation of rpl/lapack/lapack/zdrscl.f, revision 1.1
1.1 ! bertrand 1: SUBROUTINE ZDRSCL( N, SA, SX, INCX )
! 2: *
! 3: * -- LAPACK auxiliary routine (version 3.2) --
! 4: * -- LAPACK is a software package provided by Univ. of Tennessee, --
! 5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
! 6: * November 2006
! 7: *
! 8: * .. Scalar Arguments ..
! 9: INTEGER INCX, N
! 10: DOUBLE PRECISION SA
! 11: * ..
! 12: * .. Array Arguments ..
! 13: COMPLEX*16 SX( * )
! 14: * ..
! 15: *
! 16: * Purpose
! 17: * =======
! 18: *
! 19: * ZDRSCL multiplies an n-element complex vector x by the real scalar
! 20: * 1/a. This is done without overflow or underflow as long as
! 21: * the final result x/a does not overflow or underflow.
! 22: *
! 23: * Arguments
! 24: * =========
! 25: *
! 26: * N (input) INTEGER
! 27: * The number of components of the vector x.
! 28: *
! 29: * SA (input) DOUBLE PRECISION
! 30: * The scalar a which is used to divide each component of x.
! 31: * SA must be >= 0, or the subroutine will divide by zero.
! 32: *
! 33: * SX (input/output) COMPLEX*16 array, dimension
! 34: * (1+(N-1)*abs(INCX))
! 35: * The n-element vector x.
! 36: *
! 37: * INCX (input) INTEGER
! 38: * The increment between successive values of the vector SX.
! 39: * > 0: SX(1) = X(1) and SX(1+(i-1)*INCX) = x(i), 1< i<= n
! 40: *
! 41: * =====================================================================
! 42: *
! 43: * .. Parameters ..
! 44: DOUBLE PRECISION ZERO, ONE
! 45: PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
! 46: * ..
! 47: * .. Local Scalars ..
! 48: LOGICAL DONE
! 49: DOUBLE PRECISION BIGNUM, CDEN, CDEN1, CNUM, CNUM1, MUL, SMLNUM
! 50: * ..
! 51: * .. External Functions ..
! 52: DOUBLE PRECISION DLAMCH
! 53: EXTERNAL DLAMCH
! 54: * ..
! 55: * .. External Subroutines ..
! 56: EXTERNAL DLABAD, ZDSCAL
! 57: * ..
! 58: * .. Intrinsic Functions ..
! 59: INTRINSIC ABS
! 60: * ..
! 61: * .. Executable Statements ..
! 62: *
! 63: * Quick return if possible
! 64: *
! 65: IF( N.LE.0 )
! 66: $ RETURN
! 67: *
! 68: * Get machine parameters
! 69: *
! 70: SMLNUM = DLAMCH( 'S' )
! 71: BIGNUM = ONE / SMLNUM
! 72: CALL DLABAD( SMLNUM, BIGNUM )
! 73: *
! 74: * Initialize the denominator to SA and the numerator to 1.
! 75: *
! 76: CDEN = SA
! 77: CNUM = ONE
! 78: *
! 79: 10 CONTINUE
! 80: CDEN1 = CDEN*SMLNUM
! 81: CNUM1 = CNUM / BIGNUM
! 82: IF( ABS( CDEN1 ).GT.ABS( CNUM ) .AND. CNUM.NE.ZERO ) THEN
! 83: *
! 84: * Pre-multiply X by SMLNUM if CDEN is large compared to CNUM.
! 85: *
! 86: MUL = SMLNUM
! 87: DONE = .FALSE.
! 88: CDEN = CDEN1
! 89: ELSE IF( ABS( CNUM1 ).GT.ABS( CDEN ) ) THEN
! 90: *
! 91: * Pre-multiply X by BIGNUM if CDEN is small compared to CNUM.
! 92: *
! 93: MUL = BIGNUM
! 94: DONE = .FALSE.
! 95: CNUM = CNUM1
! 96: ELSE
! 97: *
! 98: * Multiply X by CNUM / CDEN and return.
! 99: *
! 100: MUL = CNUM / CDEN
! 101: DONE = .TRUE.
! 102: END IF
! 103: *
! 104: * Scale the vector X by MUL
! 105: *
! 106: CALL ZDSCAL( N, MUL, SX, INCX )
! 107: *
! 108: IF( .NOT.DONE )
! 109: $ GO TO 10
! 110: *
! 111: RETURN
! 112: *
! 113: * End of ZDRSCL
! 114: *
! 115: END
CVSweb interface <joel.bertrand@systella.fr>