Annotation of rpl/lapack/lapack/la_constants.f90, revision 1.1

1.1     ! bertrand    1: !> \brief \b LA_CONSTANTS is a module for the scaling constants for the compiled Fortran single and double precisions
        !             2: !
        !             3: !  =========== DOCUMENTATION ===========
        !             4: !
        !             5: ! Online html documentation available at
        !             6: !            http://www.netlib.org/lapack/explore-html/
        !             7: !
        !             8: !  Authors:
        !             9: !  ========
        !            10: !
        !            11: !> \author Edward Anderson, Lockheed Martin
        !            12: !
        !            13: !> \date May 2016
        !            14: !
        !            15: !> \ingroup OTHERauxiliary
        !            16: !
        !            17: !> \par Contributors:
        !            18: !  ==================
        !            19: !>
        !            20: !> Weslley Pereira, University of Colorado Denver, USA
        !            21: !> Nick Papior, Technical University of Denmark, DK
        !            22: !
        !            23: !> \par Further Details:
        !            24: !  =====================
        !            25: !>
        !            26: !> \verbatim
        !            27: !>
        !            28: !>  Anderson E. (2017)
        !            29: !>  Algorithm 978: Safe Scaling in the Level 1 BLAS
        !            30: !>  ACM Trans Math Softw 44:1--28
        !            31: !>  https://doi.org/10.1145/3061665
        !            32: !>
        !            33: !>  Blue, James L. (1978)
        !            34: !>  A Portable Fortran Program to Find the Euclidean Norm of a Vector
        !            35: !>  ACM Trans Math Softw 4:15--23
        !            36: !>  https://doi.org/10.1145/355769.355771
        !            37: !>
        !            38: !> \endverbatim
        !            39: !
        !            40: module LA_CONSTANTS
        !            41: !  -- LAPACK auxiliary module --
        !            42: !  -- LAPACK is a software package provided by Univ. of Tennessee,    --
        !            43: !  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
        !            44: 
        !            45: !  Standard constants for 
        !            46:    integer, parameter :: sp = kind(1.e0)
        !            47: 
        !            48:    real(sp), parameter :: szero = 0.0_sp
        !            49:    real(sp), parameter :: shalf = 0.5_sp
        !            50:    real(sp), parameter :: sone = 1.0_sp
        !            51:    real(sp), parameter :: stwo = 2.0_sp
        !            52:    real(sp), parameter :: sthree = 3.0_sp
        !            53:    real(sp), parameter :: sfour = 4.0_sp
        !            54:    real(sp), parameter :: seight = 8.0_sp
        !            55:    real(sp), parameter :: sten = 10.0_sp
        !            56:    complex(sp), parameter :: czero = ( 0.0_sp, 0.0_sp )
        !            57:    complex(sp), parameter :: chalf = ( 0.5_sp, 0.0_sp )
        !            58:    complex(sp), parameter :: cone = ( 1.0_sp, 0.0_sp )
        !            59:    character*1, parameter :: sprefix = 'S'
        !            60:    character*1, parameter :: cprefix = 'C'
        !            61: 
        !            62: !  Scaling constants
        !            63:    real(sp), parameter :: sulp = epsilon(0._sp)
        !            64:    real(sp), parameter :: seps = sulp * 0.5_sp
        !            65:    real(sp), parameter :: ssafmin = real(radix(0._sp),sp)**max( &
        !            66:       minexponent(0._sp)-1, &
        !            67:       1-maxexponent(0._sp) &
        !            68:    )
        !            69:    real(sp), parameter :: ssafmax = sone / ssafmin
        !            70:    real(sp), parameter :: ssmlnum = ssafmin / sulp
        !            71:    real(sp), parameter :: sbignum = ssafmax * sulp
        !            72:    real(sp), parameter :: srtmin = sqrt(ssmlnum)
        !            73:    real(sp), parameter :: srtmax = sqrt(sbignum)
        !            74: 
        !            75: !  Blue's scaling constants
        !            76:    real(sp), parameter :: stsml = real(radix(0._sp), sp)**ceiling( &
        !            77:        (minexponent(0._sp) - 1) * 0.5_sp)
        !            78:    real(sp), parameter :: stbig = real(radix(0._sp), sp)**floor( &
        !            79:        (maxexponent(0._sp) - digits(0._sp) + 1) * 0.5_sp)
        !            80: !  ssml >= 1/s, where s was defined in https://doi.org/10.1145/355769.355771
        !            81: !  The correction was added in https://doi.org/10.1145/3061665 to scale denormalized numbers correctly 
        !            82:    real(sp), parameter :: sssml = real(radix(0._sp), sp)**( - floor( &
        !            83:        (minexponent(0._sp) - digits(0._sp)) * 0.5_sp))
        !            84: !  sbig = 1/S, where S was defined in https://doi.org/10.1145/355769.355771
        !            85:    real(sp), parameter :: ssbig = real(radix(0._sp), sp)**( - ceiling( &
        !            86:        (maxexponent(0._sp) + digits(0._sp) - 1) * 0.5_sp))
        !            87: 
        !            88: !  Standard constants for 
        !            89:    integer, parameter :: dp = kind(1.d0)
        !            90: 
        !            91:    real(dp), parameter :: dzero = 0.0_dp
        !            92:    real(dp), parameter :: dhalf = 0.5_dp
        !            93:    real(dp), parameter :: done = 1.0_dp
        !            94:    real(dp), parameter :: dtwo = 2.0_dp
        !            95:    real(dp), parameter :: dthree = 3.0_dp
        !            96:    real(dp), parameter :: dfour = 4.0_dp
        !            97:    real(dp), parameter :: deight = 8.0_dp
        !            98:    real(dp), parameter :: dten = 10.0_dp
        !            99:    complex(dp), parameter :: zzero = ( 0.0_dp, 0.0_dp )
        !           100:    complex(dp), parameter :: zhalf = ( 0.5_dp, 0.0_dp )
        !           101:    complex(dp), parameter :: zone = ( 1.0_dp, 0.0_dp )
        !           102:    character*1, parameter :: dprefix = 'D'
        !           103:    character*1, parameter :: zprefix = 'Z'
        !           104: 
        !           105: !  Scaling constants
        !           106:    real(dp), parameter :: dulp = epsilon(0._dp)
        !           107:    real(dp), parameter :: deps = dulp * 0.5_dp
        !           108:    real(dp), parameter :: dsafmin = real(radix(0._dp),dp)**max( &
        !           109:       minexponent(0._dp)-1, &
        !           110:       1-maxexponent(0._dp) &
        !           111:    )
        !           112:    real(dp), parameter :: dsafmax = done / dsafmin
        !           113:    real(dp), parameter :: dsmlnum = dsafmin / dulp
        !           114:    real(dp), parameter :: dbignum = dsafmax * dulp
        !           115:    real(dp), parameter :: drtmin = sqrt(dsmlnum)
        !           116:    real(dp), parameter :: drtmax = sqrt(dbignum)
        !           117: 
        !           118: !  Blue's scaling constants
        !           119:    real(dp), parameter :: dtsml = real(radix(0._dp), dp)**ceiling( &
        !           120:        (minexponent(0._dp) - 1) * 0.5_dp)
        !           121:    real(dp), parameter :: dtbig = real(radix(0._dp), dp)**floor( &
        !           122:        (maxexponent(0._dp) - digits(0._dp) + 1) * 0.5_dp)
        !           123: !  ssml >= 1/s, where s was defined in https://doi.org/10.1145/355769.355771
        !           124: !  The correction was added in https://doi.org/10.1145/3061665 to scale denormalized numbers correctly 
        !           125:    real(dp), parameter :: dssml = real(radix(0._dp), dp)**( - floor( &
        !           126:        (minexponent(0._dp) - digits(0._dp)) * 0.5_dp))
        !           127: !  sbig = 1/S, where S was defined in https://doi.org/10.1145/355769.355771
        !           128:    real(dp), parameter :: dsbig = real(radix(0._dp), dp)**( - ceiling( &
        !           129:        (maxexponent(0._dp) + digits(0._dp) - 1) * 0.5_dp))
        !           130: 
        !           131: end module LA_CONSTANTS

CVSweb interface <joel.bertrand@systella.fr>