MODULE Numeric_Kinds_Module IMPLICIT NONE SAVE INTEGER, PARAMETER :: I1_Kind = SELECTED_INT_KIND(1) ! 1 byte integer INTEGER, PARAMETER :: I4_Kind = SELECTED_INT_KIND(7) ! 4 byte integer INTEGER, PARAMETER :: I8_Kind = SELECTED_INT_KIND(14) ! 8 byte integer INTEGER, PARAMETER :: SP_Kind = SELECTED_REAL_KIND( 6,30) ! Single precsion INTEGER, PARAMETER :: DP_Kind = SELECTED_REAL_KIND(14,300) ! Double precsion INTEGER, PARAMETER :: QP_Kind = SELECTED_REAL_KIND(25,1000) ! Quadruple precision ! Current integer and real kinds INTEGER, PARAMETER :: IW_Kind = I4_Kind ! Working integer INTEGER, PARAMETER :: WP_Kind = DP_Kind ! Working real ! Commonly used integer constants INTEGER(KIND=IW_Kind), PARAMETER :: IW_Bit_Size = Bit_Size(1_IW_Kind) ! Number of bits INTEGER(KIND=IW_Kind), PARAMETER :: IW_Digits = Digits(1_IW_Kind) ! Number of digits INTEGER(KIND=IW_Kind), PARAMETER :: WP_Digits = Digits(1.0_WP_Kind) ! Number of digits INTEGER(KIND=IW_Kind), PARAMETER :: IP_Huge = Huge(1_IW_Kind) ! Largest Integer number ! Commonly used real constants REAL(KIND=WP_Kind), PARAMETER :: WP_Tiny = TINY(1.0_WP_Kind) ! Smallest real number REAL(KIND=WP_Kind), PARAMETER :: WP_Huge = Huge(1.0_WP_Kind) ! Largest real number END MODULE Numeric_Kinds_Module