MODULE Numbers_Module
   USE Numeric_Kinds_Module
   IMPLICIT NONE
   SAVE
! Numbers  ===============================================================================
INTEGER, PARAMETER :: ione      = 1
INTEGER, PARAMETER :: itwo      = 2
INTEGER, PARAMETER :: ithree    = 3
INTEGER, PARAMETER :: ifour     = 4

REAL(Kind=WP_Kind), PARAMETER :: zero   =  0.0_wp_kind    !  0
REAL(Kind=WP_Kind), PARAMETER :: one    =  1.0_wp_kind    !  1
REAL(Kind=WP_Kind), PARAMETER :: two    =  2.0_wp_kind    !  2
REAL(Kind=WP_Kind), PARAMETER :: three  =  3.0_wp_kind    !  3
REAL(Kind=WP_Kind), PARAMETER :: four   =  4.0_wp_kind    !  4
REAL(Kind=WP_Kind), PARAMETER :: five   =  5.0_wp_kind    !  5
REAL(Kind=WP_Kind), PARAMETER :: six    =  6.0_wp_kind    !  6
REAL(Kind=WP_Kind), PARAMETER :: seven  =  7.0_wp_kind    !  7
REAL(Kind=WP_Kind), PARAMETER :: eight  =  8.0_wp_kind    !  8
REAL(Kind=WP_Kind), PARAMETER :: nine   =  9.0_wp_kind    !  9
REAL(Kind=WP_Kind), PARAMETER :: ten    = 10.0_wp_kind    ! 10
REAL(Kind=WP_Kind), PARAMETER :: eleven = 11.0_wp_kind    ! 11
REAL(Kind=WP_Kind), PARAMETER :: twelve = 12.0_wp_kind    ! 12
REAL(Kind=WP_Kind), PARAMETER :: thirteen = 13.0_wp_kind  ! 13
REAL(Kind=WP_Kind), PARAMETER :: fourteen = 14.0_wp_kind  ! 14
REAL(Kind=WP_Kind), PARAMETER :: fifteen  = 15.0_wp_kind  ! 15
REAL(Kind=WP_Kind), PARAMETER :: Sixteen  = 16.0_wp_kind  ! 16
REAL(Kind=WP_Kind), PARAMETER :: thirty   = 30.0_wp_kind  ! 30
REAL(Kind=WP_Kind), PARAMETER :: fortyfive =45.0_wp_kind  ! 45
REAL(Kind=WP_Kind), PARAMETER :: fortyeight=48.0_wp_kind  ! 48

! Fractions
REAL(KIND=WP_Kind), PARAMETER :: quarter     = 0.25_wp_kind             !  1/4
REAL(Kind=WP_Kind), PARAMETER :: onethird    = 1.0_wp_kind/3.0_wp_kind  !  1/3
REAL(Kind=WP_Kind), PARAMETER :: half        = 0.5_wp_kind              !  1/2
REAL(Kind=WP_Kind), PARAMETER :: ThreeHalves = 1.5_wp_kind              !  3/2

! Common Reals
REAL(Kind=WP_Kind), PARAMETER :: rt2=SQRT(two)
REAL(Kind=WP_Kind), PARAMETER :: rt3=SQRT(three)
REAL(Kind=WP_Kind), PARAMETER :: pi=four*ATAN(one)
REAL(Kind=WP_Kind), PARAMETER :: FourthPi = Pi/Four  ! One fourth of pi.
REAL(Kind=WP_Kind), PARAMETER :: HalfPi   = Pi/Two   ! One half of pi.
REAL(Kind=WP_Kind), PARAMETER :: TwoPi    = Two*Pi   ! Two times pi.

! Numerics ===============================================================================
REAL(Kind=WP_Kind), PARAMETER :: wp_Small  = TINY(one)    ! smallest number
REAL(Kind=WP_Kind), PARAMETER :: wp_Large  = HUGE(one)    ! largest number
REAL(Kind=WP_Kind), PARAMETER :: wp_Epsilon= EPSILON(one) ! smallest difference
INTEGER, PARAMETER :: wp_Prec   = PRECISION(one)          ! number of digits of precision
INTEGER, PARAMETER :: wp_minexp = MINEXPONENT(one)        ! smallest exponent
INTEGER, PARAMETER :: wp_maxexp = MAXEXPONENT(one)        ! largest exponent
END MODULE Numbers_Module